如何从Excel列取值批量生成PHREEQC输入文件(基于模板)
批量生成PHREEQC输入文件的最简方法(Windows 10)
针对你有10000个氧浓度值、需要基于模板批量生成输入文件的需求,推荐两种无需额外安装软件的简单方法,适合编程经验有限的用户:
方法一:Excel VBA宏(直接用现有Excel操作)
这是最贴合你现有工作流的方法,全程在Excel内完成:
预处理步骤
- 把你的PHREEQC模板文件另存为纯文本格式(命名为
template.txt),找到模板中需要替换的氧浓度数值,将其替换为一个固定占位符,比如[O2_CONCENTRATION](确保这个占位符不会和模板里的其他内容重复)。 - 确保Excel里的氧浓度数据在单独一列(比如A列,从A1到A10000),然后把Excel文件保存为启用宏的工作簿(.xlsm格式)。
- 把你的PHREEQC模板文件另存为纯文本格式(命名为
编写并运行宏
- 按
Alt+F11打开VBA编辑器,点击菜单栏的「插入」→「模块」,粘贴以下代码:
Sub GeneratePHREEQCInputs() ' 请修改下面两个路径为你的实际路径 Dim templatePath As String: templatePath = "C:\你的文件夹路径\template.txt" Dim outputFolder As String: outputFolder = "C:\你的输出文件夹路径\" ' 创建输出文件夹(如果不存在) If Dir(outputFolder, vbDirectory) = "" Then MkDir outputFolder ' 读取模板内容 Open templatePath For Input As #1 Dim templateContent As String: templateContent = Input$(LOF(1), #1) Close #1 ' 获取氧浓度数据的最后一行 Dim lastRow As Long: lastRow = Cells(Rows.Count, "A").End(xlUp).Row ' 循环生成每个输入文件 Dim i As Long For i = 1 To lastRow Dim o2Value As String: o2Value = Cells(i, "A").Value ' 替换占位符 Dim fileContent As String: fileContent = Replace(templateContent, "[O2_CONCENTRATION]", o2Value) ' 生成文件名(可根据需求修改命名规则) Dim fileName As String: fileName = outputFolder & "input_" & i & ".txt" ' 写入文件 Open fileName For Output As #2 Print #2, fileContent Close #2 Next i MsgBox "文件批量生成完成!" End Sub- 修改代码里的
templatePath和outputFolder为你的实际文件路径。 - 回到Excel界面,按
Alt+F8,选择GeneratePHREEQCInputs并点击「运行」,等待完成即可。
- 按
方法二:Windows PowerShell(系统自带工具)
如果你不想用Excel宏,PowerShell是Windows自带的脚本工具,操作也很简单:
预处理步骤
- 同样把模板存为
template.txt,替换氧浓度为[O2_CONCENTRATION]。 - 把Excel里的氧浓度列导出为纯文本文件(命名为
o2_values.txt,确保每行一个数值)。
- 同样把模板存为
编写并运行脚本
- 新建一个文本文件,重命名为
generate_files.ps1,粘贴以下代码:
# 请修改下面三个路径为你的实际路径 $templatePath = "C:\你的文件夹路径\template.txt" $outputFolder = "C:\你的输出文件夹路径\" $o2ValuesPath = "C:\你的文件夹路径\o2_values.txt" # 创建输出文件夹(如果不存在) if (-not (Test-Path $outputFolder)) { New-Item -ItemType Directory -Path $outputFolder | Out-Null } # 读取模板内容 $templateContent = Get-Content $templatePath -Raw # 读取氧浓度值并批量生成文件 $o2Values = Get-Content $o2ValuesPath for ($i=0; $i -lt $o2Values.Count; $i++) { $o2Value = $o2Values[$i].Trim() $fileContent = $templateContent -replace "\[O2_CONCENTRATION\]", $o2Value $fileName = Join-Path $outputFolder "input_$($i+1).txt" Set-Content -Path $fileName -Value $fileContent -Encoding UTF8 } Write-Host "所有文件生成完成!"- 修改代码里的三个路径为实际路径。
- 右键点击
generate_files.ps1,选择「用PowerShell运行」。如果遇到执行权限提示,先以管理员身份打开PowerShell,运行Set-ExecutionPolicy RemoteSigned并按Y确认,再重新运行脚本。
- 新建一个文本文件,重命名为
注意事项
- 模板文件必须是纯文本格式(.txt),不要用Word或Excel格式,避免出现乱码或格式错误。
- 文件名可以根据你的需求修改,比如如果有对应的毫秒时间戳,只需调整代码里的
fileName部分即可。 - 生成10000个文件需要几分钟时间,运行过程中不要中断程序。
内容的提问来源于stack exchange,提问作者Jess Cook
相关产品推荐
相关产品推荐

