我一直在通过将excel文档中的一些图表和数据复制到word文档来创建报表。我粘贴到内容控件中,所以我在excel中使用ChartObject.CopyPicture
,在word中使用ContentControl.Range.Paste
。这是在一个循环中完成:减少从excel粘贴到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产生了保留它们在6MB文件中的这些报告,但他们创造在Office 2010中(使用相同的工作表和文档)产生一个文件,是大约10倍大。
解压缩docx后,我发现额外的大小来自与使用VBA粘贴的图表对应的emf文件。它们的范围从360到900 KB之间,它们是5-18 MB。而图形并不明显更好。
更进一步,它似乎与图表样式有关。我创建了一个新的电子表格并插入了7个数据点和一个相应的2D饼图。使用默认样式,它将复制为79 KB emf,并使用样式26复制为10 MB emf。当我使用Office 2007时,图表会复制为700 KB电动势。这是代码:
Sub CopyAndPaste()
ThisWorkbook.Worksheets("Charts").ChartObjects("Chart 1").CopyPicture Appearance:=xlScreen, Format:=xlPicture
GetObject(, Class:="Word.Application").ActiveDocument.Range.Paste
End Sub
我能够与格式xlBitmap
到CopyPicture,和而稍小,但比Office 2007和明显的质量比较差所产生的电动势较大。是否有其他选择来减小文件大小?理想情况下,我希望为图表生成一个与我使用Office 2007时相同分辨率的文件。有什么方法只使用VBA(不需要修改电子表格中的图表)?任何方式,我可以很容易地复制为一个对象,而无需链接文档?
有一些改变,在Excel 2010图表:看到这个博客](HTTP ://blogs.office.com/2009/08/25/more-charting-enhancements-in-excel-2010/),尽管没有一个突出显示为o明显的原因。你是否使用'CopyPicture Appearance:= xlPrinter',因为这比'xlScreen'提供更大的文件?否则,你能给出一些关于图表的更多细节(什么类型,什么样的格式,多少个数据点)? – aucuparia
如何以更高效的格式导出图表(类似于'ActiveChart.Export“C:\ My Charts \ SpecialChart.png''),然后将.png导入到Word中?应该是一个可管理的文件大小。 –
你可以添加你使用的实际代码吗?粘贴时是否包含数据链接? – Adach1979