【问题标题】:How to append datagridview to excel file using c#如何使用c#将datagridview附加到excel文件
【发布时间】:2014-08-19 16:54:25
【问题描述】:

我正在尝试将我的 datagridview 内容导出到存在于application.startuppath 中的 excel 文件中。我面临的问题是,每当我将网格内容导出到 Excel 时,它都会覆盖以前的内容。我想做的是追加到我的 excel 文件中,而不是覆盖我现有的内容。

这是我的代码:

Microsoft.Office.Interop.Excel._Application app = new Microsoft.Office.Interop.Excel.Application();     
Microsoft.Office.Interop.Excel._Workbook workbook = app.Workbooks.Open(Application.StartupPath+"excelfile.xls");
Microsoft.Office.Interop.Excel._Worksheet worksheet = null;                
app.Visible = false;
worksheet = workbook.Sheets["Sheet1"];
worksheet = workbook.ActiveSheet;
for (int i = 0; i < dataGridView1.Rows.Count - 1; i++)
 {
   for (int j = 0; j < dataGridView1.Columns.Count; j++)
    {
     if (dataGridView1.Rows[i].Cells[j].Value != null)
      worksheet.Cells[i + 2, j + 1] = dataGridView1.Rows[i].Cells[j].Value.ToString();
     else
      worksheet.Cells[i + 2, j + 1] = "";
    }
 }
workbook.Close(SaveChanges: true);
app.Quit();

编辑: 更新代码:感谢@Alex Bell

int _offset = worksheet.UsedRange.Rows.Count;
for (int i = 0; i < dataGridView1.Rows.Count - 1; i++)
 {
  for (int j = 1; j < dataGridView1.Columns.Count; j++)
   {
    if (dataGridView1.Rows[i].Cells[j].Value != null)
      worksheet.Cells[i + 2 + _offset, j + 1] = dataGridView1.Rows[i].Cells[j].Value.ToString();
    else
      worksheet.Cells[i + 2 + _offset, j + 1] = "";
   }
 }

解决了我添加数据的问题,但另一个小问题是每次更新时都会在旧行和新行之间留下一个空白行。

【问题讨论】:

标签: c# datagridview export-to-excel excel-interop


【解决方案1】:

根据您的情况,您可以在循环中使用 int _offset = worksheet.UsedRange.Rows.Count 作为行偏移量:

for (int i = 0; i < dataGridView1.Rows.Count - 1; i++) { for (int j = 0; j < dataGridView1.Columns.Count; j++) { if (dataGridView1.Rows[i].Cells[j].Value != null) worksheet.Cells[i + 2 + _offset, j + 1] = dataGridView1.Rows[i].Cells[j].Value.ToString(); else worksheet.Cells[i + 2 + _offset, j + 1] = ""; } }

希望这会有所帮助。问候,

【讨论】:

  • 你的代码帮助了我。谢谢。但是一个小问题。每次我将数据附加到文件时,它都会在前一行和新行之间留下 1 个空白行。知道如何解决这个问题吗?
  • 我很高兴代码很有帮助,如果您将问题标记为已回答,我们将不胜感激。请接受答案,如果您有更多问题,请在单独的帖子中提出。谢谢和问候,
猜你喜欢
  • 1970-01-01
  • 2012-06-27
  • 1970-01-01
  • 2013-01-24
  • 2019-10-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多