2014-06-05 38 views
0

我有一個excel應用程序,它使用電源查詢從SharePoint獲取整合列表。我已經設置屬性來刷新Excel的應用程序,刷新數據集。當我手動打開excel時,它會刷新並獲取更新的數據。但是,我在我的winform應用程序中使用這個excel來獲取數據。 因此,爲了刷新數據,我試圖打開和關閉代碼的Excel。在Excel中刷新電源查詢

但是數據沒有被刷新,並且它鎖定了電源查詢插件。當我再次手動打開Excel表格時,運行代碼後,出現錯誤「查詢未運行,或數據庫表無法打開」。

功能區上不再顯示Power Query。 下面是我用它來打開和關閉Excel應用程序的代碼:

Excel.Application excelApp = new Excel.Application(); 
     excelApp.Visible = true; 
     string workbookPath = @"C:\Test\Test.xlsx"; 
     Excel.Workbook excelWorkbook = excelApp.Workbooks.Open(workbookPath, 
       0, false, 5, "", "", false, Excel.XlPlatform.xlWindows, "", 
       true, false, 0, true, false, false); 
     Excel.Sheets excelSheets = excelWorkbook.Worksheets; 
     string currentSheet = "Sheet1"; 
     Excel.Worksheet excelWorksheet = (Excel.Worksheet)excelSheets.get_Item(currentSheet); 
     Excel.Range excelCell = (Excel.Range)excelWorksheet.get_Range("A1", "A2"); 
     excelWorkbook.Close(true, "Test.xlxs", null); 

這是刷新數據的最佳方式是什麼?

+0

不知道如何以編程方式執行此操作,但可以使用網關自動刷新工作簿@ http://blogs.msdn.com/b/powerbi/archive/2014/08/19/scheduled-data-refresh-update-new-data -sources.aspx。 –

回答

0

如果您的Power Query/BI實施不允許按照以前的海報建議使用數據管理網關(DMG),您可能需要探索一個名爲Power Update的新軟件,以將更新設置爲計劃。

另外,如果這是需求的一部分,您可以從C#應用程序中運行其Excel數據源更新任務。

0

需要注意的兩件事。

  1. excel中的連接默認爲後臺(異步)刷新,這會使您的編程刷新代碼不確定。
  2. Power Query進行輪詢以更新查詢刷新的狀態。因此,如果在刷新後立即關閉工作簿,狀態將無法更新,下次打開工作簿時狀態將顯示錯誤。

爲了得到一個可靠的刷新,您將需要設置連接不再後臺刷新,所以刷新的塊,然後還要睡眠刷新後很短的時間,讓電源查詢的輪詢發現刷新已完成。

我想你的腳本改成這樣

Excel.Application excelApp = new Excel.Application(); 
    excelApp.Visible = true; 
    string workbookPath = @"C:\Test\Test.xlsx"; 
    Excel.Workbook excelWorkbook = excelApp.Workbooks.Open(workbookPath, 
      0, false, 5, "", "", false, Excel.XlPlatform.xlWindows, "", 
      true, false, 0, true, false, false); 
    excelWorkbook.RefreshAll(); 
    System.Threading.Thread.Sleep(2000); 
    excelWorkbook.Close(true, "Test.xlxs", null); 

你可以把這個代碼變得更好,通過查詢循環,並設定他們沒有後臺刷新這樣的VBA代碼做 https://social.technet.microsoft.com/Forums/en-US/9cbdd731-d139-49ee-8f30-89de371ba74d/multiple-queries-run-one-after-another?forum=powerquery#df2947a7-585a-4f75-8337-e0ead5068254