如何将 Batch 中的值传递给 Excel VBA 宏?
How can I pass a value from Batch to an Excel VBA macro?
我有一个生成 CSV 文件的 C# 程序,然后在 Excel 中打开一个 XLSM 文件(使用 ProcessStartInfo
和 Process.Start
)。 XLSM 中的宏加载 CSV 文件并将其中的数据分发到特定单元格。最终这将是 C# 生成一个没有宏的电子表格,可以在任何办公套件中加载,CSV 将消失。
我的问题是该系统现在需要支持从磁盘上的任何位置运行 XLSM。它通过硬编码的相对路径找到 CSV,这在用户指定的位置不起作用。我想做一些类似于传递编译器参数来定义常量的事情。
编辑 1:
我考虑过但拒绝的替代方法:
将 XLSM 复制到 CSV 附近的标准位置并从那里运行它。
我需要将文件复制回其原始位置,但我不知道 Excel 何时关闭才能执行此操作...除了可能在 Excel 中,但它不会不知道原来的位置,所以才有这个问题。
在用户指定的 XLSM 位置旁边创建 CSV 文件。
CSV 文件的位置在 NLOG 配置文件中指定,将周围的实现更改为使用硬编码路径的代价很高。这是我唯一可行的想法,但会造成伤害。
创建基于 Windows 的硬盘 link 从标准位置到自定义位置。
我不能假设我在 NTFS 文件系统上运行。
将您的 CSV 生成程序移植到用户机器上,您可以:
- 在用户机器上设置一个环境变量到目标目录;例如(命令行)
SET CSVPATH=C:\My\CSV
- 让 CSV 处理 XLSM 中的宏使用
Environ()
函数读取此环境变量;例如(VBA)MyPath = Environ("CSVPATH") & "\"
或者,您可以
- 使用 "installation XLSM" 中的目录选择对话框,使用
SaveSetting
语句 将正确的文件路径写入目标机器的注册表
- 让 CSV 处理 XLSM 中的宏使用
GetSetting()
函数读取注册表以获得正确的路径
我有一个生成 CSV 文件的 C# 程序,然后在 Excel 中打开一个 XLSM 文件(使用 ProcessStartInfo
和 Process.Start
)。 XLSM 中的宏加载 CSV 文件并将其中的数据分发到特定单元格。最终这将是 C# 生成一个没有宏的电子表格,可以在任何办公套件中加载,CSV 将消失。
我的问题是该系统现在需要支持从磁盘上的任何位置运行 XLSM。它通过硬编码的相对路径找到 CSV,这在用户指定的位置不起作用。我想做一些类似于传递编译器参数来定义常量的事情。
编辑 1:
我考虑过但拒绝的替代方法:
将 XLSM 复制到 CSV 附近的标准位置并从那里运行它。
我需要将文件复制回其原始位置,但我不知道 Excel 何时关闭才能执行此操作...除了可能在 Excel 中,但它不会不知道原来的位置,所以才有这个问题。
在用户指定的 XLSM 位置旁边创建 CSV 文件。
CSV 文件的位置在 NLOG 配置文件中指定,将周围的实现更改为使用硬编码路径的代价很高。这是我唯一可行的想法,但会造成伤害。
创建基于 Windows 的硬盘 link 从标准位置到自定义位置。
我不能假设我在 NTFS 文件系统上运行。
将您的 CSV 生成程序移植到用户机器上,您可以:
- 在用户机器上设置一个环境变量到目标目录;例如(命令行)
SET CSVPATH=C:\My\CSV
- 让 CSV 处理 XLSM 中的宏使用
Environ()
函数读取此环境变量;例如(VBA)MyPath = Environ("CSVPATH") & "\"
或者,您可以
- 使用 "installation XLSM" 中的目录选择对话框,使用
SaveSetting
语句 将正确的文件路径写入目标机器的注册表
- 让 CSV 处理 XLSM 中的宏使用
GetSetting()
函数读取注册表以获得正确的路径