2

最初に言っておきたいのは、他の人が学ぶのを助けるために自分の知識を提供してくれるすべての人に感謝しています...

Datgrid を Excel ファイルにエクスポートして正常に動作するコードをまとめることができましたが、データグリッドの最初の行しか取得していません。データグリッドには 1 つまたは数百のレコードが含まれる可能性があるため、すべての行を Excel にエクスポートする必要があります。

これが私がまとめることができたものです(繰り返しますが、正常に動作し、ファイルは列ヘッダーで保存されますが、データグリッドからデータの最初の行のみを書き込みます):

'Export to Excel
    Dim ExApp1 As Excel.Application
    Dim ExWkbk1 As Excel.Workbook
    Dim ExWksht1 As Excel.Worksheet
    Dim MisValue As Object = System.Reflection.Missing.Value
    Dim i As Integer
    Dim j As Integer

    ExApp1 = New Excel.Application
    ExWkbk1 = ExApp1.Workbooks.Add(MisValue)
    ExWksht1 = ExWkbk1.Sheets("sheet1")



    For i = 0 To dg7.RowCount - 2
        For j = 0 To dg7.ColumnCount - 1
            ExWksht1.Cells(i + 2, j + 1) = dg7(j, i).Value.ToString()
            For k As Integer = 1 To dg7.Columns.Count
                ExWksht1.Cells(1, k) = dg7.Columns(k - 1).HeaderText
                ExWksht1.Cells(i + 2, j + 1) = dg7(j, i).Value.ToString()
            Next
        Next
    Next

    ExWksht1.SaveAs("C:\MyExcel.xlsx")
    ExWkbk1.Close()
    ExApp1.Quit()

    releaseObject(ExApp1)
    releaseObject(ExWkbk1)
    releaseObject(ExWksht1)

繰り返しますが、私が学ぶのを手伝ってくれて、前もって感謝します

4

1 に答える 1

0

まず第一に、これはDataGridではなくDataGridViewであるように思われます。これは、DataGridにはWinFormsまたはWeb.UIのいずれにも「RowCount」または「ColumnCount」プロパティがないためです(間違っている可能性があります)。
もしそうなら、特定の理由があります

dg7.RowCount-2

データを取得しようとしているオブジェクトが実際にDataGridViewである場合、このタスクは新しい(空の)行を省略することだと思います。この方法でDataGridViewからデータをエクスポートしようとしているのが正しければ、この目的に役立つDataGridViewRowのプロパティがあります。

IsNewRow

したがって(最近VB.NETでExcelを使用していませんが)、サイクルは次のようになります。

For i = 0 To dg7.ColumnCount - 1
    ExWksht1Cells(1 , i + 1) = dg7.Columns[i].HeaderText
Next

For i = 0 To dg7.RowCount - 1
    If Not dg7.Rows(i).IsNewRow Then
        For j = 0 To dg7.ColumnCount - 1
            ExWksht1.Cells(i+ 2, j + 1) = dg7(i, j).Value.ToString()
        Next
    End If
Next

エクセルオブジェクトが呼び出す限り、私はそのオブジェクトをあまり使用していないので、合理的なコメントを与えることはできません。
それが有用であるか正しいかを教えてください。

于 2012-10-28T21:27:25.940 に答える