Excel中刷新电源查询

本文关键字:查询 电源 刷新 Excel | 更新日期: 2023-09-27 18:06:53

我有一个excel应用程序,它使用power查询从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); 

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

Excel中刷新电源查询

如果你的电源查询/BI实现不允许使用数据管理网关(DMG),正如之前的海报所建议的那样,你可能想要探索一个名为电源更新的新软件,将更新设置为时间表。

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

需要注意两件事。

  1. excel中的连接默认为后台(异步)刷新,这会使您的编程刷新代码不确定。
  2. Power Query通过轮询来更新查询刷新的状态。因此,如果您在刷新后立即关闭工作簿,则状态将没有机会更新,并且下次打开工作簿时状态将指示错误。

为了获得可靠的刷新,您需要将连接设置为不再后台刷新,因此刷新阻塞,然后在刷新之后睡一小段时间,让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 - 49 - ee - 8 + 30 - 89 de371ba74d/multiple -查询-运行-一-后another?forum=powerquery # df2947a7 - 585 - 8337 - 4 - f75 e0ead5068254