Powershell – 将CSV转换为XLS而不安装Excel

我有一个服务器自动生成报告。 报告采用CSV格式。 我需要能够直接encryption文件,没有第三方压缩(没有WinZIP或WinRAR)。

我认为最好的办法是将CSV转换为XLS,然后通过Powershell密码保护XLS文件。 不幸的是,我没有在服务器上安装Office,并且我已经发现用这种方式转换文件的所有示例都要求安装Excel。

有没有人知道一种方法来将CSV转换为PowerShell中的XLS而无需安装Excel? 或者,如果没有,你可以想一个更好的方式来密码保护CSV文件,而不压缩到ZIP或RAR?

.net 4.5现在包括完整的密码压缩。 所以,一旦你安装4.5,你应该能够从PowerShell中访问这个库,没有任何其他的依赖。

你可以尝试(如果你真的需要使用PowerShell):

  1. 下载不需要安装Excel的外部.NET库, 就像这个 , 或者这个
  2. 将其加载到PowerShell会话中。
  3. 尝试在代码中使用该dll中定义的types。

注意! 这种方法很难。 你应该期望奇怪的行为和大量的安全问题,取决于你select创buildexcel文件的程序集。

至于我,最好的select是在c#中创build一个简单的控制台应用程序,它将使用上面的程序集。 然后在每次需要时在目标机器上启动它。

PS我试图为你的问题创buildPowerShell脚本没有成功。 不幸的是,PowerShell与外部库无法预测。

我已经提供了一个例子来加载一个CSV文件,并将其导出到Excel,而不需要在这里安装Excel。 由于这个问题特别要求保护Excel文件,我创build了一个使用EPPlus保护选项的示例。 请参阅我的原始答案以从CSV加载数据以及如何设置EPPlus的详细信息。

# Load EPPlus $DLLPath = "C:\Windows\System32\WindowsPowerShell\v1.0\Modules\EPPlus\EPPlus.dll" [Reflection.Assembly]::LoadFile($DLLPath) | Out-Null # Create Excel File $ExcelPackage = New-Object OfficeOpenXml.ExcelPackage $Worksheet = $ExcelPackage.Workbook.Worksheets.Add("Protected") # Encryption $ExcelPackage.Encryption.Algorithm = [OfficeOpenXml.EncryptionAlgorithm]::AES256 $ExcelPackage.Encryption.IsEncrypted = $true $ExcelPackage.Encryption.Password = 'Excel' # Protection of Workbook $ExcelPackage.Workbook.Protection.LockRevision = $true $ExcelPackage.Workbook.Protection.LockStructure = $true $ExcelPackage.Workbook.Protection.LockWindows = $true $ExcelPackage.Workbook.Protection.SetPassword("Workbook") $ExcelPackage.Workbook.View.SetWindowSize(150, 525, 14500, 6000) $ExcelPackage.Workbook.View.ShowHorizontalScrollBar = $false $ExcelPackage.Workbook.View.ShowVerticalScrollBar = $false $ExcelPackage.Workbook.View.ShowSheetTabs = $false # Protection of Worksheet $Worksheet.Protection.AllowAutoFilter = $false $Worksheet.Protection.AllowDeleteColumns = $false $Worksheet.Protection.AllowDeleteRows = $false $Worksheet.Protection.AllowEditObject = $false $Worksheet.Protection.AllowEditScenarios = $false $Worksheet.Protection.AllowFormatCells = $false $Worksheet.Protection.AllowFormatColumns = $false $Worksheet.Protection.AllowFormatRows = $false $Worksheet.Protection.AllowInsertColumns = $false $Worksheet.Protection.AllowInsertHyperlinks = $false $Worksheet.Protection.AllowInsertRows = $false $Worksheet.Protection.AllowPivotTables = $false $Worksheet.Protection.AllowSelectLockedCells = $false $Worksheet.Protection.AllowSelectUnlockedCells = $false $Worksheet.Protection.AllowSort = $false $Worksheet.Protection.IsProtected = $true $Worksheet.Protection.SetPassword("Worksheet") # Save Excel File $ExcelPackage.SaveAs("$HOME\Downloads\test.xlsx")