您好,欢迎访问一九零五行业门户网

C#_调用封装的一个类实现导出Excel表格的功能

前言
在大多数窗体中都有导出excel表格的功能,如果封装封装一个类,使用的时候直接调用这个类不是更方便?,这样还减少了代码的重复性,何乐而不为?
操作首先添加引用,在com中选中microsoft office 16.0 object library,和microsoft excel 16.0 object library。
添加命名空间:
using microsoft.office.interop.excel;//导出excelusing microsoft.office.core;using system.data.oledb;using system.windows.forms;
新建一个类并命名为outputexcel,代码如下:
public class outputexcel { //导出excel public void rexcel(string name, datagridview dgv) { //总可见行列数 int rowcount = dgv.rows.getrowcount(datagridviewelementstates.visible); int colcount = dgv.columns.getcolumncount(datagridviewelementstates.visible); //如果没有数据 if (dgv.rows.count == 0 || rowcount == 0) { messagebox.show("表中没有数据", "提示"); } else { //创建文件的路径 savefiledialog save = new savefiledialog(); save.filter = "excel files(*.xlsx)|*.xlsx"; save.title = "请选择要导出数据的位置"; save.filename = name + datetime.now.tolongdatestring(); if (save.showdialog() == dialogresult.ok) { string filename = save.filename; //创建excel对象 microsoft.office.interop.excel.application excel = new microsoft.office.interop.excel.application(); if (excel == null) { messagebox.show("excel无法启动", "提示"); return; } //创建工作薄 microsoft.office.interop.excel.workbook excelbook = excel.workbooks.add(true); microsoft.office.interop.excel.worksheet excelsheet = (microsoft.office.interop.excel.worksheet)excelbook.worksheets[1]; //生成字段名 int k = 0; for (int i = 0; i < dgv.columncount; i++) { if (dgv.columns[i].visible)//不导出隐藏列 { excel.cells[1, k + 1] = dgv.columns[i].headertext; k++; } } //填充数据 for (int i = 0; i < dgv.rowcount; i++) { k = 0; for (int j = 0; j < dgv.columncount; j++) { if (dgv.columns[j].visible)//不导出隐藏的列 { if (dgv[j, i].valuetype == typeof(string)) { excel.cells[i + 2, k + 1] = "" + dgv[j, i].value.tostring(); } else { excel.cells[i + 2, k + 1] = dgv[j, i].value.tostring(); } } k++; } } try { excelbook.saved = true; excelbook.savecopyas(filename); messagebox.show("导出成功!"); } catch { messagebox.show("导出文件失败,文件可能正在使用中", "提示"); } } } } }
当窗体需要使用此功能时,需要写上以下代码即可:
private void btnoutexcel_click(object sender, eventargs e) { outputexcel form1 = new outputexcel(); form1.rexcel("", datagridview1); }
相关文章:
【c#教程】c# 数据类型
mysql connector c/c++ 多线程封装
以上就是c#_调用封装的一个类实现导出excel表格的功能的详细内容。
其它类似信息

推荐信息