C# 数据已成功从gridview导出到Excel,ID列除外

C# 数据已成功从gridview导出到Excel,ID列除外,c#,visual-studio-2010,excel-2010,C#,Visual Studio 2010,Excel 2010,这是我的密码 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

这是我的密码

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;
    }
}
Microsoft.Office.Interop.Excel.Application Excel=new Microsoft.Office.Interop.Excel.Application();
工作簿wb=Excel.Workbooks.Add(XlSheetType.xlWorksheet);
工作表ws=(工作表)Excel.ActiveSheet;
Excel.Visible=true;
ws.Cells[1,1]=“ID”;
ws.Cells[1,2]=“Name”;
ws.Cells[1,3]=“细节”;
ws.Cells[1,4]=“类别”;
ws.Cells[1,5]=“品牌”;
ws.Cells[1,6]=“库存中”;
ws.Cells[1,7]=“价格”;
ws.Cells[1,8]=“总计”;

对于(int i=2;iExcel有基于1,1的数组,第一个单元格是1,1,因此在将“ID”添加到此单元格时做得很好。gridview看起来是基于零的。 1) 您开始从第0行导出dgDetail,我认为这是正确的,但您跳过了最后一行-您可以稍微重写代码以查看它:

for (int i = 0; i <= dgDetail.Rows.Count-2; i++) {
        dgDetail.Rows[i]; //pseudocode
}
我猜你只是被基于excel 1,1的数组弄糊涂了

此外,如果导出量很大,最好在一次操作中写入整个数组:

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

阿历克斯。。我尝试了以上所有的建议,但找不到任何方法来排序,这是我第一次使用excel。这是我的客户要求。我找到了一个解决方案我知道这不是最好的方法。。我在数据库中的ID列之前添加了一个额外的列,它工作得很好,但我想学习如何解决这个问题,这很简单。正如我所说,你的头衔指数是从1到8。在从索引2到索引8的循环中。这就是您丢失ID列的原因。好吧,我理解,但将其设置为2到8的原因是,如果我写1而不是2,则会在ws.Cells[i,j]或dgdail.Rows[i-2].Cells[j-1]中出现索引超出范围的错误。Woohoo thnx Alex u告诉我这里是(int j=1;j)的解决方案
ws.Cells[i, 2] = dgDetail.Rows[i - 2].Cells[2 - 1].Value;
        Range range = worksheet.Range[worksheet.Cells[1, 1], worksheet.Cells[2, 2]];
        range.Value = new object[2, 2] { { 1, 2 }, { 3, 4 } };