导出Excel范围的图像(VB.NET)(Exporting Excel Range as imag

2019-09-17 10:39发布

我有一个工作的Excel VBA宏做什么,我想从这里 ,我试图将其转换为VB.NET。

从VBA代码:

Sub bah()
''' Set Range you want to export to file
    Dim rgExp As Range: Set rgExp = Range("B2:C6")
    ''' Copy range as picture onto Clipboard
    rgExp.CopyPicture Appearance:=xlScreen, format:=xlBitmap
    ''' Create an empty chart with exact size of range copied
    With ActiveSheet.ChartObjects.Add(Left:=rgExp.Left, Top:=rgExp.Top, _
    Width:=rgExp.Width, Height:=rgExp.Height)
    .Name = "ChartVolumeMetricsDevEXPORT"
    .Activate
    End With
    ''' Paste into chart area, export to file, delete chart.
    ActiveChart.Paste
   ActiveSheet.ChartObjects("ChartVolumeMetricsDevEXPORT").Chart.Export "C:\Users\ajohnson\Desktop\workdamnit.jpg"
ActiveSheet.ChartObjects("ChartVolumeMetricsDevEXPORT").Delete
End Sub

这样做是需要一个Excel范围,然后把它放到一个图表,是范围的副本,并将其保存为JPG。

这是我最近在使其VB.NET尝试:

Dim xlApp As New Excel.Application
Dim xlWorkBook As Excel.Workbook
Dim xlWorkSheet As Excel.Worksheet
Dim xlRange As Excel.Range
xlWorkBook = xlApp.Workbooks.Open("C:\test.xlsx")
xlWorkSheet = xlWorkBook.Sheets("Sheet1")


 xlRange = xlWorkSheet.Range("B2:C6")
        With xlWorkSheet.ChartObjects.add(xlRange.Left, xlRange.Top, xlRange.Width, xlRange.Height)
            .name = "Chart1"
            .activate()
        End With
xlWorkSheet.ChartObjects("Chart1").Paste()
        xlWorkSheet.ChartObjects("Chart1").chart.export(Filename:="C:\Users\ajohnson\Desktop\saveit.jpg")
        xlWorkSheet.ChartObjects("Chart1").delete()

我遇到了麻烦转换ActiveChart.Paste方法。 我不能让它在VB.NET工作。 它要么抛出一个错误或者它只是离开时,我做它在VB.NET一个空框(如果我添加.chart它运行在贴之前,但不粘贴任何值),但在VBA它的值填充利益。 我曾尝试创建一个图表对象,但似乎没有任何工作。

我觉得像我靠近有它整理出来,但我不能完全得到它。 我想我可以把它作为一个VBA宏和VB.NET调用它,但似乎在一定程度上是荒谬的。 任何帮助将不胜感激。 我也可以有不同的方法,它只是我跨过来了,这是东西VBA效果很好,所以我想这是一个很好的起点。

感谢一如既往!

Answer 1:

我刚打了MSDN稍用力到那里。 原来,你必须把chartobject图表中,我得到了工作看起来像代码:

  xlRange = xlWorkSheet.Range("B2:C6")
    xlRange.CopyPicture(Excel.XlPictureAppearance.xlScreen, Excel.XlCopyPictureFormat.xlPicture)
    Dim oChtobj As Excel.ChartObject = xlWorkSheet.ChartObjects.add(xlRange.Left, xlRange.Top, xlRange.Width, xlRange.Height)
    Dim oCht As Excel.Chart
    oCht = oChtobj.Chart
    oCht.Paste()
    oCht.Export(Filename:="C:\saveit.jpg")
    oChtobj.Delete()

我要删除的问题,因为它得到了由我这么快就解决了(这忽略的时间之前我张贴在这里我度过了体面位),但是当我搜索一个问题,像我谈到这个页面,所以也许这将帮助别人的未来。 如果你正在寻找从Excel中复制一个范围内由于某种原因JPG(也许它连接到一个Outlook电子邮件的正文,因为那是我在做什么),这应该为你工作。



Answer 2:

和C#相当于需要调用激活()或收到COMException将被抛出

Excel.Range xlRange = xlWorkSheet.Range("B2:C6");

range.CopyPicture(Excel.XlPictureAppearance.xlScreen, Excel.XlCopyPictureFormat.xlPicture);
Excel.ChartObject chartObj = myWorksheet.ChartObjects().Add(range.Left, range.Top, range.Width, range.Height);

chartObj.Activate();  // Don't Forget!

Excel.Chart chart = chartObj.Chart;
chart.Paste();
chart.Export(@"C:\image.png");

chartObj.Delete();


文章来源: Exporting Excel Range as image (VB.NET)