excel - 将多个 CSV 转换为单个 Xlsx
问题描述
我有一个创建 x 数量的 csv 的脚本我想将文件夹中的所有 csv 转换为一个 Xlsx 文件。
我有循环遍历每个 csv 的基础知识,但是它会在每个循环结束后覆盖。
我想将每个 csv 添加到工作簿中的工作表并保存。
但它只显示它读取的最后一个 csv,不显示任何其他工作表。
我从以下示例代码;
如何使用 Powershell 将 CSV 导出到 Excel
如前所述,我已经尝试过上述方法;没运气。
Function Excel-Write{
$RD = "C:\temp\Servers\*.csv"
$CsvDir = $RD
$csvs = dir -path $CsvDir
$outputxls = ""C:\temp\Servers\Complete.Xlsx"
foreach($iCsv in $csvs){
$WB = $csvs.Length
$Excel = New-Object -ComObject excel.application
#$Excel.displayAlerts = $false
$workbook = $excel.Workbooks.add(1)
$Worksheet = $workbook.worksheets.Item(1)
$Worksheet.name = $Group
$TxtConnector = ("TEXT;" + $iCsv)
$Connector = $worksheet.Querytables.add($txtconnector,$worksheet.Range("A1"))
$query = $Worksheet.QueryTables.item($Connector.name)
$query.TextfileOtherDelimiter = $Excel.Application.International(5)
$Query.TextfileParseType =1
$Query.TextFileColumnDataTypes = ,2 * $worksheet.cells.column.count
$query.AdjustColumnWidth =1
$Query.Refresh()
$Query.Delete()
$workbook.Save()
}
$Workbook.SaveAs($outputxls,51)
$Excel.quit()
}
仅显示一个工作表,这是已读取的最后一个 CSV,它会覆盖其他工作表。
解决方案
我认为您需要将前两行移出循环。您还需要调用 add 而不是 $workbook.worksheets.Item(1) -> $workbook.worksheets.add(1)
Function Excel-Write{
$RD = "C:\temp\Servers\*.csv"
$CsvDir = $RD
$csvs = dir -path $CsvDir
$outputxls = ""C:\temp\Servers\Complete.Xlsx"
$Excel = New-Object -ComObject excel.application
$workbook = $excel.Workbooks.add(1)
foreach($iCsv in $csvs){
$WB = $csvs.Length
#$Excel.displayAlerts = $false
$Worksheet = $workbook.worksheets.add(1)
$Worksheet.name = $Group
$TxtConnector = ("TEXT;" + $iCsv)
$Connector = $worksheet.Querytables.add($txtconnector,$worksheet.Range("A1"))
$query = $Worksheet.QueryTables.item($Connector.name)
$query.TextfileOtherDelimiter = $Excel.Application.International(5)
$Query.TextfileParseType =1
$Query.TextFileColumnDataTypes = ,2 * $worksheet.cells.column.count
$query.AdjustColumnWidth =1
$Query.Refresh()
$Query.Delete()
$workbook.Save()
}
$Workbook.SaveAs($outputxls,51)
$Excel.quit()
}
当您再次创建 excel 对象时,它会覆盖现有工作表。
推荐阅读
- java - Java中的字母数字凯撒密码
- ios - 不知道为什么我的自定义 UICollectionViewCell 不起作用?
- html - iOS 浏览器无法正确渲染 SVG
- linq - 将一列的值连接成一行
- javascript - 停止重新渲染 FlatList 中的其他类似组件
- java - 为创建 AD 帐户编写的 Java 代码但发生 LDAP 异常
- c# - 评估表中反射的更智能方法
- git - Github 新分支创建限制
- ios - 如果应用从不调用 SDK 上的任何方法,嵌入在 iOS 应用中的第 3 方 SDK 可以运行代码吗?
- rx-java2 - 如果 RxJava2 足够新鲜或请求新值,则 RxJava2 将获得最新值