c# - 从属 Excel 单元格不会自动更新

标签 c# excel oledb

这个方法是我写的(和其他帖子差不多)

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/

相关文章:

vb6 - 用于遗留 Sybase Adaptive Server Anywhere 的无 DSN ODBC 连接字符串

c++ - 在 32 位操作系统下查询的垃圾字符,在 64 位操作系统下正常

c# - 保存已发送的短信

python - 对象深入以获得所需的数组,numpy 随机选择

EXCEL:在工作表的第一行查找今天的日期

python - 使用 Pandas 和 Django 读取和解析 excel 文件

sql-server - Delphi 与 SQL Server : OLEDB vs. native 客户端驱动程序

c# - C# DLL 库中的 String.ToLower

c# - 我们可以在 C# 中使用 Struct 作为引用类型吗?

c# - NodaTime 的 Instant.Now