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

我有一个工作的Excel VBAmacros,做我想从这里 ,我想把它转换为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填充的值利益。 我试图创build一个图表对象,但似乎也没有工作。

我觉得我已经接近完成了,但我不太明白。 我想我可以把它作为一个VBAmacros,并从VB.NET中调用它,但这在某种程度上似乎是荒谬的。 任何帮助将不胜感激。 我也开放了不同的方法,只是这是我遇到的,在VBA中运行良好的东西,所以我认为这是一个很好的起点。

一如既往的感谢!

我只是不得不打MSDN了一点点难以到达那里。 事实certificate,你必须将图表对象放在一个图表中,我得到的代码如下所示:

  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() 

我想删除这个问题,因为它很快就被我解决了(这忽略了我在这里发布之前所花费的时间),但是当我search一个像我这样的问题时,这将有助于未来的人。 如果你正在寻找从excel复制到jpg出于某种原因(也许附加到Outlook电子邮件的正文,因为这是我在做什么)的范围,这应该为你工作。

而C#等价物需要对Activate()的调用,否则将引发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();