Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Powershell->;在Excel中查找/替换->;在一个单元格中查找字符串并在另一个单元格中更改该字符串_Excel_Powershell_Search_Replace - Fatal编程技术网

Powershell->;在Excel中查找/替换->;在一个单元格中查找字符串并在另一个单元格中更改该字符串

Powershell->;在Excel中查找/替换->;在一个单元格中查找字符串并在另一个单元格中更改该字符串,excel,powershell,search,replace,Excel,Powershell,Search,Replace,我想在列中搜索字符串。如果找到该字符串,我希望脚本替换另一个单元格中的字符串-同一行,不同列。所以我的专栏是这样的 我想在“单位类型”列中搜索“小时”或“小时”,当它找到它时,我想将同一行中的“职务ID”更改为3289。这是我到目前为止得到的结果,似乎什么也没发生。任何帮助都将不胜感激。谢谢 $excelFile = "C:\do\BEFORE.xls" $objExcel = New-Object -ComObject Excel.Application $WorkBoo

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

我想在“单位类型”列中搜索“小时”或“小时”,当它找到它时,我想将同一行中的“职务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()

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()

非常感谢你!非常感谢你!