我有一个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);
这是刷新数据的最佳方法吗?
答案 0 :(得分:0)
如果您的Power Query / BI实施不允许使用前一张海报建议的数据管理网关(DMG),您可能需要浏览一个名为Power Update的新软件,以将更新设置为时间表。
另外,如果这是要求的一部分,您可以从C#应用程序中运行其Excel数据源更新任务。
答案 1 :(得分:0)
要注意两件事。
为了获得可靠的刷新,您需要将连接设置为不再是后台刷新,因此刷新块,然后刷新后短时间内休眠让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