小编Ste*_*ton的帖子

将从excel粘贴的图表的文件大小减小为word

我一直在通过将excel文档中的一些图表和数据复制到word文档来创建报表.我正在粘贴内容控件,所以我ChartObject.CopyPicture在excel和ContentControl.Range.Pasteword中使用.这是在循环中完成的:

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
Run Code Online (Sandbox Code Playgroud)

使用Office 2007创建这些报告产生的文件大约为6MB,但在Office 2010中创建它们(使用相同的工作表和文档)会产生大约10倍的文件.

在解压缩docx之后,我发现额外的大小来自emf文件,这些文件对应于使用VBA粘贴的图表.它们的范围从360到900 KB之间,它们是5-18 MB.而且图形效果并不明显.

更进一步,它似乎与图表风格有关.我创建了一个新的电子表格并插入了7个数据点和相应的2D饼图.使用默认样式,它复制为79 KB emf,而使用样式26复制为10 MB emf.当我使用Office 2007时,图表将复制为700 KB emf.这是代码:

Sub CopyAndPaste()
    ThisWorkbook.Worksheets("Charts").ChartObjects("Chart 1").CopyPicture Appearance:=xlScreen, Format:=xlPicture
    GetObject(, Class:="Word.Application").ActiveDocument.Range.Paste
End Sub
Run Code Online (Sandbox Code Playgroud)

我能够使用格式的CopyPicture xlBitmap,虽然它稍微小一点,但它比Office 2007生成的emf大,质量明显更差.还有其他减少文件大小的选项吗?理想情况下,我想为使用Office 2007的图表生成一个具有相同分辨率的文件.有没有任何方法只使用VBA(不修改电子表格中的图表)?我可以轻松地复制为对象而无需链接文档?

vba ms-word excel-vba word-vba .emf

18
推荐指数
1
解决办法
3238
查看次数

标签 统计

.emf ×1

excel-vba ×1

ms-word ×1

vba ×1

word-vba ×1