Powershell - 在不安装Excel的情况下将CSV转换为XLS

时间:2013-10-28 15:01:07

标签: .net excel powershell csv

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

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

有没有人知道在没有安装Excel的情况下在Powershell中将CSV转换为XLS的方法?或者,如果没有,您能想到一种更好的方法来密码保护CSV文件而不将其压缩为ZIP或RAR吗?

3 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

您可以尝试(如果您确实需要使用PowerShell):

  1. 下载不需要Excel的外部.NET库 已安装,like this oneor this
  2. Load进入您的PowerShell会话。
  3. 尝试在代码中使用该dll中定义的类型。
  4. 注意!这种做法很难。您应该期望奇怪的行为和充足的安全issues,具体取决于您选择创建Excel文件的程序集。

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

    P.S。我试图为您的问题创建PowerShell脚本但没有成功。不幸的是,PowerShell与外部库无法预测。

答案 2 :(得分:1)

我已经提供了一个示例,用于加载CSV文件并将其导出到Excel而不安装Excel here。由于此问题专门要求保护Excel文件,因此我创建了一个使用EPPlus保护选项的示例。请参阅我的original answer以从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")