Excel vba emf粘贴到工作表print / pdf错误的大小

时间:2014-03-18 14:00:37

标签: excel vba pdf excel-vba

我正在将从另一个应用程序(DPlot Jr)生成的增强元文件复制到剪贴板,并将其粘贴到Excel(2007)工作表。从那里我使用vba将该文件转换为pdf。这是我必须做的代码:

            ' copy the graph eml file to the clip board

            ret = DPlot_Command(doc, "[CopyPicture()]")

            ' copy the clip board contents to a new temp worksheet (under the covers)

            'Hide the application
            Application.ScreenUpdating = False

            'Create a new temp worksheet
            Set ws = ActiveWorkbook.Sheets.Add(After:=Sheets(1))
            ws.Name = "Temp_Graph_DPJR"
            ws.Activate

            'Paste to the temp worksheet
            ActiveSheet.Paste

            'Save as pdf from excel
            ActiveSheet.ExportAsFixedFormat _
                 Type:=xlTypePDF, _
                 filename:=pdf_filename, _
                 OpenAfterPublish:=False

我发现,在PDF中创建的图像略大于图形的实际尺寸。例如,图形的宽度应为2.65“.PDF中图形的大小为2.816,因此大约会显示.166”或1 Pica。

虽然我可以,而且可能不得不,只是将图像的尺寸减小到最初的.166“这看起来有点像hacky而且我只是想让图像的原始尺寸过来。

我发现如果我将图像粘贴到Chartsheet上,则会保留尺寸,但图像会在Chartsheet页面上成为位图。

当我创建pdf时,我拥有所有正确的设置。我没有利润,实际规模等。

有没有人见过这个?有人可以帮忙吗?我需要将图像作为pdf。

感谢您的帮助!

拉​​斯

1 个答案:

答案 0 :(得分:0)

嗯,这很奇怪,不应该有所作为,但确实如此,到目前为止似乎有效。

在上述工作流程中,将EMF粘贴到工作表后,如果我选择该图像然后将其复制到新的图表,则会保留原始大小,以及图形的矢量性质。这是代码:

            ret = DPlot_Command(doc, "[CopyPicture()]")

            ' copy the clip board contents to a new temp worksheet (under the covers)

            'Hide the application
            Application.ScreenUpdating = False

            'Create a new temp worksheet
            Set ws = ActiveWorkbook.Sheets.Add(After:=Sheets(1))
            ws.Name = "Temp_Graph_DPJR"
            ws.Activate

            'Paste to the temp worksheet then select/copy that one
            ActiveSheet.Paste
            Selection.Copy


            'Create a new temp chart
            Set temp_chart = ActiveWorkbook.Charts.Add
            'temp_chart.Name = "Temp_Chart"

            'Set the linesytle of the border to none
            temp_chart.ChartArea.Border.LineStyle = xlNone

            'Paste the dplotjr graph to the chart sheet
            'We had to do this as this maintained the size of the graph
            'Dumb MS Excel worksheet

            temp_chart.Paste

            'Paste to the temp worksheet
            'ActiveSheet.Paste

            'Save as pdf from excel
            ActiveSheet.ExportAsFixedFormat _
                 Type:=xlTypePDF, _
                 filename:=pdf_filename, _
                 OpenAfterPublish:=False

几乎就像Excel确定粘贴是来自另一个应用程序并将位图粘贴到图表,但如果它确定它来自自身,它会粘贴为矢量图像。这可能是一个可能在未来消失的漏洞,但到目前为止似乎有效。

FWIW!