【问题标题】:Trigger function in Excel when external CSV file is updated or batch file is finished当外部 CSV 文件更新或批处理文件完成时,Excel 中的触发功能
【发布时间】:2019-10-28 19:28:21
【问题描述】:

我有一个 Excel 工作簿,它使用启动批处理文件的热键,该批处理文件启动节点脚本,更新 CSV 文件。技术细节如下。

工作簿使用 CSV 文件作为数据源。我可以通过转到Data > Refresh All > Refresh All 使用 CSV 文件中的数据手动更新工作簿。

一旦 CSV 文件中有新数据或批处理文件完成时,是否有任何方法可以触发工作簿中的更新?从概念上讲,我问的是外部事件如何触发 Excel 中的某些内容。

以下是该过程的详细信息:

当在 Excel 工作簿中按下热键时,它会启动 MS 控制台(“cmd.exe”)并传递要运行的批处理文件的位置和所选单元格的值。批处理文件以这种方式运行的原因可能与这个问题无关,但我知道它会被问到,所以我将解释:批处理文件与工作簿位于同一目录中,而不是硬编码的位置。问题是直接启动批处理文件/cmd.exe 将默认为 C:\users\name\documents 的工作目录。因此,要在与工作簿相同的目录中启动批处理文件,将工作簿的路径传递给 cmd.exe,如下所示:CD [path] 然后与另一个命令串联以启动批处理文件,其值为选择单元格作为参数,如下所示:CD [path] & batch.bat cellValue
还和我在一起吗?

然后批处理文件启动一个节点脚本,再次使用选定的单元格值作为参数。

Node 脚本从 Web 中提取数据并将其转储到 CSV 文件中。

此时,工作簿仍有过期数据,需要刷新。这怎么可能是自动的?

我可以在启动批处理文件后在 VBA 中启动一个静态计时器,然后运行ActiveWorkbook.RefreshAll,但是如果批处理文件花费的时间太长,就会出现问题。

【问题讨论】:

  • 您是否尝试为此活动创建宏?
  • @DavidGarcíaBodego - 我在问如何让外部事件在 Excel 中触发某些东西。一旦我弄清楚它是否可能,我就会创造一些东西。
  • 忘记反对票 :-) 关于你的问题......我不明白为什么要使用批处理来介绍 Excel 数据表上的信息,而你可以通过宏来做到这一点。如果您可以提供更多详细信息作为输入样本和预期输出样本,我将为您提供帮助。
  • @DavidGarcíaBodego - 我已经更新了这个问题,希望这能让它更容易理解。
  • 所以只需创建一个开始调用批处理文件的 VBA 宏,这样当它结束时,它会再次获得控制权。

标签: excel vba windows batch-file command-line


【解决方案1】:

我找到了一个解决方案,尽管它可能不是最有效的方法。

现在,在 Excel 启动批处理文件后,我将其设置为循环并通过 FileDateTime("filename.csv") 反复检查 CSV 文件的修改日期

起初,这个循环是个问题,因为我担心 Excel 会过度检查 CSV 的修改日期。我认为它可能会导致资源问题,而它每秒检查数百或数千次。我可以使用睡眠或等待功能添加 1 秒的延迟,但这些会导致 Excel 挂起。在更新 CSV 文件之前,它将被冻结,如果有的话。用户必须在紧急情况下使用 CTRL+BREAK。

我能够使用一种解决方案,它只循环并执行DoEvents,同时检查直到经过一定时间。这样,Excel 在等待期间仍然可以正常工作。更多信息在这里:https://www.myonlinetraininghub.com/pausing-or-delaying-vba-using-wait-sleep-or-a-loop

【讨论】:

    猜你喜欢
    • 2017-01-15
    • 2014-08-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多