2017-02-27 158 views
1

我目前有一個PS腳本,用於刷新具有1個數據連接的Excel文件,並且完美地工作。問題是我已經構建了其他具有3個數據連接的Excel文件。當我嘗試對具有3個數據連接字符串的文件使用下面的代碼時,數據得到處理,但只有一個數據連接得到更新。任何人都可以告訴我,我需要做什麼來獲取所有數據連接更新?我試着重複「全部刷新」/「保存」部分代碼,但那給了我錯誤信息。任何幫助,將不勝感激。使用PowerShell在Excel中更新多個連接字符串

$excel = new-object -comobject excel.application 
$excel.DisplayAlerts = $false 
$excelFiles = Get-ChildItem -Path "File Folder Location (ex. C:\Documents)" -Include *.xls, *.xlsm,*.xlsx, *.lnk -Recurse 
Foreach($file in $excelFiles) 
{ 
$workbook = $excel.workbooks.open($file.fullname) 
$worksheet = $workbook.worksheets.item(1) 
$workBook.RefreshAll() 
$workbook.save() 
$workbook.close() 
} 
$excel.quit() 

回答

0

根據您的連接,一個方法可以幫助你(未經測試)

$excel = new-object -comobject excel.application 
$excel.DisplayAlerts = $false 
$excelFiles = Get-ChildItem -Path "$($env:userprofile)\Documents)" -Include *.xls, *.xlsm,*.xlsx, *.lnk -Recurse 
Foreach($file in $excelFiles) { 
    $workbook = $excel.workbooks.open($file.fullname) 
    # ---- this method ---- 
    foreach ($Conn in $workbook.Connections){ 
     $Conn.OLEDBConnection.BackgroundQuery = $false 
     $Conn.refresh()  
    } 
    # ---- and/or this method ---- 
    foreach ($Sheet in $workbook.Worksheets) { 
     foreach ($QTable in $Sheet.QueryTables) { 
      $QTable.BackgroundQuery = $false 
     } 
    } 
    # ----- might get you further, depneding on your connections ---- 
    $workBook.RefreshAll() 
    $workbook.save() 
    $workbook.close() 
} 
$excel.quit() 
+0

當前不能測試,因爲我在等待另一個資源重過程結束。 –

+0

對不起......只是連接到不同的MS Access數據庫。 –

+0

第一種方法適合我!非常感謝您的幫助!對不起,以前沒有回覆,一直進出會議。 –