VB.NET - Проблема при изменении диаграммы в Excel
От: Muff Россия  
Дата: 21.07.06 12:37
Оценка:
При выполнении следующего кода

   Dim oExcel As Object 'Excel.Application
        Dim oBook As Object 'Excel.Workbook
        Dim oSheet As Object 'Excel.Worksheet

        Dim oldCI As System.Globalization.CultureInfo = _
        System.Threading.Thread.CurrentThread.CurrentCulture
        System.Threading.Thread.CurrentThread.CurrentCulture = _
            New System.Globalization.CultureInfo("en-US")

        'Start a new workbook in Excel.
        oExcel = CreateObject("Excel.Application")

        oBook = oExcel.Workbooks.Add

        'Add data to cells of the first worksheet in the new workbook.
        oSheet = oBook.Worksheets(1)
        Dim i As Integer
        For i = 1 To 5
            oSheet.Range("A" & CStr(i)).Value = i
            oSheet.Range("B" & CStr(i)).Value = i * i
        Next i

        Dim oChart As Object 'Excel.Chart
        oChart = oBook.Sheets.Add(Type:=-4109) 'Excel.XlSheetType.xlChart
        oChart.ChartType = 74 'Excel.XlChartType.xlXYScatterLines
        oChart.Location(Where:=1, Name:="function") ' Excel.XlChartLocation.xlLocationAsNewSheet 
        oChart.PlotArea.Interior.ColorIndex = 2

        Dim s1 As Object 'Excel.Series
        s1 = oChart.SeriesCollection.NewSeries()

        s1.XValues = oSheet.Range("A1:A5")  ' Ошибка здесь !!!!!!!!!!!!!!!!!!!!!!!
        s1.Values = oSheet.Range("B1:B5")

        'Save the Workbook and quit Excel.
        oBook.SaveAs("c:\Book1.xls")

        If Not oBook Is Nothing Then oBook.Close(False)
        oExcel.Quit()

        System.Threading.Thread.CurrentThread.CurrentCulture = oldCI


возникает следующая ошибка при попытке изменить данные в объекте Series:

Type mismatch. (Exception from HRESULT: 0x80020005 (DISP_E_TYPEMISMATCH))

Дело в том, что поле XValues объекта Series имеет тип System.Array, a oSheet.Range("A1:A5") имеет тип System.__ComObject . У объекта Range есть поле Value, которое возвращает массив значений. Однако код
s1.XValues = oSheet.Range("A1:A5").Value

не работает, если массив достаточно большой.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.