我创建了一个excel文件,它与Oracle数据库有外部连接。这个excel工作簿有一个带有数据透视表的工作表,允许其他人从数据中提取大量信息/含义。
我们不希望在每个用户上安装Oracle客户端'想要使用这个excel工作簿的计算机,所以我们将excel工作簿分成两个文件。一个是外部数据,另一个是只有数据透视表,它引用另一个excel工作簿和数据。
我们需要excel工作簿中的数据,并且数据会定期刷新,而无需每次需要刷新时手动打开带有数据的excel工作簿。有关最佳方法的任何建议吗?
例如,可能运行由Windows任务调度程序调用的脚本,该脚本将具有数据源更新?感谢。
答案 0 :(得分:0)
在评论中,建议使用SQL Server Reporting Services作为选项。我作为一个选项开始做一些研究,但我需要一个非常快速的解决方案,所以我最终做了以下事情:
我设法在网上找到了一些帖子,其中有一些代码可以让我找到解决方案。 http://www.mattmasson.com/2013/03/refresh-an-excel-workbook-with-a-script-task/
和
两者中的代码非常相似。它用c#编写,看起来像这样:
var filename = "SomePath\\Book2.xlsx";
object missingValue = System.Reflection.Missing.Value;
var excelApp = new Microsoft.Office.Interop.Excel.ApplicationClass();
excelApp.DisplayAlerts = false;
var Workbook = excelApp.Workbooks.Open(filename, missingValue, missingValue,
missingValue, missingValue, missingValue, missingValue, missingValue, missingValue, missingValue,
missingValue, missingValue, missingValue, missingValue, missingValue);
Workbook.RefreshAll();
System.Threading.Thread.Sleep(30000);
Workbook.Save();
Workbook.Close(false, filename, null);
excelApp.Quit();
Workbook = null;
System.Runtime.InteropServices.Marshal.ReleaseComObject(excelApp);
对Thread.Sleep()的调用可确保在保存和关闭工作簿之前刷新数据。如果在刷新完成之前调用Workbook.Save(),则数据不会更新。必须有更好的方法来做到这一点,但我不知道它到底是什么。
我只是使用Windows任务调度程序来调用此脚本以在特定时间运行。它不是最优雅的解决方案,但它有效。