2013-10-28 41 views
2

我有一臺服務器自動生成報告。報告採用CSV格式。我需要能夠直接加密文件,無需第三方壓縮(無WinZIP或WinRAR)。Powershell - 將CSV轉換爲XLS而不安裝Excel

我認爲最好的辦法是將CSV轉換爲XLS,然後通過Powershell密碼保護XLS文件。不幸的是,我沒有在服務器上安裝Office,並且以這種方式轉換文件時發現的所有示例都要求安裝Excel。

有沒有人知道的一種方法來將CSV轉換爲PowerShell中的XLS而無需安裝Excel?或者,如果沒有,你可以想一個更好的方式來密碼保護CSV文件,而不壓縮到ZIP或RAR?

+0

想要加密還是壓縮? – mjolinor

+0

這聽起來很像。 – EBGreen

+0

你有沒有試過使用[this](http://stackoverflow.com/questions/17688468/how-to-export-a-csv-to-excel-using-powershell)? – kravasb

回答

1

.net 4.5現在包含完整的帶密碼的zip壓縮。 所以一旦你安裝了4.5,你應該可以從powershell中訪問這個庫,而不需要任何其他的依賴。

1

你可以嘗試(如果你真的需要使用PowerShell):

  1. 下載外部.NET庫不需要的Excel 安裝,like this oneor this
  2. Load到你的PowerShell會話。
  3. 嘗試在代碼中使用該dll中定義的類型。

注意!這種方法很難。您應該期望奇怪的行爲和大量的安全issues取決於您選擇創建excel文件的程序集。

至於我,最好的選擇是你在c#中創建一個簡單的控制檯應用程序,它將使用上面的程序集。然後在每次需要時在目標機器上啓動它。

P.S.我試圖爲你的問題創建PowerShell腳本沒有成功。不幸的是,PowerShell與外部庫無法預測。

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") 
+0

很好的例子,謝謝!你知道我是否可以對.xls文件做同樣的事情?我能夠爲.xlsx做到這一點。如果不是,那麼是否有可能將.xlsx轉換爲.xlsx,反之亦然? – Stephanie

+0

嗨斯蒂芬妮,epplus只支持XLSX,因爲XLS是一種專有的封閉格式。我建議看看[PSExcel](https://github.com/RamblingCookieMonster/PSExcel)。它使用epplus,但簡化了處理Excel文件。它具有Cmdlet Import-XLSX和Export-XLSX,可以使用XLSX文件實現您想要的功能。 –

+0

謝謝你的迴應。我已下載PSExcel文件夾並進行測試。導入和導出也似乎是導入和導出到.xlsx。它將如何導出爲.xls?我找不到任何例子。 – Stephanie