Я пишу простое приложение, использующее vb. net, которое берет выбранный пользователем текстовый файл, заполняет таблицу usoft excel и создает диаграмму разброса данных. Код компилируется без ошибок и при выполнении выдает желаемые результаты вплоть до момента добавления текстового поля в диаграмму. Вот тогда он выдает:
NullReferenceException было необработанной ошибкой, необработанное исключение типа 'System.NullReferenceException' произошло в Graphing_Tool.exe. Дополнительная информация: Ссылка на объект не установлена для экземпляра объекта.
Включена выдержка из моего кода. Выделенная строка - это место, где он прекращает выполнение и выдает описанную ошибку. Все мои попытки исправить эту ошибку на сегодняшний день потерпели неудачу. Я начинаю думать, что текстовые поля не могут быть добавлены к диаграммам Excel, используя vb. net. Моя операционная система - win10, а моя IDE - visual studio 2012. Любая помощь в решении моей проблемы будет принята с благодарностью! Спасибо.
Dim xlApp As Excel.Application = Nothing
Dim xlWorkBooks As Excel.Workbooks = Nothing
Dim xlWorkBook As Excel.Workbook = Nothing
Dim xlWorkSheet As Excel.Worksheet = Nothing
Dim xlWorkSheets As Excel.Sheets = Nothing
Dim xlCells As Excel.Range = Nothing
Dim SheetName As String = ""
'New instance of Excel and start a new workbook.
xlApp = New Excel.Application
xlApp.DisplayAlerts = False
xlWorkBooks = xlApp.Workbooks
xlWorkBook = xlWorkBooks.Add
xlWorkSheets = xlWorkBook.Worksheets
xlWorkSheet = xlWorkSheets(1)
xlApp.Visible = True
Dim maxTemp As Single = 0.0
Dim minTemp As Single = 10000.0
'Write data to excel sheet
With xlWorkSheet
tempCount = 0
Do While tempCount <= lineCount - 1
If (data(tempCount).PixelValue > maxTemp) Then
maxTemp = data(tempCount).PixelValue
End If
If (data(tempCount).PixelValue < minTemp) Then
minTemp = data(tempCount).PixelValue
End If
.Cells(tempCount + 1, 1) = data(tempCount).PixelNum
.Cells(tempCount + 1, 2) = data(tempCount).PixelValue
tempCount += 1
Loop
tempCount -= 1
End With
Erase data
'Calculate Thermal Resistance (Junction-Case)
Dim thermalResistance As Single = 0.0
thermalResistance = (maxTemp - CStr(CaseTemp)) / maxPower
thermalResistance = Math.Round(thermalResistance, 3, MidpointRounding.AwayFromZero)
Dim chartArea As Excel.Chart
Dim xlCharts As Excel.ChartObjects
Dim myChart As Excel.ChartObject
Dim chartRange As Excel.Range
xlCharts = xlWorkSheet.ChartObjects
myChart = xlCharts.Add(300, 80, 500, 250)
chartArea = myChart.Chart
With chartArea
chartRange = xlWorkSheet.Range("A:B")
.SetSourceData(Source:=chartRange)
.ChartType = Excel.XlChartType.xlXYScatterLinesNoMarkers
.HasTitle = True
.HasLegend = False
.ChartTitle.Text = "Temperature Data Trace SN= " & PN
.SeriesCollection(1).delete
.SeriesCollection(1).Format.Line.ForeColor.RGB = RGB(255, 0, 0)
Dim xlAxisCategory, xlAxisValue As Excel.Axes
xlAxisCategory = CType(chartArea.Axes(, Excel.XlAxisGroup.xlPrimary), Excel.Axes)
xlAxisCategory.Item(Excel.XlAxisType.xlCategory).HasTitle = True
xlAxisCategory.Item(Excel.XlAxisType.xlCategory).AxisTitle.Characters.Text = "Pixel Count"
xlAxisValue = CType(chartArea.Axes(, Excel.XlAxisGroup.xlPrimary), Excel.Axes)
xlAxisValue.Item(Excel.XlAxisType.xlValue).HasTitle = True
xlAxisValue.Item(Excel.XlAxisType.xlValue).AxisTitle.Characters.Text = "Temperature (Degrees C)"
xlAxisValue.Item(Excel.XlAxisType.xlValue).MinimumScale = Int(0.9 * minTemp)
End With
**Dim oShape As Excel.Shape = xlApp.ActiveChart.Shapes.AddLabel(Microsoft.Office.Core.MsoTextOrientation.msoTextOrientationHorizontal, 320, 100, 500, 250)**
oShape.TextFrame2.TextRange.Text = "some text"