除ID列外,数据已成功从网格视图导出到Excel

本文关键字:视图 网格 Excel 成功 列外 ID 数据 | 更新日期: 2023-09-27 18:28:11

这是我的代码。。。

Microsoft.Office.Interop.Excel.Application Excel = new Microsoft.Office.Interop.Excel.Application();
Workbook wb = Excel.Workbooks.Add(XlSheetType.xlWorksheet);
Worksheet ws = (Worksheet)Excel.ActiveSheet;
Excel.Visible = true;
ws.Cells[1, 1] = "ID";
ws.Cells[1, 2] = "Name";
ws.Cells[1, 3] = "Detail";
ws.Cells[1, 4] = "Category";
ws.Cells[1, 5] = "Brand";
ws.Cells[1, 6] = "In Stock";
ws.Cells[1, 7] = "Price";
ws.Cells[1, 8] = "Total";
for (int i = 2; i <= dgDetail.Rows.Count; i++)
{
    for (int j = 2; j <= 8; j++)
    {
        ws.Cells[i, j] = dgDetail.Rows[i - 2].Cells[j - 1].Value;
    }
}

除ID列外,数据已成功从网格视图导出到Excel

Excel有基于1,1的数组,第一个单元格是1,1,所以当你把"ID"放在这个单元格中时,你做得很好。你的网格视图看起来是零基础的。1) 您从第0行开始导出dgDetail,我认为这是正确的,但您可以跳过最后一行——您可以稍微重写代码以查看它:

for (int i = 0; i <= dgDetail.Rows.Count-2; i++) {
        dgDetail.Rows[i]; //pseudocode
}

也许这是你计划的方式,但你没有导出dgDetail.row.Count-1行

2)

for (int j = 2; j <= 8; j++) {
    ws.Cells[i, j] = dgDetail.Rows[i - 2].Cells[j - 1].Value;
}

在这里,您需要将j的第一个值更改为1,因为您从第二列开始,否则:

ws.Cells[i, 2] = dgDetail.Rows[i - 2].Cells[2 - 1].Value;

我想你只是对基于Excel1,1的数组有点困惑,

此外,如果您有大的导出,最好在一个操作中写入整个数组:

        Range range = worksheet.Range[worksheet.Cells[1, 1], worksheet.Cells[2, 2]];
        range.Value = new object[2, 2] { { 1, 2 }, { 3, 4 } };