Копирование диаграммы из Excel в PowerPoint с сохранением качества и прозрачности - PullRequest
2 голосов
/ 12 января 2012

Я кодирую макрос для копирования диаграммы Excel и вставки ее в презентацию PowerPoint в виде прозрачного изображения. Пока звучит просто, но проблема в том, что картинка либо не прозрачная, либо искаженная.

Посмотрите пожалуйста:

  • вот искаженная версия, которую я получаю после выполнения моих макросов:

distorted:

  • вот что я получаю, когда вручную копирую / вставляю (и именно так я хочу, чтобы это выглядело):

desired:

Мой код (соответствующая часть):

ActiveSheet.ChartObjects("MyChartNameGoesHere").CopyPicture Appearance:=xlScreen, Format:=xlPicture
Set PPApp = GetObject(, "Powerpoint.Application")
Set PPPres = PPApp.ActivePresentation
Set PPSlide = PPPres.Slides(PPApp.ActiveWindow.Selection.SlideRange.SlideIndex)
PPSlide.Shapes.PasteSpecial(ppPasteEnhancedMetafile).Select

Я пытался изменить параметр формата CopyPicture с xlPicture на xlBitmap , но в этом случае изображение не является прозрачным и перекрывает фон слайда. И я не уверен, что это выглядит гладко.

Я также пытался изменить параметр PasteSpecial слайда почти на каждый из перечисленных здесь , но все еще безуспешно.

Некоторое время я считал, что версия xlBitmap в порядке и просто не прозрачна. Вот почему я переместил оба примера к краю слайда, чтобы мы могли это видеть. Но затем, после увеличения, я понял, что это также было искажено. Я не знаю, действительно ли я ошибся или просто случайно уронил что-то важное из своего кода (скорее всего). Восстановлено по памяти до предыдущей версии, но не удалось.

Еще раз, все хорошо, когда я копирую диаграмму из Excel и вставляю ее в PowerPoint в виде картинки вручную. PowerPoint 2007 не имеет рекордера макросов, поэтому я не вижу, что происходит.

Пожалуйста, помогите мне. Любые мысли приветствуются!

ОБНОВЛЕНИЕ"искаженная" версия не только ... искажена, но и в 5 раз "тяжелее" (с точки зрения размера файла презентации). Любая помощь по-прежнему высоко ценится!

1 Ответ

0 голосов
/ 02 марта 2012

Я использую в своей работе этот код для диаграмм

For Each Grf In E.ActiveSheet.ChartObjects
    Grf.Copy
    Sld.Shapes.Placeholders(Nr).Select msoCTrue
    P.ActivePresentation.Windows(1).View.PasteSpecial (ppPasteMetafilePicture)
    Nr = Nr + 1
Next Grf
...