2

データグリッドをExcelドキュメントにエクスポートする必要がありますが、エクスポートするとエラーが発生します。以下は、エクスポートに使用しているコードです。Excelドキュメントが開き、ヘッダーが配置されていますが、各セルの値は、ExcelセルにSystem.Data.DataRowViewが表示されているはずです。私がする必要があるのは、帽子の行から値を取得し、Excelブックに挿入することです。

ヘルプ、またはチュートリアルリンクをいただければ幸いです。

ピーター

Microsoft.Office.Interop.Excel.Application excel = null;
Microsoft.Office.Interop.Excel.Workbook wb = null;

object missing = Type.Missing;
Microsoft.Office.Interop.Excel.Worksheet ws = null;
Microsoft.Office.Interop.Excel.Range rng = null;

try
{
    excel = new Microsoft.Office.Interop.Excel.Application();
    wb = excel.Workbooks.Add();
    ws = (Microsoft.Office.Interop.Excel.Worksheet)wb.ActiveSheet;

    for (int Idx = 0; Idx < dataGrid1.Columns.Count; Idx++)
    {
        // Puts Column Header into excel work sheet
        ws.Range["A1"].Offset[0, Idx].Value = dataGrid1.Columns[Idx].Header;
    }

    for (int Idx = 0; Idx < dataGrid1.Items.Count; Idx++)
    {  
        ws.Range["A2"].Offset[Idx].Resize[1, dataGrid1.Columns.Count].Value =
        dataGrid1.Items[Idx].ToString();
    }

    excel.Visible = true;
    wb.
}
catch (COMException ex)
{
    MessageBox.Show("Error accessing Excel: " + ex.ToString());
}
catch (Exception ex)
{
    MessageBox.Show("Error: " + ex.ToString());
}
4

2 に答える 2

1

誰かが同じ問題を抱えているなら、私は解決策を見つけました。

行内の値にアクセスするには、次のことを行う必要があります。

for (int columnIndex = 0; columnIndex < dataGrid1.Columns.Count; columnIndex++) 
{
    ws.Range["A2"].Offset[rowIndex, columnIndex].Value =
        (dataGrid1.Items[rowIndex] as DataRowView).Row.ItemArray[columnIndex].ToString()
}
于 2012-08-30T12:49:17.707 に答える
0

ループfor (int Idx = 0; Idx < dataGrid1.Items.Count; Idx++)を使用すると、アイテム、つまり DataGrid の行を反復処理します。そのような各項目または行は明らかにDataRowViewであるため、 ToString は「System.Data.DataRowView」を提供します。

また、行の各項目、つまりセルを反復処理する必要があります。

for (int rowIndex = 0; rowIndex < dataGrid1.Items.Count; rowIndex++) 
{
    for (int columnIndex = 0; columnIndex < dataGrid1.Columns.Count; columnIndex++) 
    {
        ws.Range["A2"].Offset[rowIndex, columnIndex].Value =
            dataGrid1.Items[rowIndex][columnIndex].ToString();
    }
} 

私はこれをテストしておらず、Excel API について何も知らないことに注意してください。そのため、これws.Range["A2"].Offset[rowIndex, columnIndex]が正しいかどうかはわかりません。

于 2012-08-30T09:25:18.240 に答える