我想将数据写入现有的excel文件(我很容易) 但我无法保存对excel文件的更改(实际上我看到了excel文件的更改,但它似乎打开了,毕竟它出现了一些问题,例如“文件已经打开了同名等等......” )
Excel.Application app= new Microsoft.Office.Interop.Excel.Application();
Excel.Workbook appbook= app.Workbooks.Open(appxls, 0, true, 5, "", "", false, Excel.XlPlatform.xlWindows, "\t", true, false, 0, true, Missing.Value, Missing.Value);
Excel.Sheets pages= appbook.Worksheets;
Excel.Worksheet page= (Excel.Worksheet)pages.get_Item(1);
// ...我在excel文件上更改了一些值并希望保存它们: // appxls是一个包含路径的字符串
appbook.SaveAs(appxls, Excel.XlFileFormat.xlWorkbookNormal, Type.Missing, Type.Missing,false, Type.Missing, Excel.XlSaveAsAccessMode.xlShared, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing);
appbook.Close(true, Missing.Value, Missing.Value);
app.Quit();
问题出在哪里,如何使用Microsoft.interop解决问题。
答案 0 :(得分:3)
您正在使用名为“appxls”的文件名以只读方式打开工作簿。 (ReadOnly
方法的Workbooks.Open
参数是第三个参数,您传入true
。)
您稍后使用Workbook.SaveAs
方法,但尝试使用您用于打开工作簿的“appxls”变量所保存的相同文件名来保存文件。这是尝试覆盖您已打开的只读文件,因此会被阻止。
我可以看到两种可能的解决方案:
传递false
ReadOnly
方法的Workbooks.Open
参数,以便稍后使用Workbook.Save
方法保存。在您的情况下,您可以通过调用appbook.Save()
来保存它。
继续以只读方式打开文件,但稍后使用Workbook.SaveAs
方法时,应将其保存在不同的名称下。
希望这有帮助!
答案 1 :(得分:-1)
我尝试使用Oledb,并且使用代码创建任何空的excel文件都是成功的:
OleDbConnection connection= new OleDbConnection(connectionstring);
string addSheet= "CREATE TABLE Mus(id nvarchar(255), name nvarchar(5))";
connection.Open();
OleDbCommand sqlcommand = new OleDbCommand(addSheet,connection);
sqlcommand.ExecuteNonQuery();
connection.Close();
其中connectionstring是:
string connectionstring = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\myexcel.xls;Extended Properties=""Excel 8.0;HDR=YES;""";
所以我在添加插入时遇到了另一个问题,错误是:
“查询值和目标字段的数量不同”
我仔细写了我的命令,我找不到错误:(我怎么解决?
谢谢!
(重要的是我正在使用aspx,上面的代码适用于桌面应用程序,但是对于aspx保存位置应该与responce.outstream不同,正如我从我的研究中所理解的那样)