我需要将一个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());
}
答案 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]
是否正确。