2017-01-05 9 views
0

Я выяснил, как скопировать диапазон в лист Excel с помощью сценария PowerShell. Я написал этот вывод в переменной, чтобы впоследствии преобразовать его в JPEG. Я сделал это с помощью приложения Excel & Windows.Forms.Clipboard методов (GetImage()).Преобразование изображения в буфер обмена в JPEG

Теперь мой вопрос заключается в том, как преобразовать текущий буфер обмена в JPEG в сценарий PowerShell.

Невозможно преобразовать буфер обмена с помощью метода сохранения. Моя последняя команда выглядела примерно так:

  1. $clipboard.Save("C:\Data\picture.jpeg")
  2. $clipboard.Save(("C:\Data\picture.jpeg", "jpeg"))
  3. $clipboard.Save("C:\Data\picture.jpeg", "jpeg")

Ни один из этих трех решений не работал. Я всегда получал ошибку, что переменная null.

На работе мне также не разрешено использовать версию PowerShell 5. Из-за этого я также не могу использовать командлеты Get-Clipboard & Set-Clipboard.

Я знаю, что можно просто вставить клип в краску, а затем сохранить его вручную, но я не хочу этого делать самостоятельно, но с помощью сценария PowerShell.

+1

Привет, не могли бы вы [изменить свой вопрос] (http://stackoverflow.com/posts/41491456/edit), чтобы показать нам, как вы объявляете '$ clipboard' и что вы вкладываете в него? – sodawillow

+0

Не уверен, что это поможет в том, чего вы пытаетесь достичь: http://stackoverflow.com/questions/32136985/vba-copy-cells-paste-as-a-picture-then-save-as-a- picture – Thom

ответ

1

Использование [System.Windows.Forms.Clipboard::GetImage() для извлечения изображения из буфера обмена, а затем вызвать Save() метод изображения объекта с правильным параметром формата:

Add-Type -AssemblyName System.Windows.Forms 
Add-Type -AssemblyName System.Drawing 

$file = 'C:\path\to\output.jpg' 

if ([Windows.Forms.Clipboard]::ContainsImage()) { 
    $img = [Windows.Forms.Clipboard]::GetImage() 
    $img.Save($file, [Drawing.Imaging.ImageFormat]::Jpeg) 
} else { 
    Write-Warning 'No image in clipboard.' 
} 

Обратите внимание, что для доступа буфера обмена для работы должна быть запущена в режиме STA (Single тема квартира):

Примечание
класс Clipboard можно использовать только в потоках, установленных в одной квартире резьбы (S TA). Чтобы использовать этот класс, убедитесь, что ваш Основной метод отмечен атрибутом STAThreadAttribute.

+0

Я попробую это tomorow на работе. Спасибо заранее Ансгару! – Robin

+0

Это не работает. Всегда получаем ошибку, что $ e равно null. – Robin

+0

'' ## 1 ## $ rng = $ Worksheet.range ("A2: O41") $ pic = $ rng.CopyPicture (1,1) $ e = [Windows.Forms.Clipboard] :: GetImage() $ e.Save ($ file1, [Drawing.Imaging.ImageFormat] :: Jpeg) ## 2 ## $ RNG = $ Worksheet.range ("А42: O124") $ рис = $ rng.CopyPicture (1,1) $ e = [Windows.Forms.Clipboard] :: GetImage() $ e.Save ($ file2, [Drawing.Imaging.ImageFormat] :: Jpeg) ' – Robin