我有20个csv文件。每个都是不相关的。我如何将它们组合成一个xlsx文件,有20张,每张都以csv文件命名。
$root = "C:\Users\abc\Desktop\testcsv"
$CSVfiles = Get-ChildItem -Path $root -Filter *.csv
$xlsx = "C:\Users\abc\Desktop\testxl.xlsx" #output location
$delimiter = "," #delimiter
#Create a excel
$xl=New-Object -ComObject Excel.Application
$xl.Visible=$true
#add a workbook
$wb=$xl.WorkBooks.add(1)
ForEach ($csv in $CSVfiles){
#name the worksheet
$ws=$wb.WorkSheets.item(1)
$ws.Name = [io.path]::GetFileNameWithoutExtension($csv)
$TxtConnector = ("TEXT;" + $csv)
$Connector = $ws.QueryTables.add($TxtConnector,$ws.Range("A1"))
$query = $ws.QueryTables.item($Connector.name)
$query.TextFileOtherDelimiter = $delimiter
$query.TextFileParseType = 1
$query.TextFileColumnDataTypes = ,1 * $ws.Cells.Columns.Count
$query.AdjustColumnWidth = 1
# Execute & delete the import query
$query.Refresh()
$query.Delete()
$wb.SaveAs($xlsx,51)
}
# Save & close the Workbook as XLSX.
$xl.Quit()
3条答案
按热度按时间bvjxkvbb1#
This way,将第一行更改为存储这20个CSV文件的文件夹,然后
ohtdti5x2#
https://stackoverflow.com/a/51094040/5995160的答案是太慢时,处理csv的数据吨,我修改了这个解决方案使用https://github.com/dfinke/ImportExcel。这大大提高了这项任务的性能,至少对我来说。
此解决方案假定用户已经将目录更改为所有csv所在的目录。
5rgfhyps3#
有关使用
OpenText
方法的解决方案,请参见下文。至少要注意两点:
TextFileColumnDataTypes
的方法非常巧妙。您需要修改它并将数组提供给下面的FieldInfo
参数。请参阅上面链接的文档以了解它所期望的数组类型。