2013-06-03 53 views
0

我有一個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中的數據。

+0

你應該添加一個'catch'子句,只是爲了檢查是否沒有異常。通過這個代碼,失敗將會保持沉默。 –

+0

@SteveB我有一個catch塊。我沒有將它包含在上面的代碼片段中。 – Phoenix

+0

本質上,Excel文件無法在不打開並運行宏或點擊某些按鈕的情況下自行刷新。那是不可能的。一旦保存了文件,該文件就會保存到硬盤或存儲該文件的位置。更別提Excel了,你不能用任何其他文件類型來做這件事。 Excel中不內置自動刷新功能。編寫一個宏,並按照預定義的時間表與Windows調度程序進行調度。這將使其自動IMO。 – rvphx

回答

0

做刷新後嘗試的代碼更改爲

excelWorkbook.SaveCopyAS("Your File save location with FileName"); 

,而不是

excelWorkbook.Save(); 

你的情況可能會有幫助。

0

刷新這是保護和隱藏Excel工作表的代碼。 使用必需的命名空間,如下

using System; 
using System.Data; 
using Microsoft.CSharp; // This is also used when we use Excel 
using System.Collections; // This is required if you are using array list 
using Excel=Microsoft.Office.Interop.Excel; // Used when we work with Excel 

初始化Excel應用程序,文件路徑是包含密碼

string FilePath = @"C:\Filename.xlsx"; 
Excel.Application ExcelApp = new Excel.Application(); // Initialize Excel Application 
ExcelApp.DisplayAlerts = false;    
Excel.Workbook WB = ExcelApp.Workbooks.Open(FilePath); // Initialize Excel Workbook 

然後你就可以創建一個函數的字符串變量或使用下面的代碼做直線前進, toRefresh在此代碼中是一個Arraylist,其中包含刷新所需的工作表列表。

在這個函數中,我們傳遞工作簿(WB)

RefreshSheets(WB); 

下面是函數的定義:在下面的函數中使用(Excel.Workbook WB),C#都知道,我們傳遞WB這是Excel應用程序的工作簿。

public void RefreshSheets(Excel.Workbook WB) 
    { 
     WB.RefreshAll(); 
     //WB.Save(); 
    } 

請讓我知道這是否有幫助。