刷新功能在Excel中查询

时间:2014-06-05 21:48:48

标签: c# excel sharepoint

我有一个excel应用程序,它使用电源查询从SharePoint获取整合列表。我已经将属性设置为在打开excel应用程序时刷新,以刷新数据集。当我手动打开excel时,它会刷新并获取更新的数据。但是,我在winform应用程序中使用此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); 

这是刷新数据的最佳方法吗?

2 个答案:

答案 0 :(得分:0)

如果您的Power Query / BI实施不允许使用前一张海报建议的数据管理网关(DMG),您可能需要浏览一个名为Power Update的新软件,以将更新设置为时间表。

另外,如果这是要求的一部分,您可以从C#应用程序中运行其Excel数据源更新任务。

答案 1 :(得分:0)

要注意两件事。

  1. excel中的连接默认为后台(异步)刷新,这可能会使您的程序化刷新代码不确定。
  2. Power Query执行轮询以更新查询刷新的状态。因此,如果您在刷新后立即关闭工作簿,则状态将无法更新,下次打开工作簿时状态将指示错误。
  3. 为了获得可靠的刷新,您需要将连接设置为不再是后台刷新,因此刷新块,然后刷新后短时间内休眠让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