9

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

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

任何帮助深表感谢。

谢谢

缺口

4

4 回答 4

3

我想做同样的事情,并遇到了这个XLODCTool这里调用的工具。

文件链接在这里

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

DSNSERVERASERVERB

于 2017-06-28T13:12:16.767 回答
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
于 2012-12-11T10:21:58.190 回答
0

基于 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
于 2017-10-17T12:54:11.603 回答
0

以下 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
于 2022-03-02T06:44:28.447 回答