使用C#中的Interop以独占模式打开Excel文件

3
在我的应用程序中,我希望能够打开一个已经存在的Excel文件,并向该文件添加信息。我使用Microsoft Interop库。我注意到,如果使用Add创建新的电子表格,然后Saveas可以将文件设置为独占模式,直到关闭Excel应用程序。
但是,当打开现有文件时,我还没有找到同样的方法。我之所以这样做,是因为如果我在应用程序打开的情况下打开Excel文件,那么会出现异常。我认为当我使用Excel打开Excel文件时,它会自动以独占模式打开。
我考虑打开文件,然后使用saveas,但它没有起作用。
private object missing=Type.Missing;
workbook = workbooks.Open(excelfilename,missing, false, missing, missing, missing,missing,missing,missing,missing,false, missing,missing, missing, missing);
workbook.SaveAs((String)excelfilename, missing, missing, missing, missing, missing, Excel.XlSaveAsAccessMode.xlExclusive, Excel.XlSaveConflictResolution.xlLocalSessionChanges, missing, missing, missing, missing); 

我在代码后面收到了异常:

Excel.Range testrange = sheet.get_Range(rangetext);

我收到的异常是COMException,"Exception from HRESULT: 0x800401A8"。

1
当打开现有文件时,您已经拥有独占访问权,您必须使用ReadOnly来允许共享。异常与此无关。取最后4个十六进制数字并将其转换为十进制,然后在前面加上“Excel错误”进行谷歌搜索。有很多结果。 - Hans Passant
即使如此,当我在应用程序运行时使用Excel打开文件时,它并不会通知我可以以只读模式打开。当我创建自己的电子表格并使用另存为时,我就没有这个问题了,Excel 只能以只读模式打开文件。 - user1291263
你是使用两个不同的 Excel.Application 实例,还是只有一个? - code4life
我正在使用一个实例。但我想确保如果我使用 Excel 打开该文件,我不会遇到上述错误。 - user1291263
2个回答

0

我尝试在使用Open之后甚至使用SaveAs之后添加ExclusiveAccess()方法,但似乎这并没有起作用。 - user1291263

0
你可以访问 this article 获取如何使用 Microsoft 互操作库打开 Excel 文件、添加新工作表、获取范围和设置属性的完整示例。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接