在c#中打开完全访问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仍然myExcelWorkbooks.readOnly显示True

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

如果您使用的是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); 

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

如果Excel文件被另一个进程locking,Excel将始终以只读模式打开工作簿。 如果你一直在搞互操作,而不是后来杀死Excel进程,这可以解释你所看到的行为。 因此,您的代码和UAC设置可能会很好,所以我会摆脱任何运行的Excel实例,然后再进一步更改代码或者玩UAC。

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

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

http://closedxml.codeplex.com/

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

这对我来说总是有效的,默认情况下它是不可见的,并且可以读/写。 你应该使用Excel.Application()而不是Excel.ApplicationClass()显然,但我怀疑这是你的问题的路线(我也找不到我读的文章,我害怕)。 另外请注意,我是如何拆分声明工作簿和工作簿对象,显然这是最好的做法,否则你启动的过程不会总是被closures。