【问题标题】:Powershell - Convert CSV to XLS without Excel installedPowershell - 在未安装 Excel 的情况下将 CSV 转换为 XLS
【发布时间】:2013-11-07 10:12:31
【问题描述】:

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

我认为最好的办法是将 CSV 转换为 XLS,然后通过 Powershell 对 XLS 文件进行密码保护。不幸的是,我没有在服务器上安装 Office,而且我找到的所有以这种方式转换文件的示例都需要安装 Excel。

有谁知道在 Powershell 中无需安装 Excel 即可将 CSV 转换为 XLS 的方法吗?或者,如果没有,您能想出一种更好的方法来对 CSV 文件进行密码保护,而无需将其压缩为 ZIP 或 RAR?

【问题讨论】:

  • 您要加密还是压缩?
  • 你试过用this吗?
  • Excel 中的密码保护很容易绕过。如果您需要真正的保护,则需要使用另一种方法,例如Windows 内置的EFS 功能。 gallery.technet.microsoft.com/scriptcenter/…
  • 我只需要加密。我不太关心压缩。
  • @Oleksandr - 您提供的内容需要安装 Excel

标签: .net excel powershell csv


【解决方案1】:

.net 4.5 现在包含带密码的完整 zip 压缩。 因此,一旦您安装了 4.5,您应该能够从 powershell 访问这个库,而无需任何其他依赖项。

【讨论】:

    【解决方案2】:

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

    1. 下载不需要 Excel 的外部 .NET 库 已安装,like this oneor this
    2. Load 将其添加到您的 PowerShell 会话中。
    3. 尝试在代码中使用该 dll 中定义的类型。

    注意! 这种方法很难。您应该期待奇怪的行为和大量的安全issues,具体取决于您选择创建 excel 文件的程序集。

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

    附:我尝试为您的问题创建 PowerShell 脚本,但没有成功。不幸的是,PowerShell 无法与外部库一起工作。

    【讨论】:

      【解决方案3】:

      我已经提供了一个示例,用于在没有安装 Excel 的情况下加载 CSV 文件并将其导出到 Excel here。由于这个问题专门要求保护 Excel 文件,我创建了一个使用 EPPlus 保护选项的示例。从 CSV 加载数据以及如何设置 EPPlus 的详细信息,请参阅我的 original answer

      # 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") 
      

      【讨论】:

      • 很好的例子,谢谢!你知道我是否可以对 .xls 文件做同样的事情吗?我可以为 .xlsx 做到这一点。如果不是,那么是否可以从 .xlsx 转换为 .xlsx 或反之亦然?
      • 嗨 Stephanie,epplus 仅支持 XLSX,因为 XLS 是一种专有的封闭格式。我建议看看PSExcel。它使用 epplus,但简化了 Excel 文件的处理。它有 Cmdlets Import-XLSX 和 Export-XLSX 可以实现你想要的 XLSX 文件。
      • 感谢您的回复。我已经下载了 PSExcel 文件夹并用它进行了测试。导入和导出似乎也在导入和导出到 .xlsx。它将如何导出到 .xls?我找不到任何例子。
      • 如前所述,epplus 不支持 xls,因为它是一种封闭格式。如果您安装了 Excel,您可以使用gist.github.com/gabceb/954418 来实现它
      • 是的,我在服务器上没有 excel,我不想使用互操作。但是,我发现使用 ClosedXML 可能会实现这一点。只是想与您分享以供您将来参考。谢谢!
      猜你喜欢
      • 2015-03-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-23
      • 2010-10-30
      • 2016-06-26
      • 2012-11-21
      • 2021-10-24
      相关资源
      最近更新 更多