利用GemBox.ExcelLite.dll脱离Excel环境,把DataGridView数据导出到Excel文件。
public void DataGridView2Excel_GemBox(DataGridView dgv) { #region 导出前判断 //行数必须大于0 if (dgv.Rows.Count <= 0) { MessageBox.Show("没有数据可供导出!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information); return; } //列数必须大于0 if(dgv.Columns.Count<=0) { MessageBox.Show("没有数据可供导出!","提示",MessageBoxButtons.OK,MessageBoxIcon.Information); return; } //行数不可以大于65536 if(dgv.Rows.Count>65536) { MessageBox.Show("数据记录数太多(最多不能超过65536条),不能保存!","提示",MessageBoxButtons.OK,MessageBoxIcon.Information); return; } //列数不可以大于256 if(dgv.Columns.Count>256) { MessageBox.Show("数据记录数太多(最多不能超过256列),不能保存!","提示",MessageBoxButtons.OK,MessageBoxIcon.Information); return; } #endregion SaveFileDialog dlg = new SaveFileDialog(); dlg.Filter = "Excel files (*.xls)|*.xls"; dlg.FilterIndex = 0; dlg.RestoreDirectory = true; dlg.CreatePrompt = false; dlg.Title = "导出为Excel文件"; if (dlg.ShowDialog() == DialogResult.OK) { ExcelFile excelFile = new ExcelFile(); ExcelWorksheet sheet = excelFile.Worksheets.Add("Account"); try { //向Excel中写入表格的表头 for (int i = 0; i < dgv.Columns.Count; i++) { sheet.Cells[0, i].Value = dgv.Columns[i].HeaderText; } //向Excel中写入表格的数据 for (int i = 0; i < dgv.Rows.Count; i++) { DataGridViewRow row = dgv.Rows[i]; for (int j = 0; j < row.Cells.Count; j++) { sheet.Cells[i + 1, j].Value = row.Cells[j].Value; } } excelFile.SaveXls(dlg.FileName); } catch (Exception ex) { MessageBox.Show(ex.Message, "警告", MessageBoxButtons.OK, MessageBoxIcon.Warning); return; } MessageBox.Show(dlg.FileName + "\n\n导出完毕!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information); } }
Excel 插件下载地址:http://pan.baidu.com/s/1hqgiTc4