插入数据后保存Excel文件时出现问题

时间:2010-04-04 14:34:08

标签: c# excel

我想将数据写入现有的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解决问题。

2 个答案:

答案 0 :(得分:3)

您正在使用名为“appxls”的文件名以只读方式打开工作簿。 (ReadOnly方法的Workbooks.Open参数是第三个参数,您传入true。)

您稍后使用Workbook.SaveAs方法,但尝试使用您用于打开工作簿的“appxls”变量所保存的相同文件名来保存文件。这是尝试覆盖您已打开的只读文件,因此会被阻止。

我可以看到两种可能的解决方案:

  1. 传递false ReadOnly方法的Workbooks.Open参数,以便稍后使用Workbook.Save方法保存。在您的情况下,您可以通过调用appbook.Save()来保存它。

  2. 继续以只读方式打开文件,但稍后使用Workbook.SaveAs方法时,应将其保存在不同的名称下。

    < / LI>

    希望这有帮助!

答案 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不同,正如我从我的研究中所理解的那样)