2012-02-07 43 views
1

我写了这个方法(在其他职位几乎相同)依赖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;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。我怎样才能以编程方式做到这一点?

回答

4

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

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

post显示了如何强制使用OpenXML重新计算单元格。

相关问题