将Excel范围导出为图像(VB.NET)

asj*_*son 2 vb.net excel charts vba

我有一个工作的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
Run Code Online (Sandbox Code Playgroud)

这样做是采用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()
Run Code Online (Sandbox Code Playgroud)

我在转换ActiveChart.Paste方法时遇到了麻烦.我不能让它在VB.NET中工作.它会抛出一个错误,或者当我在VB.NET中执行它时只留下一个空框(如果我.chart在运行粘贴之前添加,但不粘贴任何值),但在VBA中它填充了感兴趣的值.我试过创建一个图表对象,但这似乎也没有用.

我觉得我已接近整理,但我无法理解.我想我可以把它作为一个VBA宏并从VB.NET中调用它,但这在某种程度上看起来很荒谬.任何帮助将不胜感激.我也对不同的方法持开放态度,这就是我遇到的在VBA中运作良好的东西,所以我认为这是一个很好的起点.

一如既往地谢谢!

asj*_*son 5

我只是不得不更加努力地到达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()
Run Code Online (Sandbox Code Playgroud)

我打算删除这个问题,因为它很快就被我解决了(这忽略了我在这里发布它之前所花费的时间),但是当我搜索像我这样的问题时,它来到这个页面,所以也许这将有助于未来的人.如果您希望将某个范围从excel复制到jpg由于某种原因(可能将其附加到outlook电子邮件的正文中,因为这就是我正在做的事情),这应该适合您.