Уменьшить размер файла для диаграмм, вставленных из excel в word
Я создавал отчеты, копируя некоторые диаграммы и данные из документа excel в документ word. Я вставляю в content control, поэтому я использую ChartObject.CopyPicture
в excel и ContentControl.Range.Paste
в word. Это делается в цикле:
Set ws = ThisWorkbook.Worksheets("Charts")
With ws
For Each cc In wordDocument.ContentControls
If cc.Range.InlineShapes.Count > 0 Then
scaleHeight = cc.Range.InlineShapes(1).scaleHeight
scaleWidth = cc.Range.InlineShapes(1).scaleWidth
cc.Range.InlineShapes(1).Delete
.ChartObjects(cc.Tag).CopyPicture Appearance:=xlScreen, Format:=xlPicture
cc.Range.Paste
cc.Range.InlineShapes(1).scaleHeight = scaleHeight
cc.Range.InlineShapes(1).scaleWidth = scaleWidth
ElseIf ...
Next cc
End With
создание этих отчетов с помощью Office 2007 дало файлы, которые были около 6 МБ, но создание их (с использованием того же листа и документа) в Office 2010 дает файл, который примерно в 10 раз больше.
после распаковки docx, я установлено, что дополнительный размер поступает из файлов emf, которые соответствуют диаграммам, вставленным с помощью VBA. Где они колебаются от 360 до 900 KB раньше, они 5-18 MB. И графика не заметно лучше.
еще больше, похоже, это связано со стилем диаграммы. Я создал новую электронную таблицу и вставил 7 точек данных и соответствующую 2D-круговую диаграмму. Со стилем по умолчанию он скопирован как 79 КБ emf, а со стилем 26 он копирует как 10 МБ emf. Когда я использовал Office 2007, диаграмма будет копировать как 700 КБ emf. Это код:
Sub CopyAndPaste()
ThisWorkbook.Worksheets("Charts").ChartObjects("Chart 1").CopyPicture Appearance:=xlScreen, Format:=xlPicture
GetObject(, Class:="Word.Application").ActiveDocument.Range.Paste
End Sub
Я могу копировать с форматом xlBitmap
, и хотя это несколько меньше, он больше, чем emf, генерируемый Office 2007 и заметно более низкого качества. Есть ли другие варианты уменьшения размера файла? В идеале я хотел бы создать файл с тем же разрешением для диаграмм, что и в Office 2007. Есть ли способ использовать только VBA (без изменения диаграмм в электронной таблице)? В любом случае я могу легко скопировать как объект, не связывая документы?
3 ответов
Я уже сталкивался с чем-то подобным раньше
вместо
Document.Range.Paste
Попробуйте Использовать
Document.Range.PasteSpecial DataType:= wdPasteMetafilePicture
или
Document.Range.PasteSpecial DataType:= wdPasteShape
это вставит диаграмму как изображение или рисунок в отличие от встроенного объекта excel
Equivelant для использования " вставить специальный..."из меню.
другие типы данных доступно
http://msdn.microsoft.com/en-us/library/office/aa220339(v=office.11).aspx
Это, возможно, происходит потому .файлы emf масштабируются неправильно. Использование PNG может решить проблему размера (как указано в комментариях выше), но все равно будет проблемой, потому что они не будут векторными изображениями.
Если вы используете AddPicture для добавления изображений в файл, на следующей странице показано решение, в котором вы можете изменить масштаб и уменьшить размер файла от любого используемого по умолчанию. Так что это может решить вашу вопрос.