我有一個excel文件,在「Sheet 1」中引用了數據透視表和圖表,這些數據來自「Sheet 2」,後者又指向SQL Server表中的記錄。在C#中刷新Excel表格
我已經編寫了一個SSIS作業來填充底層SQL Server表,然後使用以下代碼刷新Excel表。
//At this point, sql server table is already populated with data.
Microsoft.Office.Interop.Excel.Application excelApp = new Microsoft.Office.Interop.Excel.Application();
excelApp.DisplayAlerts = false;
excelApp.Visible = false;
Workbook excelWorkbook = excelApp.Workbooks.Open(workbookPath,
System.Reflection.Missing.Value,
System.Reflection.Missing.Value,
System.Reflection.Missing.Value,
System.Reflection.Missing.Value,
System.Reflection.Missing.Value,
System.Reflection.Missing.Value,
System.Reflection.Missing.Value,
System.Reflection.Missing.Value,
System.Reflection.Missing.Value,
System.Reflection.Missing.Value,
System.Reflection.Missing.Value,
System.Reflection.Missing.Value,
System.Reflection.Missing.Value,
System.Reflection.Missing.Value);
try
{
excelWorkbook.RefreshAll();
excelWorkbook.RefreshAll();
excelWorkbook.RefreshAll();
excelWorkbook.Save();
}
finally
{
excelWorkbook.Close(false, workbookPath, null);
System.Runtime.InteropServices.Marshal.ReleaseComObject(excelWorkbook);
excelWorkbook = null;
excelApp.Quit();
System.Runtime.InteropServices.Marshal.ReleaseComObject(excelApp);
excelApp = null;
問題是,當我打開excel,它仍然顯示以前的加載數據。當我點擊Excel文件中的「全部刷新」後,數據被刷新。是否有任何傻瓜證明方法來刷新所有使用C#的Excel中的數據。
你應該添加一個'catch'子句,只是爲了檢查是否沒有異常。通過這個代碼,失敗將會保持沉默。 –
@SteveB我有一個catch塊。我沒有將它包含在上面的代碼片段中。 – Phoenix
本質上,Excel文件無法在不打開並運行宏或點擊某些按鈕的情況下自行刷新。那是不可能的。一旦保存了文件,該文件就會保存到硬盤或存儲該文件的位置。更別提Excel了,你不能用任何其他文件類型來做這件事。 Excel中不內置自動刷新功能。編寫一個宏,並按照預定義的時間表與Windows調度程序進行調度。這將使其自動IMO。 – rvphx