繁体   English   中英

如何使用C#将datagridview附加到Excel文件

[英]How to append datagridview to excel file using c#

我正在尝试将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] = "";
   }
 }

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

根据您的情况,可以在循环中使用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] = ""; } }

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM