【问题标题】:Powershell Excel Automation Copy-Paste - ImportExcel ModulePowershell Excel 自动化复制粘贴 - ImportExcel 模块
【发布时间】:2021-03-30 08:03:09
【问题描述】:

我开发了一个脚本,它从 SQL 服务器获取数据,并以这种方式使用 ImportExcel 模块将其放入 Excel 工作表中:

 # *** Data Retrieve ***
    $dt1 = SQLCommand -File_Path $QueryReplacedFullPath -Server "Server1" -Name "Database1" -User "user1" -Password $pass -Out
    $dt_table1 = $dt1.Tables[0]

    # *** Excel Preparation ***
    if ($dt_table1.Rows.Count -eq 0)
    {
        $params = @{
            Path              = $DestinationExcelFilePath 
            WorksheetName     = $SheetName
            HideSheet         = $SheetName
        }
        Export-Excel @params  
    }
    else
    {
        $exportToExcel = ForEach ($Row in $dt1.Tables[0].Rows) 
        {
            $properties = @{}
            ForEach ($Col in $dt1.Tables[0].Columns.ColumnName) 
            {
                $properties[$Col] = $Row.$Col 
            }
            [PSCustomObject]$properties
        }

        $params = @{
            Path          = $DestinationExcelFilePath 
            WorksheetName = "1"
            TableName     = 'Table1'
            FreezeTopRow  = $true
            Calculate = $true
        }
        $exportToExcel | Export-Excel @params
    }

    #*** Excel Refresh ***
    $Excel = New-Object -ComObject Excel.Application
    $Excel.DisplayAlerts = $false
    $Excel.Visible = $False
    $Workbook = $Excel.Workbooks.Open($DestinationExcelFilePath,$null,$false)
    $Workbook.RefreshAll()
    $WorkSheet = $Workbook.worksheets | where-object {$_.Name -eq $MainSheetName}
    $WorkSheet.Activate()

    [void]$Workbook.Save()
    [void]$Workbook.Close()
    [void]$Excel.Quit()
    [System.Runtime.Interopservices.Marshal]::ReleaseComObject($Excel) | Out-Null
    kill -processname excel

我正在尝试使用 Powershell 在 Excel 中做一些报告。

现在,我有一个 Excel 模板,其中包含一些带有我客户徽标的自定义图表和一个名为“Main”的工作表中的一些自定义数据透视表。 “主要”工作表中的数据透视表和图表由工作表中名为“1”的表格中的数据提供,之前用我的脚本填充。

但是,尝试 RefreshAll() 工作簿时执行失败。据我所知,我的脚本“创建”了一个新工作表“1”,而不是在我的模板中填充现有工作表,这导致图表进入“混乱”状态,因为它试图更新数据。当我打开 Excel 文件时,我看到 Excel 询问我是否要刷新 char 数据,因为数据已更改,如果我单击“是”,我看到所有更新。

我想知道如何避免这种情况,我想在不为我的工作簿中的每个图表按“是”的情况下生成报告,有没有办法使用这个模块来做到这一点?或者可能是一个脚本来打开工作簿并为出现的每个弹出窗口自动单击“是”。

【问题讨论】:

    标签: excel powershell script


    【解决方案1】:

    如果将 Excel 导出到同一个文件会怎样?

    $exportToExcel | Export-Excel
    

    这里的使用方式需要在机器上安装Excel。

    $Excel = New-Object -ComObject Excel.Application
    

    我无法复制它,所以如果你能分享一些示例文件会很棒。

    对我来说,下面的部分只是更新了 Sheet1 和数据透视表上的数据,以及从中提取的图表 - 不需要额外的工作。

    $data1 | Export-Excel @params
    $data2 | Export-Excel @params
    

    【讨论】:

    • 我可以和你分享我正在做的截图\文件,你有私人邮箱吗?我在 StackOverflow 中找不到聊天。
    • 但是,这里我只使用 Excel COM 对象打开文件,然后刷新所有工作簿,这就是问题所在,我无法刷新它,因为它有图表需要在打开 Excel 时出现的对话框中按“确定”刷新。
    • 当您使用新数据导出 Excel 时会发生什么?它是否仍然需要刷新或图表正在从工作表 1 中获取新数据?您可以通过 MikeyBronowski (a-t) gmail 给我发电子邮件
    猜你喜欢
    • 2016-02-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多