批量更新 Excel 文件连接字符串
Posted
技术标签:
【中文标题】批量更新 Excel 文件连接字符串【英文标题】:Mass update Excel file connection string 【发布时间】:2012-07-31 01:46:59 【问题描述】:我们最近更改了 SQL 数据库服务器,我想知道是否有脚本或更简单的方法来更新所有 Excel 文件连接字符串?
如果他们使用连接文件会容易得多,但不幸的是它们都是手动设置的,我们有大约 600 个报告...
非常感谢任何帮助。
谢谢
尼克
【问题讨论】:
您可以使用Workbook.Connections
集合循环遍历工作簿中的所有连接
【参考方案1】:
我想做同样的事情,并从here 遇到了这个名为XLODCTool
的工具。
文件链接here。
您可以批量更改连接字符串中的值,例如
DSN
从SERVERA
到SERVERB
【讨论】:
这是给出的最佳答案,因为它不涉及任何自定义 vba 代码,并且可以从独立实用程序轻松快速地执行!【参考方案2】:是的,你可以...你用 c# 或 vb.net 编写一个程序,循环遍历所有 600 个文档并打开文档并使用
oModule = oBook.VBProject.VBComponents.Add(VBIDE.vbext_ComponentType.vbext_ct_StdModule)
oModule.CodeModule.AddFromString(sCode)
根据您在 sCode 变量中的设置,您有一个循环通过 Excel.Connections 或
的宏 For Each wks In ActiveWorkbook.Worksheets
For Each qt In wks.QueryTables
With qt
.Connection ="myconnstring"
End With
Next qt
Next wks
【讨论】:
【参考方案3】:基于 Archlight 解决方案,宏如下:
Sub UpdateConnectionsString_Click()
For Each wks In ActiveWorkbook.Worksheets
For Each qt In wks.QueryTables
With qt
'Debug.Print .Connection
.Connection = Replace(.Connection, "bla.com", "localhost")
End With
Next qt
Next wks
End Sub
【讨论】:
【参考方案4】:以下 PowerShell 脚本循环遍历当前目录中的所有 xlsx 文件。 提取它们,然后在连接字符串文件中进行查找和替换。 将文件重新添加到具有相同名称的新存档(xlsx 文件)中。以'_new'为后缀
将粘贴复制到 *.ps1 文件中并运行。
echo `nStarting....`n
$Zips = Get-ChildItem -filter "*.xlsx" -Recurse
$Destination = 'Extracted/'
$WinRar = "C:\Program Files (x86)\WinRAR\winrar.exe"
foreach ($zip in $Zips)
$des = $Destination + $zip.BaseName + "/"
&$Winrar x -Y -ibck $zip.FullName $des
Get-Process winrar | Wait-Process
$configFiles = Get-ChildItem Extracted\*\xl\connections.xml -recurse
$configFiles | Set-ItemProperty -Name IsReadOnly -Value $false
foreach ($file in $configFiles)
(Get-Content $file.PSPath) |
Foreach-Object $_ -replace "SERVER=123456;", "SERVER=7891011;" |
Set-Content $file.PSPath
$configFiles = Get-ChildItem Extracted | ? $_.PSIsContainer
foreach ($file in $configFiles)
$FileDestination = './' + $file.Name + '_new.xlsx'
$files = 'Extracted/' + $file.Name + '/*.*'
&$Winrar a -r -afzip -ep1 $FileDestination $files
echo `nDone!`n
【讨论】:
以上是关于批量更新 Excel 文件连接字符串的主要内容,如果未能解决你的问题,请参考以下文章
在 C# 中更改 Excel Power Query 连接字符串
如何使用 VBA 更新 Excel 工作簿 Web 查询连接字符串?