这个方法是我写的(和其他帖子差不多)
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;HDR=NO'";
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");
到目前为止,它工作正常,因为当我打开 test.xls 文件时,B5
更新为 17
。但是,如果有一个单元格:B1
依赖于B5
:B1=B5*5
,那么B1
不会自动更新。为了更新 B1
,我必须手动打开 Excel 文件并保存警告。我怎样才能以编程方式做到这一点?
最佳答案
我认为当您使用 ACE 驱动程序与 Excel 工作表交互时,您不能依赖 Excel 更新计算列。当您使用 OLEDB 对工作簿的工作表进行操作时,它将工作表视为类似结构的数据库表。
我想你可能想使用 OpenXML读/写文件。 StackOverflow 上有多个线程提供了有关使用 OpenXML 的更多信息,值得一试。
这post向您展示如何使用 OpenXML 强制重新计算单元格。
关于c# - 从属 Excel 单元格不会自动更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9169315/