Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/338.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 插入数据后保存excel文件时出现问题_C#_Excel - Fatal编程技术网

C# 插入数据后保存excel文件时出现问题

C# 插入数据后保存excel文件时出现问题,c#,excel,C#,Excel,我想将数据写入现有excel文件(我很容易做到) 但我无法将更改保存在excel文件上(实际上我看到excel文件上的更改,但它似乎已打开,毕竟出现了一些问题,例如“文件已以相同的名称打开,等等…” //…我更改了excel文件中的一些值并希望保存它们: //appxls是保存路径的字符串 appbook.SaveAs(appxls, Excel.XlFileFormat.xlWorkbookNormal, Type.Missing, Type.Missing,false, Type.Miss

我想将数据写入现有excel文件(我很容易做到) 但我无法将更改保存在excel文件上(实际上我看到excel文件上的更改,但它似乎已打开,毕竟出现了一些问题,例如“文件已以相同的名称打开,等等…”

//…我更改了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解决它。

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

稍后您将使用
工作簿.SaveAs
方法,但试图使用与打开工作簿时使用的'appxls'变量所保留的相同文件名保存文件。这是试图覆盖已打开的只读文件,因此被阻止

我可以看到两种可能的解决办法:

  • 工作簿的
    ReadOnly
    参数传入
    false
    。打开
    方法,以便以后可以使用
    工作簿保存它。保存
    方法。在您的情况下,可以通过调用
    appbook.save()
    来保存它

  • 继续以只读方式打开文件,但以后使用
    Workbook.SaveAs
    方法时,应以其他名称保存该文件


  • 希望这有帮助!

    我尝试使用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,保存位置应该与response.exptream不同,正如我从研究中了解到的)

    谢谢!这就是解决这个问题的方法:我去保存excel文件的位置,打开excel文件,文件冻结:(保存也不能完全工作。旧数据将被删除:(好的,抱歉,在我最初的回答中,我没有注意到您以只读方式打开文件。因此,这里实际上有两个问题需要处理。请参阅我更新的回答,上面……再次感谢,但真正的保存不安全:(我找不到原因。我无法保存旧信息。我插入了一些内容,旧信息显示:(您现在应该显示新代码并显示进行更改的代码。另外,请告诉我们发生了什么情况:Save或SaveAs方法是否引发异常,或者Save/SaveAs是否干净地运行,但当您重新打开同一文件时,该文件未显示任何已保存的更改。最后,您是否在多个Excel实例可以同时出现吗?我解决了我的问题,抱歉:(插入命令中的项目和插入的项目不同。
    string connectionstring = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\myexcel.xls;Extended Properties=""Excel 8.0;HDR=YES;""";