Powershell->;在Excel中查找/替换->;在一个单元格中查找字符串并在另一个单元格中更改该字符串
我想在列中搜索字符串。如果找到该字符串,我希望脚本替换另一个单元格中的字符串-同一行,不同列。所以我的专栏是这样的 我想在“单位类型”列中搜索“小时”或“小时”,当它找到它时,我想将同一行中的“职务ID”更改为3289。这是我到目前为止得到的结果,似乎什么也没发生。任何帮助都将不胜感激。谢谢Powershell->;在Excel中查找/替换->;在一个单元格中查找字符串并在另一个单元格中更改该字符串,excel,powershell,search,replace,Excel,Powershell,Search,Replace,我想在列中搜索字符串。如果找到该字符串,我希望脚本替换另一个单元格中的字符串-同一行,不同列。所以我的专栏是这样的 我想在“单位类型”列中搜索“小时”或“小时”,当它找到它时,我想将同一行中的“职务ID”更改为3289。这是我到目前为止得到的结果,似乎什么也没发生。任何帮助都将不胜感激。谢谢 $excelFile = "C:\do\BEFORE.xls" $objExcel = New-Object -ComObject Excel.Application $WorkBoo
$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()
Select Object
命令没有执行任何操作,因为您没有向它提供任何数据。尽管这并不重要,因为您处理的是excel com对象。您需要指定要检查的列,我发现使用for循环最简单。我们将从第2行开始,因为第一行是标题。根据您的示例,“单位类型”列为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()
Select Object
命令没有执行任何操作,因为您没有向它提供任何数据。尽管这并不重要,因为您处理的是excel com对象。您需要指定要检查的列,我发现使用for循环最简单。我们将从第2行开始,因为第一行是标题。根据您的示例,“单位类型”列为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()
非常感谢你!非常感谢你!