2009-11-24 13 views
4

Я пытаюсь экспортировать диаграмму из Excel в формат wmf или emf.Экспорт диаграммы Excel в wmf или emf?

Код работает, если вы экспортируете в GIF, но не с WMF в качестве имени файла.

Это работает:

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

Но

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

терпит неудачу дает ошибку:

Run-time error '1004': Application-defined or object-defined error

Powerpoint позволяет экспортировать в WMF. И я «успешно» экспортировал, скопировав график в Powerpoint и получив Powerpoint для экспорта изображения в WMF, но должен быть более простой способ - я надеюсь.

Интересно, может ли быть способ регистрации фильтра WMF для Excel, но я не уверен, как это сделать. Пожалуйста помоги! Благодарю.

+0

@Alex Andronov - нужно ли использовать команду export? Будет ли другой метод, который сохраняет диаграмму по-другому, хорошо? – Dostee

ответ

7

Эта копия, метод сохранения работал для меня, я положил его в 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 

Это фактическое сохранить как эдс функция (использование 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

Andy ответил на это подробно Here.

+0

К сожалению, это не работает. –

+0

Проблема с этим предложением заключается в том, что установка полной версии Office не добавляет фильтр WMF. –

+0

Не успел проверить решение Энди - мне пришлось уйти (отсюда и задержка в комментариях). Я посмотрю фильтр WMF для вас. – caving

0

Забавно, что этот плакат имел ту же самую проблему на этом forum здесь, в этом отношении по этой интересной статье в ExcelForum.

Надеюсь, это поможет вам, С уважением, Tom.

1

this forum entry вы можете найти чудесный Stephen Bullen's Excel Page и загрузить PastePicture utility, который показывает, как вы можете экспортировать в формат WMF.

Он в основном копирует диаграмму, вставляет ее в буфер обмена как изображение и сохраняет его содержимое в файл WMF в нескольких строках кода.

Смежные вопросы