【问题标题】:Copy to Clipboard Powershell Glitch复制到剪贴板 Powershell 故障
【发布时间】:2021-06-13 20:18:15
【问题描述】:

我使用 Powershell 创建并编写脚本,将数据表的结果复制到剪贴板中,以便将其粘贴到 Excel 中:

        $excelArray = New-Object 'object[,]' $dt_table1.Rows.Count, $dt_table1.Columns.Count
        $excelArray = ForEach($Row in $dt1.Tables[0].Rows)
                        {
                            $Record = New-Object PSObject
                            ForEach($Col in $dt1.Tables[0].Columns.ColumnName)
                            {
                                Add-Member -InputObject $Record -NotePropertyName $Col -NotePropertyValue $Row.$Col
                            }
                            $Record
                        }
        $excelArray | ConvertTo-CSV -NoType -Del "`t" | Select -Skip 1 | Clip
        [void]$WorkSheet.columns.Item(1).cells.Item(2).PasteSpecial()
        $WorkSheet.Visible = $false

当我使用“Powershell ISE”执行脚本时,该脚本运行良好,但当我使用“Windows 任务计划程序”中的 CMD 批处理计划此脚本时,问题就出现了。当管理员用户连接到 RDP 并通过调度程序执行此批处理时,它不会将结果复制到 excel 工作表中,它会复制我在剪贴板中的最后一件事。

当执行批处理并关闭 RDP 会话时,批处理失败而没有给我一个错误.....这是怎么回事?也许还有另一种方法可以将数据表或数据集的结果复制到 xcel 工作表中以避免剪贴板?

谢谢!

【问题讨论】:

    标签: excel powershell dataset scheduled-tasks


    【解决方案1】:

    处理 Excel 文件的更好方法是使用模块 ImportExcel。它使用 EPPLUS 库,因此您不必使用任何 COM 对象、在服务器上安装 Excel 或使用剪贴板。

    将数据导出到 Excel 文件的一种方法是使用 Export-Excel

    首先,您需要从 PowerShell 库安装模块:

    Install-Module ImportExcel
    

    然后你可以在你的脚本中使用它:

    # myScript.ps1
    #Requires -Module ImportExcel
    
    Param (
        $Path = 'C:\path\to\the.xlsx'
    )
    
    $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          = $Path 
        WorksheetName = 'Data' 
        TableName     = 'Data'
        FreezeTopRow  = $true
        # HideSheet     = 'Data' 
    }
    $exportToExcel | Export-Excel @params
    

    一些帮助您入门的有用命令:

    Get-Help Export-Excel # displays what a function, its parameters, ..
    Get-Help Export-Excel -Examples # displays how to use the function
    Get-Command -Module ImportExcel # list all available functions in a module
    

    【讨论】:

    • 你知道我在哪里可以获得关于如何使用这个模块的文档吗?我需要删除一系列行,因为我想在工作表中粘贴的数据应该进入一个表格,在粘贴之前我想从表格中删除所有行而不删除标题。我这样做是因为我在另一张表中有一个数据透视表,可以读取该表以显示数据。
    • and... 我在 Excel 文件中有很多工作表,这些工作表和以前一样,它们有 Excel 表格,供另一个 Excel 表格中的数据透视表使用,所以我需要填写所有在这些工作表中,更新并保存主工作表中更新的 Excel 文件,以便通过 mial 发送给我的客户。
    • 文档的链接在我的回答中。当您使用-ClearSheet 时,它将首先删除工作表中的所有数据,然后再次添加标题行及其下方的数据行。您可以在-TableName 中为表使用正确的名称,并且您的数据透视表应该仍然有效。感谢您将此标记为已解决,或者如果您需要其他帮助,请提出新问题。您也可以在 ImportExcel 的 GitHub 上提出问题。
    • 谢谢!但是,当我打开生成的最终 Excel 文件时,数据透视表会问我“有数据,你想刷新吗?”应该自动刷新,我标记“打开文件时自动刷新枢轴”但不起作用。
    • 您不应依赖工作表中已有的数据。在这种情况下,只需在新工作表上创建一个新的数据透视表:github.com/dfinke/ImportExcel/tree/master/Examples/PivotTable
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-08-27
    • 2015-08-31
    • 1970-01-01
    • 1970-01-01
    • 2022-11-24
    • 2013-04-07
    • 2010-11-07
    相关资源
    最近更新 更多