我有一个函数,它接收到一个参数,这个参数包含了它应该处理的文件($archivo)。这个相同的值应该被传递给另一个函数,这个函数在同一个函数中被调用。但是由于某种原因,我在第二个函数中得到了一个空值。
function EXTRAER_DATA_COMIDA_Y_CREAR_WORD ($archivo) {
write-host "EXTRAER_DATA_COMIDA" -foreground green
$FILE = Join-Path -Path $root\UNB\FACTURA_FINAL\ -ChildPath $archivo
$result = switch -Regex -File $FILE {
'^([\d,.]+)\s+([\w\s]+)\s+([\d,.]+)' {
[PsCustomObject]@{
Quantity = $matches[1].Trim()
Product = $matches[2].Trim()
Price = $matches[3].Trim()
}
}
}
,$result
CREAR_DOCWORD($result,$archivo)
}
做这件事的正确方法是什么?
先谢了!
编辑:这是我能找到的新代码
$results =function EXTRAER_DATA_COMIDA_Y_CREAR_WORD($archivo)
{
write-host "EXTRAER_DATA_COMIDA" -fore green
$FILE = Join-Path -Path $root\UNB\FACTURA_FINAL\ -ChildPath $archivo
$result = switch -Regex -File $FILE {
'^([\d,.]+)\s+([\w\s]+)\s+([\d,.]+)' {
[PsCustomObject]@{
Quantity = $matches[1].Trim()
Product = $matches[2].Trim()
Price = $matches[3].Trim()
}
}
}
,@($result)
Write-Host "variables que entran a docword" $results $results.GetType() $archivo
CREAR_DOCWORD $results $archivo
}
FUNCTION CREAR_DOCWORD($COMIDA,$archivo) {
$objWord = New-Object -ComObject word.application
$objWord.Visible = $True
$Path = "$root\UNB\script\Tiquete_UnBilling.docx"
$objDoc = $objWord.Documents.Open("$Path")
$objSelection = $objWord.Selection
Write-Host "variables docword" $COMIDA $COMIDA.GetType() $archivo
## ESTA FUNCION CREA LA TABLA CON LOS DATOS DE COMIDA
Write-Host "TAMAÑO ARRAY" $COMIDA.Length
Write-Host "NOMBRE ARCHIVO" $archivo
$table = $objDoc.Tables(1)
for ($i=0; $i -le $comida.Count; $i++){
Write-Host "contador" $i
$table.rows.add() | out-null
$table.cell(($i+2),1).Range.Text = $comida[$i].Quantity
$table.cell(($i+2),2).Range.Text = $comida[$i].Product
$table.cell(($i+2),3).Range.Text = $comida[$i].Price
}
}
即使使用@($result),我也会得到一个看起来像System.Management.Automation.PSCustomObject的类型对象,所以它不能在for循环中使用,因为它没有大小。
1条答案
按热度按时间5vf7fwbs1#
让它工作...代码如下。