Excel的导入导出以往都是使用Office提供的Excel Library(COM组件)实现的,此方法有三个缺点!
第一,运行环境必须装有指定版本的Excel
第二,运行环境中指定版本的Excel组件必须正常在操作系统中注册(使用COM组件是要注册的),也就是说,如果机器上虽然装了Excel,但是装的是阉割版、绿色版等奇怪的版本就不行了
第三,效率低下,常要注意GC,时常会因为操作不当造成开启一大堆Excel.exe进程占用过高系统资源(这些Excel.exe甚至不会随着你的应用程序的关闭而关闭)
所以我采取组件Aspose.Cells 5.3.0.1 此组件与Office套件脱离,也就是说,运行环境没有安装Excel的情况下也能正常运行。缺点就是这个是个收费组件 我现在使用的是破解版
导入Excel
/// <summary> /// 导入excel数据并显示 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void btnImportExcel_Click(object sender, EventArgs e) { try { OpenFileDialog openFileDialog = new OpenFileDialog(); if (openFileDialog.ShowDialog() == DialogResult.OK) { //清空表格控件 dgvExcel.Rows.Clear(); dgvExcel.Columns.Clear(); //工作簿 Workbook workbook = new Workbook(openFileDialog.FileName); //表格 Cells cells = workbook.Worksheets[0].Cells; //增加列数 for (int i = 0; i < cells.MaxDataColumn + 1; i++) { DataGridViewTextBoxColumn dataGridViewTextBoxColumn = new DataGridViewTextBoxColumn(); dgvExcel.Columns.Add(dataGridViewTextBoxColumn); } //增加行数 dgvExcel.Rows.Add(cells.MaxDataRow + 1); for (int i = 0; i < cells.MaxDataRow + 1; i++) { for (int j = 0; j < cells.MaxDataColumn + 1; j++) { //将数据写入表格控件中 dgvExcel.Rows[i].Cells[j].Value = cells[i, j].StringValue.Trim(); string s = cells[i, j].StringValue.Trim(); //一行行的读取数据,插入数据库的代码也可以在这里写 } } } } catch (Exception EX) { MessageBox.Show(EX.Message); } }
导出Excel
/// <summary> /// 导出数据到Excel /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void btnExportExcel_Click(object sender, EventArgs e) { try { SaveFileDialog saveFileDialog = new SaveFileDialog(); saveFileDialog.Filter = "(表格文件).xls|xls"; saveFileDialog.DefaultExt = ".xls"; if (saveFileDialog.ShowDialog() == DialogResult.OK) { Workbook workbook = new Workbook(); //工作簿 Worksheet worksheet = workbook.Worksheets[0]; //工作表 Style style = workbook.Styles[workbook.Styles.Add()]; //新增样式 //文本设置 style.HorizontalAlignment = TextAlignmentType.Center; //文字左右居中 style.VerticalAlignment = TextAlignmentType.Center; //文字上下居中 style.Font.Color = Color.Red; //字体颜色 style.Font.Name = "宋体"; //文字字体 style.Font.Size = 12; //文字大小 style.Font.IsBold = true; //粗体 style.BackgroundColor = Color.Yellow; //背景颜色 //边框样式 style.Borders[BorderType.LeftBorder].LineStyle = CellBorderType.Thin; //左边框 style.Borders[BorderType.RightBorder].LineStyle = CellBorderType.Thin; //右边框 style.Borders[BorderType.TopBorder].LineStyle = CellBorderType.Thin; //上边框 style.Borders[BorderType.BottomBorder].LineStyle = CellBorderType.Thin; //下边框 //style.IsTextWrapped = true; //单元格内容自动换行 //worksheet.AutoFitColumns(); //自适应列表宽度 for (int i = 0; i < dgvExcel.Rows.Count; i++) { for (int j = 0; j < dgvExcel.Columns.Count; j++) { worksheet.Cells[i, j].SetStyle(style); //增加样式 worksheet.Cells.SetRowHeight(i, 20); //设置列高 worksheet.Cells.SetColumnWidth(i, 15); //设置行宽 worksheet.Cells[i, j].PutValue(dgvExcel.Rows[i].Cells[j].Value); } } //worksheet.Cells.Merge(1, 1, 1, 2);//合并单元格 1表示行号,2表示列号,3表示合并的行号,4表示合并的列数; workbook.Save(saveFileDialog.FileName); } } catch (Exception EX) { MessageBox.Show(EX.Message); } } }
源码已上传