Я создавал отчеты, копируя некоторые диаграммы и данные из документа excel в текстовый документ. Я вставляю в элемент управления содержимым, поэтому я использую ChartObject.CopyPicture
в excel и ContentControl.Range.Paste
в слове. Это делается в цикле:
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 КБ, они составляют 5-18 МБ. И графика не заметно лучше.
Кроме того, это похоже на стиль диаграммы. Я создал новую таблицу и вставил 7 точек данных и соответствующую двумерную круговую диаграмму. С стилем по умолчанию он копируется как эВМ 79 КБ, а со стилем 26 он копирует как ЭМП 10 МБ. Когда я использовал Office 2007, диаграмма будет копироваться как эВМ 700 КБ. Это код:
Sub CopyAndPaste()
ThisWorkbook.Worksheets("Charts").ChartObjects("Chart 1").CopyPicture Appearance:=xlScreen, Format:=xlPicture
GetObject(, Class:="Word.Application").ActiveDocument.Range.Paste
End Sub
Я могу CopyPicture с форматом xlBitmap
, и, хотя это несколько меньше, он больше, чем emf, созданный Office 2007 и заметно более низкого качества. Существуют ли другие варианты уменьшения размера файла? В идеале я хотел бы создать файл с таким же разрешением для диаграмм, как и в Office 2007. Есть ли способ использовать только VBA (без изменения диаграмм в электронной таблице)? В любом случае, я могу легко копировать как объект без ссылки на документы?