Powershell->在Excel中查找/替换->在一个单元格中查找字符串,然后在另一个单元格中更改字符串

时间:2020-10-28 23:58:29

标签: excel powershell search replace

我想在列中搜索一个字符串。如果找到该字符串,我希望脚本替换另一个单元格中的字符串-同一行,不同列。所以我的专栏是这样的...

screenshot

我想在“单元类型”列中搜索“小时”或“小时”,找到后,我想将同一行中的“作业ID”更改为3289。这就是我到目前为止所得到的似乎什么也没发生。任何帮助将不胜感激。谢谢!

$excelFile = "C:\do\BEFORE.xls"
$objExcel = New-Object -ComObject Excel.Application
$WorkBook = $objExcel.Workbooks.Open($excelFile)
$worksheet = $WorkBook.sheets.item("Sheet1")
$rowCount = $worksheet.usedrange.rows.count

Select-Object "Acct", "Customer_Name", "Invoice","Inv_Date","Cost_ID","Job_ID","Description","Hours", "Quantity", "Price", "Unit_Type", "Amount"

foreach ($row in $excelFile) {
    if ($row.Unit_Type -eq "Hours") {
        $row.Job_ID = "3289"
    }
}

$WorkBook.Save()
$WorkBook.Close()

1 个答案:

答案 0 :(得分:0)

Select-Object命令没有执行任何操作,因为您没有向其提供任何数据。尽管那无关紧要,因为您正在处理excel com对象。您需要指定要检查的列,而我发现使用for循环最简单。因为第一行是标题,所以我们将从第二行开始。根据您的示例,“单位类型”列为6,“作业ID”列为1。您还希望检查小时或小时,因此正则表达式匹配将是一种合适的方法。

$excelFile = "C:\do\BEFORE.xls"
$objExcel = New-Object -ComObject Excel.Application
$WorkBook = $objExcel.Workbooks.Open($excelFile)
$worksheet = $WorkBook.sheets.item("Sheet1")
$rowCount = $worksheet.usedrange.rows.count

$unittypecolumn = 6
$jobidcolumn = 1

for($i = 2; $i -le $rowCount; $i++)
{
    if($worksheet.Cells($i,$unittypecolumn).Value2 -match "hours|hrs")
    {
        $worksheet.Cells($i,$jobidcolumn).Value2 = "3289"
    }
}

$WorkBook.Save()
$WorkBook.Close()
相关问题