我正在尝试将dataGrid行导出到Excel工作表。 因为我从WinForms(dataGridView)切换到WPF (dataGrid)基本上我到目前为止还没有关于WPF的线索 我需要你的帮助。
也许有人可以告诉我如何改变我的循环 或者我必须做什么而不是填充行 Excel工作表的单元格。
我已阅读有关此问题的所有文章,但是 似乎没有找到适合我的问题的主题。
这就是我为填充列名所做的事情 完美运作:
for (int i = 1; i < dataGrid.Columns.Count + 1; i++)
{
Excel.Range BackgroundColor;
BackgroundColor = xlWorkSheet.get_Range("a9", "j9");
BackgroundColor.Interior.Color = System.Drawing.ColorTranslator.ToOle(System.Drawing.Color.RoyalBlue);
AxlEx.Cells[9, i] = dataGrid.Columns[i - 1].Header;
}
当谈到用行填充细胞时,我已尝试了许多尝试来使其正常工作
for (int i = 0; i < dataGrid.Items.Count; i++)
{
DataRowView aux = (DataRowView)dataGrid.Items[i];
for (int j = 0; j < aux.Row.ItemArray.Length; j++)
{
//Console.WriteLine(string.Format("{0}-{1}", j, aux.Row.ItemArray[j]));
AxlEx.Cells[i + 10, j + 1] = aux.Row.ItemArray[j];
}
}
抛出了类型不匹配的System.InvalidCast异常的例外 这很明显......但我不知道如何转换,这里也适合 关于SO的主题没有一个我可以理解的例子来改变我的代码。
在我这之前:
for (int i = 0; i < dataGrid.Items.Count; i++)
{
for (int j = 0; j < dataGrid.Columns.Count; j++)
{
AxlEx.Cells[i + 10, j + 1] = dataRow.Row.ItemArray[j].ToString();
}
}
如果我参考
,那么它将用于1行DataRowView dataRow = (DataRowView)dataGrid.SelectedItem;
我怎样才能让它发挥作用?
答案 0 :(得分:1)
我不知道是否有必要调试您的代码。不过,我想展示我的工作代码,以便将数据从DataGrid
导出到MS Excel
:
最好将此工作从UI线程转移到ThreadPool
:
using Excel = Microsoft.Office.Interop.Excel;//add this library
Task.Run(() => {
// load excel, and create a new workbook
Excel.Application excelApp = new Excel.Application();
excelApp.Workbooks.Add();
// single worksheet
Excel._Worksheet workSheet = excelApp.ActiveSheet;
// column headings
for (int i = 0; i < YourDataTable.Columns.Count; i++)
{
workSheet.Cells[1, (i + 1)] = YourDataTable.Columns[i].ColumnName;
}
// rows
for (int i = 0; i < YourDataTable.Rows.Count; i++)
{
// to do: format datetime values before printing
for (int j = 0; j < YourDataTable.Columns.Count; j++)
{
workSheet.Cells[(i + 2), (j + 1)] = YourDataTable.Rows[i][j];
}
}
excelApp.Visible = true;
});
答案 1 :(得分:1)
我发现了问题......
for (int i = 0; i < dataGrid.Items.Count-1; i++)
{
DataRowView aux = (DataRowView)dataGrid.Items[i];
for (int j = 0; j < aux.Row.ItemArray.Length; j++)
{
//Console.WriteLine(string.Format("{0}-{1}", j, aux.Row.ItemArray[j]));
AxlEx.Cells[i + 10, j + 1] = aux.Row.ItemArray[j];
}
}
我必须减去(dataGrid.Items.Count-1),因为dataGrid中还有一个空行似乎导致了问题。 可能是由于NULL字段返回值??? datagrid