将datagrid导出到Excel文档中

时间:2012-08-30 08:45:00

标签: c# wpf datagrid interop export-to-excel

我需要将一个datgrid导出到一个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());
}

2 个答案:

答案 0 :(得分: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()
}

答案 1 :(得分:0)

使用循环for (int Idx = 0; Idx < dataGrid1.Items.Count; Idx++),您将遍历项目,即DataGrid的行。每个这样的项目或行显然都是DataRowView,因此ToString为您提供了&#34; System.Data.DataRowView&#34;。

您还必须遍历一行中的每个项目,即单元格:

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]是否正确。