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);
这是刷新数据的最好方法吗?
如果你的电源查询/BI实现不允许使用数据管理网关(DMG),正如之前的海报所建议的那样,你可能想要探索一个名为电源更新的新软件,将更新设置为时间表。
另外,如果这是要求的一部分,您可以在c#应用程序中运行他们的Excel数据源更新任务。
需要注意两件事。
- excel中的连接默认为后台(异步)刷新,这会使您的编程刷新代码不确定。
- 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