打开具有c#完全访问权限的Excel工作表

时间:2013-01-11 11:42:24

标签: c# .net excel

我正在编写一个必须将值写入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

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

5 个答案:

答案 0 :(得分: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实例。

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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

http://closedxml.codeplex.com/

答案 3 :(得分:0)

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

这对我来说总是有效,默认情况下它是不可见的,并且可以读/写。您应该使用Excel.Application()而不是Excel.ApplicationClass(),但我怀疑这是您的问题的路径(我也找不到我读到的文章,我害怕)。还要注意我如何拆分声明工作簿和工作簿对象,再次显然是best practice,否则您启动的进程将不会总是关闭。

答案 4 :(得分:-1)

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

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