使用 SSIS 脚本任务刷新 Excel

Posted

技术标签:

【中文标题】使用 SSIS 脚本任务刷新 Excel【英文标题】:Refresh Excel using SSIS script task 【发布时间】:2012-04-05 11:22:06 【问题描述】:

我有一个从数据库表中获取外部数据的 Excel 文件。我需要自动刷新文件并通过电子邮件发送。我打算使用 SSIS 脚本任务来运行一些 VB 脚本来打开文件、刷新数据、保存和关闭(显然不会启动应用程序)。然后我将使用电子邮件任务通过电子邮件发送文件。我所需要的只是刷新文件的脚本,并且在 VB 或 C# 中完全是菜鸟 我会很感激任何提示! 多谢, 弗拉德

【问题讨论】:

所以你只需要 vb 脚本来打开 xls 文件,刷新它并关闭它以用于电子邮件目的? 仅供参考,Microsoft 目前建议您不要在服务器环境中自动化 Office 应用程序:support.microsoft.com/kb/257757 您可以从头开始创建文件然后通过电子邮件发送吗? ***.com/questions/151005/… 为什么还要麻烦 SSIS?您可以在打开文件时刷新数据的 Excel 文件中添加一个启动宏。只需将文件分发给您的观众,每次他们打开它时,宏都会自动刷新数据……假设他们可以访问网络。 Pondlife,感谢您的评论。当它只是一堆数据时,我实际上是从头开始创建文件的,但现在客户想要使用过滤器、数据透视和颜色编码格式化 excel。现在我的文件在一张工作表上有带有过滤器的原始数据,在另外两张工作表上有 2 个枢轴。通过将 3 张表格分别链接到数据库表,我可以轻松刷新所有数据并保留格式。此时我需要做的就是让脚本执行我现在手动执行的操作,即点击“全部刷新”按钮并保存文件。 iPolvo,不,客户端在我们的网络之外,无法自行刷新文件。不过谢谢你的建议! 【参考方案1】:

希望这就是你要找的东西

 ' 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 :如果这是您需要的,那么您可以通过单击左侧的复选标记来接受这个答案【参考方案2】:

旧帖子,但 4M01 的回答帮助了我很多。

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

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

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

【讨论】:

【参考方案3】:

这可能不完全符合您的需求,但如果它对您或某人有帮助,我可以使用一个简单的

执行流程任务

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

【讨论】:

【参考方案4】:

就我而言(连接到 MS SQL DB),我必须取消选中“启用后台刷新”选项才能正常工作。

Excel:数据>连接>属性>(取消选中)启用后台刷新

【讨论】:

以上是关于使用 SSIS 脚本任务刷新 Excel的主要内容,如果未能解决你的问题,请参考以下文章

使用 ssis 脚本任务将查询结果附加为电子邮件中的 excel,而不存储 excel

查询值和目标字段的数量不同 - C# 脚本任务 SSIS - 使用动态列将 SQL Proc 的结果导出到 Excel

从 SQL 代理运行时 SSIS 脚本任务失败

SSIS 脚本任务 C# 编码以动态选择具有特定名称的最新 Excel 文件的第一张表

在 SSIS 的脚本任务中使用变量

脚本任务从 Excel 批量复制到 Sql Server 2008。标题后缺少第一行