OLEDB与更新Excel单元格

4
我写了这个方法来更新Excel单元格:
public void update(string fileName, string sheetName)
{
   string connString = connString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + Server.MapPath(fileName) + ";Extended Properties=Excel 12.0";

try
{
   OleDbConnection oledbConn = new OleDbConnection(connString);

   oledbConn.Open();

  OleDbCommand cmd = new OleDbCommand("UPDATE ["+sheetName+"$B5:B5] SET F1=17", oledbConn);

  cmd.ExecuteNonQuery();

  oledbConn.Close();
}
catch(Exception ex)
{
  Debug.Write("Error: " + ex.Message);
}
}

我这样称呼它:

update("test.xls", "test");

B5单元格可以在“test”工作表中找到,但其值从未更新。

我甚至尝试过这个:

UPDATE ["+sheetName+"$B5:B5] SET F1='17'

我总是遇到这个异常:未给一个或多个必需的参数赋值。

有什么想法吗?

提前感谢。

1个回答

5
编辑:我注意到您遗漏了HDR = No。
"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + FileName + 
";Extended Properties=""Excel 12.0;HDR=No"""

编辑

在 C# Express 中测试过

要么:

"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=z:\\docs\\myspreadsheet.xls;Extended Properties='Excel 12.0 xml;HDR=No'"

注意XML

或者

"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=z:\\docs\\myspreadsheet.xls;Extended Properties='Excel 8.0;HDR=No'"

对于*.xls文件


关于只读,你是正确的,它可以在没有只读的情况下工作,但是HDR=No似乎是必要的。 - Fionnuala
1
添加了HDR=No之后,我又遇到了另一个错误:{"找不到可安装的ISAM。"} - olidev
你知道这个问题吗:在更新 Excel 文件并重新读取它后,除非我手动打开它并按“x”关闭它,否则单元格值已被更新,此时会弹出提示框,我需要保存它以便保存新的单元格值? - olidev
我不太确定你在说什么,但是你确定已经释放了所有的对象吗?也许值得提出一个新问题,并附上一些代码示例。 - Fionnuala
我不相信你可以在不打开工作簿的情况下强制进行计算。这表明你需要的是Interop,而不是ADO。 - Fionnuala
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接