如何使用 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# 使用 Interop 在 en excel 文件中添加日期时间戳
如何在 C# 中读取 excel 文件而不使用 Microsoft.Office.Interop.Excel 库