Ошибка Shape.CopyPicture (ошибка 1004), когда формат: = xlBitmap - PullRequest
0 голосов
/ 25 апреля 2018

Я пытаюсь скопировать группу фигур, которая содержит несколько диаграмм в качестве изображения высокого разрешения.Для достижения высокого разрешения я использую параметры Appearance: = xlPrinter и Format: = xlBitmap.

Ошибка времени выполнения '1004'

Ошибка приложения или объекта

Код, который я использую для этого, приведен ниже

ws.Shapes.Range(Array("Chart 1", "Chart 2")).Group.Name = "temp_group"
With ws.Shapes("temp_group")
    .CopyPicture Appearance:=xlPrinter, Format:=xlBitmap
    .Ungroup
End With

Если я просто удаляю Format: = xlBitmap или меняю его на Format: = xlPicture, он работает нормально.Справка MSDN показывает xlBitmap в качестве опции, и я попытался использовать только 2, но это выдает ту же ошибку.

Если я попробую то же самое на одном графике, он будет работать отлично.

ws.ChartObjects("Chart 1").Chart.CopyPicture Appearance:=xlPrinter, Format:=xlBitmap

Каков наилучший способ скопировать несколько диаграмм в качестве изображения высокого разрешения?Я не хочу сохранять их, потому что мне нужно скопировать / вставить несколько групп до 30 диаграмм для экспорта в OneNote.

Редактировать:

После некоторого дополнительного тестирования выясняется, что яможно использовать xlBitmap, если для параметра внешнего вида установлено значение xlScreen вместо xlPrinter.Тем не менее, разрешение все еще довольно ужасно.Это очень расстраивает, поскольку простое копирование / вставка этих же диаграмм вручную дает очень хорошие четкие картинки, но по какой-то причине VBA просто разрушает их.VBA требуется, хотя, в противном случае это будет очень трудоемкий процесс.

1 Ответ

0 голосов
/ 26 октября 2018

Я столкнулся с той же проблемой в моем приложении. Вот решение:

  • Если вы хотите скопировать объект типа MsoShapeType.msoChart или MsoShapeType.msoPicture, выполните следующие действия:
shape.ScaleHeight(2.5f, MsoTriState.msoFalse);
shape.ScaleWidth(2.5f, MsoTriState.msoFalse);
shape.Copy();
shape.CopyPicture(Excel.XlPictureAppearance.xlScreen, Excel.XlCopyPictureFormat.xlPicture);
shape.ScaleHeight(0.4f, MsoTriState.msoFalse);
shape.ScaleWidth(0.4f, MsoTriState.msoFalse);

где shape - это, конечно, ваш объект.

Во-первых, вам нужно увеличить объект (масштабирование выполняется без потерь до первоначального размера изображения или максимального размера диаграммы, что составляет всего 400% масштабирования). Затем вы используете метод CopyPicture () с указанными параметрами, которому предшествует Copy () *. Последнее, что нужно сделать, это уменьшить (или нет, если вы не сохраните этот лист) объект.

* Copy () используется здесь для устранения общей и случайной ошибки

System.Runtime.InteropServices.COMException (0x800A03EC): сбой метода CopyPicture класса диапазона

Если вы откроете лист Excel, вы увидите несколько конфигураций копирования: ссылка, потому что я пока не могу добавить изображения

  • Обычная копия просто (xlScreen, xlBitmap);
  • Копия хорошего качества - xlScreen, xlPicture) и, в зависимости от установленного драйвера принтера, (xlPrinter) и (xlPrinter, xlPicture);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...