依赖的Excel单元格不会自动更新

时间:2012-02-07 00:16:51

标签: 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依赖于B5B1=B5*5,那么B1将不会自动更新。我必须手动打开Excel文件并将其保存并发出警告,以便更新B1。我该如何以编程方式完成?

1 个答案:

答案 0 :(得分:4)

当您使用ACE驱动程序与Excel工作表进行交互时,我认为您不能依赖Excel更新计算列。当您使用OLEDB操作工作簿的工作表时,它将工作表视为数据库表,如结构。

我想你可能想用OpenXML来读/写文件。 StackOverflow上有几个线程,有关使用OpenXML的更多信息值得一试。

这个post显示了你如何使用OpenXML强制细胞重新计算。