批量更新 Excel 文件连接字符串

Posted

技术标签:

【中文标题】批量更新 Excel 文件连接字符串【英文标题】:Mass update Excel file connection string 【发布时间】:2012-07-31 01:46:59 【问题描述】:

我们最近更改了 SQL 数据库服务器,我想知道是否有脚本或更简单的方法来更新所有 Excel 文件连接字符串?

如果他们使用连接文件会容易得多,但不幸的是它们都是手动设置的,我们有大约 600 个报告...

非常感谢任何帮助。

谢谢

尼克

【问题讨论】:

您可以使用Workbook.Connections 集合循环遍历工作簿中的所有连接 【参考方案1】:

我想做同样的事情,并从here 遇到了这个名为XLODCTool 的工具。

文件链接here。

您可以批量更改连接字符串中的值,例如

DSNSERVERASERVERB

【讨论】:

这是给出的最佳答案,因为它不涉及任何自定义 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 连接字符串

如何更改 Excel 连接以停止只读错误

如何使用 VBA 更新 Excel 工作簿 Web 查询连接字符串?

使用 2007 office 连接字符串读取 Excel 文件

如何避免更改 SSAS 角色的 Excel 连接字符串

用于读取由其他用户独占打开的 Excel 文件的 OleDB 连接字符串