4

我正在编写一个必须将值写入 excel 电子表格中的单元格的应用程序。我可以打开工作簿,但它总是以只读模式打开。我的代码是

myExcelApp = new Excel.ApplicationClass();
myExcelApp.Visible = false;
Excel.Workbook myExcelWorkbooks = myExcelApp.Workbooks.Open(fileName, misValue, **false**, misValue, misValue, misValue, misValue, misValue, misValue, misValue, misValue, misValue, misValue, misValue, misValue);

第三个参数是只读的,我已将其指定为 false。但还是myExcelWorkbooks.readOnly只显示True

有人可以帮我解决这个问题吗?

4

5 回答 5

11

如果您使用的是 C# 4 或更高版本,请执行以下操作:

var myExcelApp = new Excel.Application()
    {
        Visible=false
    };

Excel.Workbook myExcelWorkbooks = myExcelApp.Workbooks.Open(Filename: @"F:\oo\bar.xlsx", ReadOnly: false);

完成后,请确保执行以下操作:

myExcelWorkbooks.Save();
myExcelWorkbooks.Close();

myExcelApp.Quit();

Marshal.ReleaseComObject(myExcelApp);

如果您还没有做第二部分,请打开任务管理器并杀死 EXCEL.EXE 的每个实例(或重新启动您的机器),然后再次尝试第一部分。

如果 Excel 文件被另一个进程锁定,Excel 将始终以只读模式打开工作簿。如果您一直在搞乱互操作,并且之后没有终止 Excel 进程,这可以解释您所看到的行为。因此,您的代码和 UAC 设置可能没问题,所以我会在进一步更改您的代码或使用 UAC 之前摆脱正在运行的任何 Excel 实例。

于 2013-01-11T11:51:24.953 回答
0

UAC 可能会以某种方式干扰它。尝试以管理员身份启动您的应用或 Visual Studio(从上下文菜单中)

于 2013-01-11T11:48:53.683 回答
0

尝试使用 OpenXml,在 codeplex 上有一个用于简单迭代的包装器。

http://closedxml.codeplex.com/

于 2013-01-11T11:56:08.100 回答
0
 xl = new Excel.Application();
 Excel.Workbooks books = xl.Workbooks;
 Excel.Workbook book = books.Open(filepath);

这对我来说总是有效的,默认情况下它是不可见的,并打开以供读/写。您应该使用Excel.Application()而不是Excel.ApplicationClass()显然使用,但我怀疑这是您的问题的途径(我也找不到我读到的文章,我很害怕)。还要注意我是如何拆分声明 Workbooks 和 Workbook 对象的,这显然是最佳实践,否则您启动的进程不会总是关闭。

于 2013-01-11T13:30:48.397 回答
-1

我使用 Interop.excel 做了一个大型项目。陷阱是可怕的,当您开始执行更高级的功能或处理大型数据集时,速度非常慢。

试试 OpenXML/ClosedXML,这将使您的生活更轻松,您的程序架构更具可扩展性。

于 2018-02-25T22:12:46.477 回答