Excel导出图表到wmf或emf?

时间:2009-11-24 16:50:51

标签: excel excel-vba vba

我正在尝试将图表从Excel导出为wmf或emf格式。

如果导出到GIF但代码不能用WMF作为filtername,则代码可以正常工作。

这有效:

Chart.Export FileName:="current_sales.gif", FilterName:="GIF"

但是

Chart.Export FileName:="current_sales.wmf", FilterName:="WMF"

未能提供错误:

  

运行时错误'1004':   应用程序定义或对象定义   错误

Powerpoint允许您导出到WMF。我通过将图形复制到Powerpoint并让Powerpoint将图像导出到WMF来“成功”导出,但我必须有一种更简单的方法 -

我想知道是否有办法为Excel注册WMF过滤器,但我不确定如何做到这一点。请帮忙!感谢。

4 个答案:

答案 0 :(得分:9)

这个副本,保存方法对我有用,我将它分为3个部分(声明,保存为EMF函数,以及选择/复制/函数调用部分):

*我发现this article详细说明了如何保存到EMF然后稍微修改它以使用ActiveChart而不是任意选择。

首先关闭几个声明:

Option Explicit

Private Declare Function OpenClipboard _
    Lib "user32" ( _
        ByVal hwnd As Long) _
As Long

Private Declare Function CloseClipboard Lib "user32" () As Long

Private Declare Function GetClipboardData _
    Lib "user32" ( _
        ByVal wFormat As Long) _
As Long

Private Declare Function EmptyClipboard Lib "user32" () As Long

'// CreateMetaFileA DeleteEnhMetaFile
Private Declare Function CopyEnhMetaFileA _
    Lib "gdi32" ( _
        ByVal hENHSrc As Long, _
        ByVal lpszFile As String) _
As Long

Private Declare Function DeleteEnhMetaFile _
    Lib "gdi32" ( _
        ByVal hemf As Long) _
As Long

这是实际保存为emf函数(文章中解释了CopyEnhMetaFileA和DeleteEnhMetaFile的使用):

Public Function fnSaveAsEMF(strFileName As String) As Boolean
Const CF_ENHMETAFILE As Long = 14

Dim ReturnValue As Long

    OpenClipboard 0

    ReturnValue = CopyEnhMetaFileA(GetClipboardData(CF_ENHMETAFILE), strFileName)

    EmptyClipboard

    CloseClipboard

    '// Release resources to it eg You can now delete it if required
    '// or write over it. This is a MUST
    DeleteEnhMetaFile ReturnValue

    fnSaveAsEMF = (ReturnValue <> 0)

End Function

然后是选择,复制和函数调用部分:

Sub SaveIt()
Charts.Add
    ActiveChart.ChartArea.Select
    Selection.Copy
    If fnSaveAsEMF("C:\Excel001.emf") Then
        MsgBox "Saved", vbInformation
    Else
        MsgBox "NOT Saved!", vbCritical
    End If

End Sub

答案 1 :(得分:1)

安迪详细回答了这个问题Here

答案 2 :(得分:1)

通过this forum entry,您可以找到精彩的Stephen Bullen's Excel Page并下载PastePicture utility,其中显示了如何导出为WMF格式。

它基本上复制了图表,将其作为图片粘贴到剪贴板中,并用几行代码将其内容保存到WMF文件中。

答案 3 :(得分:0)

有趣的是,这张海报在forum这里有完全相同的问题,在ExcelForum上发现了与此相关的有趣文章。

希望这对你有所帮助, 最好的祝福, 汤姆。