在c#中以完全访问权限打开Excel工作表

本文关键字:权限 Excel 工作 访问权 访问 | 更新日期: 2023-09-27 17:51:15

我正在编写一个应用程序,该应用程序必须将值写入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。但是CCD_ 1仍然只显示CCD_ 2。

有人能帮我摆脱困境吗?

在c#中以完全访问权限打开Excel工作表

如果您使用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将始终以只读模式打开工作簿。如果您一直在处理interop,并且之后没有终止Excel进程,这可以解释您所看到的行为。因此,你的代码和UAC设置可能很好,所以在进一步更改你的代码或玩UAC之前,我会去掉任何正在运行的Excel实例。

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

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

http://closedxml.codeplex.com/

 xl = new Excel.Application();
 Excel.Workbooks books = xl.Workbooks;
 Excel.Workbook book = books.Open(filepath);

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

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

尝试OpenXML/ClosedXML,这将使您的生活更加轻松,程序体系结构也更加可扩展。