使用SSIS脚本任务刷新Excel

3
我有一个Excel文件,从数据库表中获取外部数据。我需要自动刷新文件并通过电子邮件发送它。我打算使用SSIS脚本任务来运行一些VB脚本,该脚本将打开文件、刷新数据、保存和关闭(显然不会打开应用程序)。然后我将使用电子邮件任务通过电子邮件发送该文件。我所需要的只是刷新文件的脚本,由于我完全不懂VB或C#,所以必须询问是否有人有这样的脚本,并且可以根据我的文件进行自定义,用于我的脚本任务。
我会感激任何提示!
谢谢,
Vlad

所以您只需要VB脚本来打开xls文件,刷新它并关闭它以进行电子邮件目的? - Amol Chavan
请注意,微软目前建议您不要在服务器环境中自动化Office应用程序:http://support.microsoft.com/kb/257757 您能否从头开始创建文件,然后通过电子邮件发送?https://dev59.com/rXVC5IYBdhLWcg3w51hv - Pondlife
为什么还要使用SSIS呢?你只需在Excel文件中添加一个启动宏即可在打开文件时刷新数据。只需将文件分发给您的受众,每次他们打开文件时,宏就会自动刷新数据……假设他们有网络访问权限。 - Bill Anton
Pondlife,感谢您的评论。当时我只是从一堆数据中创建文件,但是现在客户想要带有筛选、数据透视表和颜色编码的格式化Excel文件。现在我的文件有原始数据和一个带有筛选器的工作表以及另外两个工作表上的2个数据透视表。通过将这3个工作表分别链接到数据库表,我可以轻松刷新所有数据并保留格式。目前我所需要做的就是编写一个脚本来代替手动进行的操作,也就是点击“全部刷新”按钮并保存文件。 - VA.
iPolvo,不好意思,我们的客户在我们的网络之外,无法自行刷新文件。感谢您的建议! - VA.
4MO1,完全正确,只需打开文件,刷新并保存以便进一步发送电子邮件。 - VA.
4个回答

9
希望这是你所需要的内容。
 ' Create an Excel instance
   Dim oExcel
   Set oExcel = CreateObject("Excel.Application") 

 ' Disable Excel UI elements
   oExcel.Visible = True
   oExcel.DisplayAlerts = False
   oExcel.AskToUpdateLinks = False
   oExcel.AlertBeforeOverwriting = False

   Set oWorkbook = oExcel.Workbooks.Open("absolute path to your file")
   oWorkbook.RefreshAll
   oWorkbook.Save

   oExcel.Quit
   Set oWorkbook = Nothing
   Set oExcel = Nothing

@user1281185:如果这是你需要的,那么你可以点击左侧的复选标记接受它作为答案。 - Amol Chavan

1
在我的情况下(连接到 MS SQL 数据库),我必须取消选中“启用后台刷新”选项才能正常工作。
Excel:数据 > 连接 > 属性 > (取消选中)启用后台刷新。

1

虽然这是一篇旧帖子,但4M01的回答对我帮助很大。

在我的情况下,我必须在打开工作簿后加入一个睡眠以确保文件正确加载。

即:

oWorkbook = oExcel.Workbooks.Open("absolute path to your file")
Threading.Thread.Sleep(3000)
oWorkbook.RefreshAll

请注意,在VS 2015中不再需要设置。因此,只需删除代码中的“set”即可使其正常工作。


0

这可能并不完全符合您的需求,但如果它能够帮助您或其他人,我能够仅使用一个简单的

执行进程任务

使用以下内容:

  • 可执行文件为/..路径../Excel.exe 和
  • 参数为要打开的所需文件(完整路径)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接