我们最近更改了我们的 SQL 数据库服务器,我想知道是否有更新所有 Excel 文件连接字符串的脚本或更简单的方法?
如果他们使用连接文件会容易得多,但不幸的是,它们都是手动设置的,我们有大约 600 个报告......
任何帮助深表感谢。
谢谢
缺口
我们最近更改了我们的 SQL 数据库服务器,我想知道是否有更新所有 Excel 文件连接字符串的脚本或更简单的方法?
如果他们使用连接文件会容易得多,但不幸的是,它们都是手动设置的,我们有大约 600 个报告......
任何帮助深表感谢。
谢谢
缺口
是的,您可以...您在 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
基于 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
以下 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