У меня есть рабочий макрос excel vba, который делает то, что я хочу, от here, и я пытаюсь преобразовать его в VB.NET.Экспорт Excel в качестве изображения (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
Что это делает принять ряд первенствовать, а затем положить его в график, который является копией диапазона и сохранить его как 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, поэтому я подумал, что это хорошая отправная точка.
Спасибо, как всегда!
Также стоит отметить, что вы должны удалить объект диаграммы, чтобы быть в состоянии сделать это несколько раз, в противном случае он будет срабатывать. oChtobj.Delete() - ваш друг. – asjohnson