我有一个工作的 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 中运行良好的东西,所以我认为这是一个很好的起点。
一如既往的感谢!