如何使用 c# interop 保存对原始 excel 文件的更改?

Posted

技术标签:

【中文标题】如何使用 c# interop 保存对原始 excel 文件的更改?【英文标题】:How to save changes to original excel file using c# interop? 【发布时间】:2015-06-07 18:45:33 【问题描述】:

我使用以下代码打开文件:

object MissingValue = System.Reflection.Missing.Value;

xlWorkBook = xlApp.Workbooks.Open(filepath, MissingValue, false,
            MissingValue, MissingValue, MissingValue, MissingValue,MissingValue,
            MissingValue, MissingValue, MissingValue, MissingValue, MissingValue, MissingValue, MissingValue);

我尝试了以下所有方法来保存和关闭文件,所有这些都导致 COM 错误,因为文件是只读文件:

xlApp.DisplayAlerts = false;

        Excel.Workbooks wbs = xlApp.Workbooks;
        foreach (Excel.Workbook wb in wbs)
        
            Console.WriteLine(wb.Name); 
            wb.Save();
            wb.Close();
        

        //xlWorkBook.Save();
        //xlWorkBook.SaveAs(filepath, Excel.XlFileFormat.xlWorkbookDefault, Type.Missing, Type.Missing,
        //false, false, Excel.XlSaveAsAccessMode.xlNoChange,
        //Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing);
        //xlWorkBook.Close();
        //xlWorkBook.Close(true, filepath, filepath);
        //xlWorkBook.Close(false, MissingValue, MissingValue);
        xlApp.Quit();
        releaseObject(xlWorkSheet);
        releaseObject(xlWorkBook);
        releaseObject(xlApp);

当我引用了其他几个问题时,我想知道可能出了什么问题。请帮忙!。感谢您的宝贵时间。

【问题讨论】:

文件是只读文件。如何保存只读文件?先把它设为非只读然后保存,或者你可以用其他名字保存。 @NikhilAgrawal 它不是只读文件,它可能由于某种原因被锁定。要么打开不对要么保存不对 我想出了一个不同方法的解决方案。我创建了一个带有方法的接口,只允许一次在方法之间创建和使用一个 Marshall 对象。从该界面记录所有内容,并验证保存和关闭的每个工作簿/工作表。 【参考方案1】:

我找到了解决方案。我使用 Excel.range 来更新所需的单元格值。 当我在其他人之前释放 Range 对象时,它成功保存并关闭。谢谢大家:) 发布代码如下:

private void releaseObject(object obj)
    
        try
        
            System.Runtime.InteropServices.Marshal.ReleaseComObject(obj);
            obj = null;
        
        catch (Exception ex)
        
            obj = null;
            MessageBox.Show("Unable to release the Object " + ex.ToString());
        
        finally
        
            GC.Collect();
        
    

【讨论】:

以上是关于如何使用 c# interop 保存对原始 excel 文件的更改?的主要内容,如果未能解决你的问题,请参考以下文章

Excel C API 等效于 C# 中的 Interop Range.Value

C# wordexcel转PDF,读取json数据

使用 C# 使用 Interop 在 en excel 文件中添加日期时间戳

如何在 C# 中读取 excel 文件而不使用 Microsoft.Office.Interop.Excel 库

使用与 C# 的互操作,Excel 保存更改的原始文件。如何否定这一点?

如何中断从 c# interop 调用的 c++ 代码