DataTableを二次元配列に格納する

エクセル出力世界最速の技だじょ

2013-01-13 11:43:18 テーマ:一人会議

「スヌーピー」 【Japanese】 ぬぉぉぉー、おいらのあみ出したVB.NETからのExcel出力がけっこうすごかったみたいだから、 前回より改良してもう一度記事をUpしておくじょ。
VBからExcelへ出力すると、数値も文字列として認識されてしまうんだじょ。
例のセルを一回クリックすれば数値になるパターンだじょ。
しかし、これを1セルずつプログラムでしていくとデータ数が多い場合には、ものすごく時間が
かかってしまうじょ。
たいやきを食べながらでも待てない時間だじょ。
そこでおいらがあみだしたのがこの1行だじょ  '1度貼り付けておいて  xlRange.Value = iarData 再度その値を挿入するんだじょ。数字の文字列を数値にする多分世界最速の技だじょ  xlRange.Value = xlRange.Value 【English】 I output to Excel from VB. , It is also recognized as a numeric string. If you click on a numeric value once the cell. However, when there are a large number of data, it takes a long time and we were terribly one cell to this program.
'Once I paste the data. xlRange.Value = iarData 'I want to insert its value again. xlRange.Value = xlRange.Value
''' <summary> ''' SnoopyExcelExport ''' </summary> ''' <param name="iTarget"></param> ''' <remarks></remarks>  Private Sub ExcelExport()

    Dim dtTable As New DataTable    

    dtTable.Clear()     'ここで何んらかdtTableにデータを取得しておくこと

     'DataTableを二次元配列に格納する    

     Dim sarData(dtTable.Rows.Count - 1, dtTable.Columns.Count - 1) As String    

For y As Integer = 0 To dtTable.Rows.Count - 1        

   For x As Integer = 0 To dtTable.Columns.Count - 1            

        sarData(y, x) = dtTable.Rows(y)(x).ToString()        

   Next    

Next

Dim xlApp As New Excel.ApplicationClass    

Dim xlBook As Excel.WorkbookClass    

Dim xlSheet As Excel.Worksheet    

Dim xlRange As Excel.Range = Nothing    

Dim xlRange1 As Excel.Range = Nothing   

Dim xlRange2 As Excel.Range = Nothing    

xlApp.Application.Visible = False 'Excelを非表示にする    

xlBook = xlApp.Workbooks.Add()    

xlSheet = xlBook.Worksheets(1)

    Try        

         xlRange1 = DirectCast(irefSheet.Cells(1, 1), Excel.Range) '始点        

         xlRange2 = DirectCast(irefSheet.Cells(1 + UBound(iarData), 1 + UBound(iarData, 2)), Excel.Range) '終点

        xlRange = irefSheet.Range(xlRange1, xlRange2) 'セル範囲        

        xlRange.Value = sarData'貼り付け        

        '数字の文字列を数値にする(多分世界最速の技)     

        xlRange.Value = xlRange.Value

        '書式設定などはここでしておけば表示も大丈夫              

  xlRange = irefSheet.Columns("I:I")        

  xlRange.NumberFormatLocal = "yyyy/mm/dd" '年月日       

  xlRange = irefSheet.Columns("R:BE")        

  xlRange.NumberFormatLocal = "#,##0;[赤]-#,##0" '通貨型      

  xlRange = irefSheet.Columns("BB:BB")      

  xlRange.NumberFormatLocal = "0.0%" 'パーセント

  'Excelを表示する        

  xlApp.Application.Visible = True

    Catch ex As Exception

        'Throw         MsgBox(Err.Description)

    Finally

        '使用したインスタンスは削除しておくこと        

SnoopyReleaseComObject(DirectCast(xlSheet, Object))        

SnoopyReleaseComObject(DirectCast(xlBook, Object))        

SnoopyReleaseComObject(DirectCast(xlApp, Object))        

SnoopyReleaseComObject(DirectCast(xlRange, Object))        

SnoopyReleaseComObject(DirectCast(xlRange1, Object))        

SnoopyReleaseComObject(DirectCast(xlRange2, Object))

    End Try

End Sub

''' <summary> ''' SnoopyReleaseComObject ''' </summary> ''' <param name="iTarget"></param> ''' <remarks></remarks> Private Shared Sub SnoopyReleaseComObject(ByRef iTarget As Object)

    Try

        If Not iTarget Is Nothing Then             System.Runtime.InteropServices.Marshal.ReleaseComObject(iTarget)         End If

    Finally

        iTarget = Nothing

    End Try

End Sub

End Try     End Sub

posted on 2014-03-18 10:19  guanmy  阅读(9665)  评论(0编辑  收藏  举报

导航