2014-06-05 37 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