我们的目标是能够把一个杂乱的电子邮件列表中不需要的字符和修剪下来,然后把它写到一个电子表格上做一些其他的工作。我迭代了一个文本文件,做修剪工作,然后逐行写结果。
作为参考,当不包括excel com对象并且仅使用Out-File时,这可以正常工作:
$untrimmedEmails = 'S:\PS_Scripts\Data\trimEmails.txt'
foreach ($line in Get-Content $untrimmedEmails) {
$row = 1
$newLine = $line.Split(':')[1]
Out-File -FilePath .\Notes\trimResults.txt -InputObject $newLine.trimEnd('>') -Encoding ASCII -Append
$row++
}
字符串
但是,当尝试使用excel com对象写入每个单元格时,这个微小的更改只会导致最后一行的输出:
$untrimmedEmails = 'S:\PS_Scripts\Data\trimEmails.txt'
& {
$excel = New-Object -ComObject Excel.Application
$wb = $excel.Workbooks.Open('S:\PS_Scripts\Data\Leavers.xlsx')
$ws = $wb.WorkSheets.Add()
foreach ($line in Get-Content $untrimmedEmails) {
$row = 1
$newLine = $line.Split(':')[1]
$ws.cells.item($row, 1).Value2 = $newLine.TrimEnd('>')
$row++
}
$wb.SaveAs($CSVImportFile, 6)
$wb.Close()
$excel.Quit()
}
[GC]::Collect()
型
有什么想法是出了问题吗?我的印象是,循环工作正常,因为我看到写的最后一行.
1条答案
按热度按时间pvabu6sv1#
将
$row
的初始赋值移出循环-否则您将在每次迭代时重置行偏移量:字符串