excel - PowerShell - 将多个 CSV 文件导入多个工作表中的 Excel 文件
问题描述
我有以下代码(来自 SO 中的其他地方),它将 20 个奇怪的 CSV 文件导入到一个 Excel 文件中的不同选项卡中。我需要将 XLSX 选项卡称为 CSV 文件名。
代码会运行,但每次运行时都不会导入至少一个 CSV 文件。所有选项卡都存在,但数据未通过。它也是每次运行都会丢失的不同 CSV 文件。
有没有办法确保将所有 CSV 文件和数据导入 XLSX?我想如果我在每次运行时暂停脚本,它会给代码一个重置的机会,但“Start-Sleep -s 1”没有帮助。
错误包括:
“Microsoft Excel 一次只能转换一列。范围可以是多行高,但不超过一列宽。通过仅选择一列中的单元格再试一次。”
“无法获取 Range 类的 PasteSpecial 属性”
如果其中一个 CSV 文件中没有数据,此脚本是否还有一种方法可以忽略 CSV 导入?
# import multiple CSV files into separate Excel worksheets
$inputfolder='C:\somefolder’
$mergedwb='C:\somefolder\importtemplate.xlsx'
$xl = New-Object -ComObject Excel.Application
$xl.Visible=$true
$wb = $xl.WorkBooks.add()
Get-ChildItem $inputfolder\*.csv |
ForEach-Object{
Try{
Write-Host "Moving $_" -ForegroundColor green
$sheet = $wb.Sheets.Add()
$sheet.Name = $_.BaseName
$data = Get-Content $_ -Raw
Set-Clipboard $data
$sheet.UsedRange.PasteSpecial(
[Microsoft.Office.Interop.Excel.XlPasteType]::xlPasteAll,
[Microsoft.Office.Interop.Excel.XlPasteSpecialOperation]::xlPasteSpecialOperationAdd
)
$sheet.UsedRange.TextToColumns(
$sheet.UsedRange,
[Microsoft.Office.Interop.Excel.XlTextParsingType]::xlDelimited,
[Microsoft.Office.Interop.Excel.XlTextQualifier]::xlTextQualifierDoubleQuote,
$false, $false, $false, $true
)
}
Catch{
Write-Host $_ -ForegroundColor Red
} Start-Sleep -s 1
}
$wb.Sheets.Item('sheet1').Delete()
$wb.Sheets.Item('sheet2').Delete()
$wb.SaveAs($mergedwb)
$wb.Close()
$xl.Quit()
解决方案
试试这个 - 它会以新的方式打开 CSV 文件,Workbook
然后将工作表内容复制到 Excel XLSX 文件中的新工作表中,额外的 PS 将检查 CSV 是否为空。
$excel = New-Object -ComObject Excel.Application
$excel.Visible = $true
$wb = $excel.Workbooks.Add()
Get-ChildItem $CSVPath\*.csv | ForEach-Object {
if ((Import-Csv $_.FullName).Length -gt 0) {
$csvBook = $excel.Workbooks.Open($_.FullName)
$csvBook.ActiveSheet.Copy($wb.Worksheets($wb.Worksheets.Count))
$csvBook.Close()
}
}
推荐阅读
- css - CSS中的样式表
- mysql - 使用 with() 函数进行模型关系预加载的 Eloquent 查询问题
- elasticsearch - Elasticsearch:如何为所有索引全局禁用自动日期检测
- sql-server - 在不使用输出的情况下通过 MERGE 的操作获取受影响行的行数
- sql - 添加附加列的连续行之间的日期差异
- python - 在循环迭代结束时删除 python pandas 数据框
- python - 将 tkinter Canvas 导出为 PDF
- javascript - Typescript、React 和 Recompose 问题
- python - 使用 Google Maps API 获取商家名称
- amazon-web-services - SSH Permission Denied (PublicKey) - 包括 VVV,不是典型错误