未安装 Excel 的 CSV 到 multi-sheet XLS。电源外壳

CSVs to multi-sheet XLS without Excel installed. Powershell

我有一个包含多个 CSV 文件的文件夹。我想把它们全部拿走并制作一个 XLS(或 xlsx),其中 sheet 代表每个 CSV 文件。

此处的主要区别在于 Excel 未安装且无法安装。

我知道我可以使用 EPPlus 库 - http://epplus.codeplex.com/。 我还读过使用 Access 数据库引擎 - http://www.microsoft.com/en-us/download/details.aspx?id=13255 .

我已经研究了很多不同的脚本,以传统方式将 CSV 转换为 XLS,并尝试将它们转换为使用其中之一,但似乎进展不大。如果没有 Excel,这甚至可能吗?

如果可行,我愿意安装类似 LibreOffice 的软件并学习使用它编写脚本。

如果您使用 openxml 格式 *.xlsx,则无需安装 office 即可操作 excel 文档。

有一些 powershell 模块(powertools、epplus 等)可以用来完成你想做的事情。 这是一个使用 powershell wrapper that I wrote for Spreadsheetlight:

的解决方案

创建一些 csv 文件

Get-Service | Export-Csv -Path c:\temp\Services.csv -NoTypeInformation
Get-Process | Export-Csv -Path c:\temp\Processes.csv -NoTypeInformation

创建一个新的 excel 文档来保存 csv 数据

$doc = New-SLDocument -WorkbookName bigxldoc -Path C:\temp -PassThru -Verbose

将 csv 文件导入 excel

Get-ChildItem -Path C:\temp -Filter *.csv | 
  Import-CSVToSLDocument -WorkBookInstance $doc  -AutofitColumns -Verbose 

保存文档

$doc | Save-SLDocument -Verbose

注意:这仅适用于 *.xlsx 格式,不适用于 *.xls

编辑-1

默认情况下,数据导入从 Row2、Column2 开始,可以轻松更改:

Get-ChildItem -Path C:\temp -Filter *.csv | 
    Import-CSVToSLDocument -WorkBookInstance $doc -ImportStartCell A1 -AutofitColumns -Verbose

删除默认工作表 'Sheet1' 并保存文档

$doc | Remove-SLWorkSheet -WorkSheetName sheet1 -Verbose
$doc | Save-SLDocument -Verbose

您可能还会发现 https://github.com/dfinke/ImportExcel 有用。

根据示例,

gsv | Export-Excel .\test.xlsx -WorkSheetname Services

dir -file | Export-Excel .\test.xlsx -WorkSheetname Files

我的最终剧本

# **install-module slpslib**

$outputfilename = $(get-date -f yyyyMMdd) + "_" + "_combined-data.xlsx" #creates file name with date/username

$doc = New-SLDocument -WorkbookName $outputfilename -Path D:\Reports -PassThru -Verbose
Get-ChildItem -Path D:\Reports -Filter *.csv | 
  Import-CSVToSLDocument -WorkBookInstance $doc  -AutofitColumns -Verbose


$doc | Remove-SLWorkSheet -WorkSheetName sheet1 -Verbose

$doc | Save-SLDocument -Verbose