有没有一种方法可以仅将Excel工作表列中的唯一行复制到另一个工作表?

时间:2019-01-09 20:55:36

标签: windows powershell

我将CSV文件用作$ AgencyMaster,其中包含两列,即AgencyID和AgencyName。目前,我是从另一个文件$ Excel_File_Path手动输入这些,但是如果可能的话,我想自动生成$ AgencyMaster。

$ Excel_File_Path具有三个工作表:Sheet1,Sheet2和模板。 Sheet1和Sheet2充满了数据,而Template则用作基于AgencyID填充的所述数据的图形表示。我有一个脚本,可打开$ Excel_File_Path,将AgencyID输入到特定的单元格中,保存它,然后将其转换为PDF。它会为$ AgencyMaster中的每个AgencyID(目前超过200个)执行此操作。

在$ Excel_File_Path中,Sheet1和Sheet2中的B和C列包含所有的AgencyID和AgencyName,但是有一堆重复项。我无法删除任何行,因为尽管它们在B和C列中是重复的,但D,E,F等列在Template中使用了不同的数据。因此,我需要能够获取可能出现在Sheet1或Sheet2中的每个唯一的AgencyID和AgencyName,并将它们导出到CSV以用作$ AgencyMaster。

示例:

https://i.imgur.com/j8UIZqp.jpg

B列包含AgencyID,C列包含AgencyName。我想将Sheet1和Sheet2各自的唯一值导出到CSV $ AgencyMaster 我发现了如何将其导出到同一工作簿中的另一个工作表,而不是一起导出到单独的工作簿。我还想将其另存为A单元格中前导0的.CSV。

# Checking that $AgencyMaster Exists, and importing the data if it does
    If (Test-Path $AgencyMaster) {
        $AgencyData = Import-CSV -Path $AgencyMaster 

        # Taking data from $AgencyMaster and assigning it to each variable
        ForEach ($Agency in $AgencyData) { 

            $AgencyID = $Agency.AgencyID
            $AgencyName = $Agency.AgencyName 


            # Insert agency code into cell D9 on Template worksheet
            $ExcelWS.Cells.Item(9,4) = $AgencyID
            $ExcelWB.Save()

            # Copy-Item Properties
            $Destination_File_Path = "$Xlsx_Destination\$AgencyID - 
$AgencyName - $company $month $year.xlsx"

            $CI_Props = @{

                'Path' = $Excel_File_Path;
                'Destination' = $Destination_File_Path;
                'PassThru' = $true;

            } # Close $CI_Props
            # Copy & Rename file
            Copy-Item @CI_Props

        } # Close ForEach

    } # Close IF

1 个答案:

答案 0 :(得分:0)

I would recommend using either Sort-Object -Unique or Group-Object.