【问题标题】:Import .odc file into Excel via PowerShell通过 PowerShell 将 .odc 文件导入 Excel
【发布时间】:2020-07-24 21:06:03
【问题描述】:

我在 Excel 中创建了一个 PowerQuery,它从 API 获取数据,对其进行修改,然后将其呈现在表格中。我已将 PowerQuery 导出到名为 Query - Singles - Template.odc.odc 文件。

我还有一个 PowerShell 脚本,它可以在需要时动态创建 excel,以及采用 .odc 模板、替换 API URL 并为每个创建的 excel 创建一个新的 .odc

我尝试主要将.odc 导入到创建的excel 中,它按预期工作。但是我找不到通过 PowerShell 脚本将这些 .odc 文件导入 excel 的方法。

PowerShell 脚本:

$Excel = New-Object -ComObject excel.application
$Excel.DisplayAlerts = $False
$Excel.visible = $False
$WorkBook = $Excel.Workbooks.Add()
$WorkSheet = $WorkBook.worksheets.item(1)
$WorkSheet.name = "data"

((Get-Content -path "$Path\Query - Singles - Template.odc" -Raw) -replace "TempSetCode",$Set) | Set-Content -Path  "$Path\$Set\Query - Singles - $Set.odc"

### Code to import .odc file into excel

$WorkBook.SaveAs("$SetPath\$Set-main-$ReleaseDate.xlsx", 51) 
$WorkBook.Close($True)

$Excel.Quit()
[void][System.Runtime.Interopservices.Marshal]::ReleaseComObject($WorkSheet)
[void][System.Runtime.Interopservices.Marshal]::ReleaseComObject($WorkBook)
[void][System.Runtime.Interopservices.Marshal]::ReleaseComObject($Excel)
[System.GC]::Collect()
[System.GC]::WaitForPendingFinalizers()

【问题讨论】:

    标签: excel powershell


    【解决方案1】:

    我解决了这个问题,不是通过将.odc 文件导入到 excel 中,而是通过将.odc 文件打开到 excel 中然后保存该文件。

    $InFile = Get-Item("$Path\$Set\Query - Singles - $Set.odc")
    
    $Excel = New-Object -ComObject excel.application
    $Excel.DisplayAlerts = $False
    $Excel.visible = $False
    $WorkBook = $Excel.Workbooks.Open($InFile.FullName)
    $WorkSheet = $WorkBook.worksheets.item(1)
    $WorkSheet.name = "data"
    
    $WorkBook.RefreshAll()
    
    $WorkBook.SaveAs("$SetPath\$Set-main-$ReleaseDate.xlsx", 51) 
    $WorkBook.Close($True)
    
    $Excel.Quit()
    [void][System.Runtime.Interopservices.Marshal]::ReleaseComObject($WorkSheet)
    [void][System.Runtime.Interopservices.Marshal]::ReleaseComObject($WorkBook)
    [void][System.Runtime.Interopservices.Marshal]::ReleaseComObject($Excel)
    [System.GC]::Collect()
    [System.GC]::WaitForPendingFinalizers()
    

    【讨论】:

      猜你喜欢
      • 2023-04-05
      • 1970-01-01
      • 2022-01-24
      • 2015-11-25
      • 2015-03-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多