2014-09-19 3 views
0

У меня возникли проблемы с экспортом моих данных в excel. мое приложение использует ArrayList() для размещения данных. Я не совсем понимаю арраистов. Внутри моего массива ArrayList() есть MyDataClass, затем Val1, Val2 и т. Д. Массив имеет 7 столбцов и может иметь от 1 до 300 строк данных. Когда я это делаю, я не могу спускаться к данным Val1, мой листок excel в ячейке A1 говорит, MyDataClass. Может кто-то, пожалуйста, помогите мне с этим, спасибо заранее. Я на Visual Studio 2010 и Office 2010.Нужно получить ArrayList() для экспорта в Excel

Protected Sub btnExport_Click_Backup(sender As Object, e As System.EventArgs) Handles btnExport.Click 

    Dim ItemList As New ArrayList() 
    ItemList = Session("sessItemList2") 
    ItemList.Reverse() 


    Dim dt As New System.Data.DataTable() 
    dt.Columns.Add("SerlNmbr") 
    dt.Columns.Add("ItemNmbr") 
    dt.Columns.Add("LocnCode") 
    dt.Columns.Add("Status") 
    dt.Columns.Add("MSL") 
    dt.Columns.Add("InvoiceNumber") 
    dt.Columns.Add("ActivationStatus") 

'Это где я делаю что-то неправильно ...

For i As Integer = 0 To ItemList.Count - 1 

     Dim dr As DataRow 

     dr = dt.NewRow 

     dr.Item(0) = ItemList(0).Val1.ToString 

     dt.Rows.Add(dr) 

    Next 

    Try 
     Dim oExcel As Interop.Excel.Application 
     Dim oBook As Workbook 
     Dim oSheet As Worksheet 
     oExcel = CreateObject("Excel.Application") 
     oBook = oExcel.Workbooks.Add(Type.Missing) 
     oSheet = oBook.Worksheets(1) 

     Dim misValue As Object = System.Reflection.Missing.Value 
     Dim i As Integer 
     Dim j As Integer 
     Dim dc As System.Data.DataColumn 
     Dim dr As System.Data.DataRow 
     Dim colIndex As Integer = 0 
     Dim rowIndex As Integer = 0 

     'Export the Columns to excel file 
     For Each dc In dt.Columns 
      colIndex = colIndex + 1 
      oSheet.Cells(1, colIndex) = dc.ColumnName 
     Next 

     'Export the rows to excel file 
     For Each dr In dt.Rows 
      rowIndex = rowIndex + 1 
      colIndex = 0 
      For Each dc In dt.Columns 
       colIndex = colIndex + 1 
       oSheet.Cells(rowIndex + 1, colIndex) = dr(dc.ColumnName) 
      Next 
     Next 

     'Set final path 
     Dim fileName As String = "c:\temp\ExportedFile" + ".xls" 
     Dim finalPath = fileName 
     oSheet.Columns.AutoFit() 
     'Save file in final path 
     oBook.SaveAs(finalPath, XlFileFormat.xlWorkbookNormal, Type.Missing, Type.Missing, Type.Missing, Type.Missing, XlSaveAsAccessMode.xlExclusive, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing) 



     'Release the objects 
     ReleaseObject(oSheet) 
     oBook.Close(False, Type.Missing, Type.Missing) 
     ReleaseObject(oBook) 
     oExcel.Quit() 
     ReleaseObject(oExcel) 
     'Some time Office application does not quit after automation: so i am calling GC.Collect method. 
     GC.Collect() 


     ' Open the file for the user 
     Dim oxcel As Interop.Excel.Application 
     Dim owb As Workbook 
     Dim osht As Worksheet 
     Dim ocell As Range 

     oxcel = New Interop.Excel.Application 
     oxcel.Visible = True 

     ' my cpu errors out here becz my Office is not registered, you can go to excel & remove Registration Msgbox then press continue 
     owb = oxcel.Workbooks.Open(finalPath) 
     osht = owb.Worksheets(1) 
     ocell = osht.Range("A1") 
    Catch ex As Exception 
     ' MessageBox.Show(ex.Message, "Warning", MessageBoxButtons.OK) 
     ' Need an error 
    End Try 

End Sub 

' вот небольшая часть MyDataClass

Общественности Класс MyDataClass

Public Sub New(ByVal v1 As String, ByVal v2 As String, ByVal v3 As String, ByVal v4 As String, Optional ByVal v5 As String = "", Optional ByVal v6 As String = "", Optional ByVal v7 As String = "", Optional ByVal v8 As String = "") 
    Val1 = v1 
    Val2 = v2 
    Val3 = v3 
    Val4 = v4 
    Val5 = v5 
    Val6 = v6 
    Val7 = v7 
    Val8 = v8 
End Sub 
Public Property Val1() As String 
    Get 
     Return _Val1 
    End Get 
    Set(ByVal value As String) 
     _Val1 = value 
    End Set 
End Property 

и т.д ...

Public _Val1 As String 
Public _Val2 As String 
Public _Val3 As String 
Public _Val4 As String 
Public _Val5 As String 
Public _Val6 As String 
Public _Val7 As String 
Public _Val8 As String 

End Class

ответ

0

ArrayList представляет собой список объектов. На нем нет .Val. Там может быть объект с свойством val, но сначала вы должны его бросить.

Вы на самом деле не показывали нам, как вы делаете аррайалист или что он содержит, поэтому я должен угадать.

Если у вас есть класс с VAL1 как свойство, вы должны привести его к этому типу объекта, прежде чем вы можете получить доступ к VAL1

dr.Item(0) = Cast(ItemList(0),MyClass).Val1.ToString 

Поскольку ArrayList просто принимает объект, вы должны бросить их в их подходящий тип. Или, если вам просто нужны строки, вы можете просто вызвать ToString для простых типов, таких как целые числа.

FYI, если вы работаете с Excel в приложении .Net, поймите, что вам понадобится Excel на сервере. У вас также не будет прав доступа к нему по умолчанию, и Microsoft рекомендовала это делать более десяти лет. Существуют сторонние компоненты .Net, предназначенные для работы с различными форматами офисных файлов без необходимости установки офиса. Модель потоковой обработки офисных приложений совершенно неверна для использования в веб-среде.

+0

'здесь, где MyDataClass создан ранее в программе. данные Dim As MyDataClass = Новый MyDataClass (strEsn, strItemId, strLocnCode, strStatus, strMSL, strInvoiceNumber, strActivationStatus) 'Тогда его позже добавил здесь: ItemList.Add (данные) –

+0

Я добавил код для MyDataClass в то верхняя часть веб-страницы –

+0

Я пробовал вашу строку кода и получаю эту ошибку для: dr.Item (0) = Cast (ItemList (0), «MyDataClass»). Val1.ToString. - Слишком мало аргументов типа для Systems.Activities.Expressions –

Смежные вопросы