我想在列中搜索一个字符串。如果找到该字符串,我希望脚本替换另一个单元格中的字符串-同一行,不同列。所以我的专栏是这样的...
我想在“单元类型”列中搜索“小时”或“小时”,找到后,我想将同一行中的“作业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()
答案 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()