Шифровать электронную таблицу Excel epplus powershell - PullRequest
0 голосов
/ 04 марта 2019

Знаете ли вы, как зашифровать существующий файл xlsx с помощью Epplus в Powershell?Я искал, как сделать это без удачи.Вот что у меня есть:

# Load EPPlus
$DLLPath = "C:\temp\excel test\ExcelModule\EPPlus.dll"
[Reflection.Assembly]::LoadFile($DLLPath)

# Create Excel File
$ExcelPackage = New-Object OfficeOpenXml.ExcelPackage 
$Worksheet = $ExcelPackage.Workbook.Worksheets.

# Encryption
$ExcelPackage.File = "C:\temp\disable.xlsx"
$ExcelPackage.Encryption.Algorithm = 
[OfficeOpenXml.EncryptionAlgorithm]::AES256
$ExcelPackage.Encryption.IsEncrypted = $true
$ExcelPackage.Encryption.Password = 'Excel'
$ExcelPackage.Save()

1 Ответ

0 голосов
/ 05 марта 2019

Я никогда раньше не использовал эту DLL.

Я использую другие инструменты для шифрования.

Итак, потратил некоторое время на это сегодня, и пример ниже работает.Пик через DLL с помощью ---

dotPeek Free .NET Decompiler от JetBrains https://www.jetbrains.com/decompiler/download

--- чтобы увидеть, с чем я работал.После этого создал образец и сделал следующее ...

Динамически ---

  1. Создайте новый xlsx
  2. Сканируйте папку на наличие типов файлов и добавьте, чтов файл
  3. Зашифровать файл
  4. Сохранить файл

При открытии файла в Excel появится запрос пароля.Сценарий ... Использование Add-Type или Import-Module с использованием пути к .DLL оба сработало.

Add-Type -AssemblyName System.Drawing
Add-Type -Path 'D:\Downloads\epplus.4.5.3.1\lib\net40\EPPlus.dll'

# Import-Module 'D:\Downloads\epplus.4.5.3.1\lib\net40\EPPlus.dll'

$pkg = New-Object OfficeOpenXml.ExcelPackage('E:\temp\output.xlsx')

Get-ChildItem "E:\Temp\*.png" | 
ForEach-Object {
    $name = $_.BaseName
    $ws = $pkg.Workbook.Worksheets.Add($name)

    $image = [System.Drawing.Image]::FromFile($_.FullName)
    $picture = $ws.Drawings.AddPicture($name, $image)
    $picture.From.Column = 1
    $picture.From.Row = 1
    $image.Dispose()
}

# Encryption
$pkg.Encryption.Algorithm = [OfficeOpenXml.EncryptionAlgorithm]::AES256
$pkg.Encryption.IsEncrypted = $true
$pkg.Encryption.Password = 'Excel'

$pkg.Save()
$pkg.Dispose()

Start-Process -FilePath 'Excel.exe' -ArgumentList 'E:\temp\output.xlsx'

Так что, на самом деле, мало чем отличается от того, что вы делаете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...