Я создавал отчеты, копируя некоторые диаграммы и данные из документа Excel в документ Word. Я вставляю данные в элемент управления содержимым, поэтому использую 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 точек данных и соответствующую двумерную круговую диаграмму. Со стилем по умолчанию он копируется как emf 79 КБ, а со стилем 26 копируется как emf 10 МБ. Когда я использовал Office 2007, диаграмма копировалась как emf 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
, и хотя он несколько меньше, он больше, чем ЭДС, созданный Office 2007, и заметно худшего качества. Есть ли другие варианты уменьшения размера файла? В идеале я хотел бы создать файл с тем же разрешением для диаграмм, что и в Office 2007. Есть ли способ, который использует только VBA (без изменения диаграмм в электронной таблице)? В любом случае я могу легко скопировать как объект, не связывая документы?
CopyPicture Appearance:=xlPrinter
, поскольку это дает файлы большего размера, чемxlScreen
? В противном случае не могли бы вы подробнее рассказать о диаграммах (какой тип, какое форматирование, сколько точек данных)? - person aucuparia   schedule 28.05.2014ActiveChart.Export "C:\My Charts\SpecialChart.png"
), а затем импортировать .png в Word? Размер файла должен быть приемлемым. - person Rick supports Monica   schedule 28.05.2014ActiveSheet.DrawingObjects.Select [NEWLINE] MsgBox "Dont forget to tick the Apply to Selected Pictures box", vbOKOnly + vbInformation [NEWLINE] Application.CommandBars.ExecuteMso "PicturesCompress"
- person bmgh1985   schedule 06.06.2014