我需要将数据网格导出到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());
}发布于 2012-08-30 20:49:18
如果有人遇到同样的问题,我找到了解决方案。
要访问行中的值,您需要执行以下操作:
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-30 17:25:18
使用循环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]这件事是否正确。
https://stackoverflow.com/questions/12193077
复制相似问题