代码之家  ›  专栏  ›  技术社区  ›  Paul Williams

未从Excel工作表中清除现有数据单元格

  •  1
  • Paul Williams  · 技术社区  · 5 月前

    我在Excel中有一个数据表,我试图用它来处理数据。其中一个结果是,应清除一个单元格,并根据需要将其复制/粘贴(或剪切/粘贴)到另一个单元格中。

    下面是我用来操纵工作表的代码:

    在这种情况下,我试图将名为Target的列合并到Destination中

    $SomeSheet   = "C:\Some\Path\lorem.xlsx"
    $MasterDBSheetName  = "Database"
    $MasterDBSheet  = Import-Excel -Path $MasterDBPath -WorksheetName $MasterDBSheetName
    
    foreach ($dbRow in $MasterDBSheet) {
        $row_target = $dbRow.'Target"
        $row_destination = $dbRow.'Destination'
    
        $merge = $row_target + " " + $row_destination
    
        $dbRow.'Target' = $null
        $dbRow."Destination' = $merge
    }
    
    $MasterDBSheet | Export-Excel -Path $MasterDBPath -WorksheetName $MasterDBSheetName
    

    数据正在被合并到每一行的“目标”中,但尽管被设置为 $null "" ,原始数据 Target 即使它应该被清除,它仍然在同一列中。

    如果我使用,我已经设法清除了所有东西 —ClearWorksheet ,但我希望至少保留第一行的格式。

    1 回复  |  直到 5 月前
        1
  •  1
  •   Santiago Squarzon    5 月前

    假设你知道列索引是什么 Target 列,你可以试试 Set-ExcelColumn 设置 -Value null :

    $SomeSheet = 'C:\Some\Path\lorem.xlsx'
    $MasterDBSheetName = 'Database'
    $pkg = Open-ExcelPackage -Path $SomeSheet
    $content = Import-Excel -ExcelPackage $pkg -WorksheetName $MasterDBSheetName
    foreach ($dbRow in $content) {
        $dbRow.Destination = $dbRow.Target + ' ' + $dbRow.Destination
        $dbRow.Target = $null
    }
    
    # here you set the value of the desired column to null
    $setExcelColumnSplat = @{
        ExcelPackage  = $pkg
        WorksheetName = $MasterDBSheetName
        # assuming `Destination` is the first column
        Column        = 1
        # assuming the data starts on row 1
        StartRow      = 1
        Value         = $null
    }
    Set-ExcelColumn @setExcelColumnSplat
    # then export the updated worksheet
    $MasterDBSheet | Export-Excel -ExcelPackage $pkg -WorksheetName $MasterDBSheetName