机房重构之导出Excel表
来源:互联网 发布:多个list转json 编辑:程序博客网 时间:2024/06/05 22:51
在导出excel表的时候,先后尝试了两种方法。第一种方法是添加Microsoft.Office.Interop的引用。第二种方法是用了第三方控件NPOI。下面就介绍一下我的excel之旅。
方法一、添加Interop引用
功能:把datagrid导出为excelimports microsoft.office.interopModule exportexcel Public Function exportexcel(ByVal dtgrd As datagridview) As Boolean '把datagrid导出为excel 判断datagrid是否为空() Try If dtgrd.rows.count = 0 Then msgbox("没有要导出的记录!", messageboxbuttons.ok, messageboxicon.exclamation) Return False Exit Function End If '建立excel连接 Dim excelapp As New microsoft.office.interop.excel.application() 'excelapp.application.workbooks.add(true) excelapp.application.workbooks.add(True) excelapp.visible = True '定义循环变量 行列变量 Dim introw As Integer Dim intcolumn As Integer Dim inttitle As Integer '添加表头 For inttitle = 0 To dtgrd.columncount - 1 excelapp.cells(1, inttitle + 1) = dtgrd.columns(inttitle).headertext Next inttitle '通过循环把datagrid里的数据添加到excel表中 For introw = 0 To dtgrd.rowcount - 1 For intcolumn = 0 To dtgrd.columncount - 1 'excel第一行是表头所以从第二行开始,第一行的默认序号为1 ,而datagrid为0 excelapp.cells(introw + 2, intcolumn + 1) = dtgrd(introw, intcolumn).value.tostring Next intcolumn Next introw Return True '添加完毕,返回true Catch ex As exception '错误处理 msgbox("未知错误", messageboxbuttons.ok, messageboxicon.exclamation) End Try End Function
遇到的问题
我其实挺喜欢这个方法的,添加一个引用,代码也相对简单,但是老报错。错误是这样的:
在网上找了好多解法,尝试过更改引用interop的这里写代码片
属性,但是无果。网上大多说可能是因为之前下载过其他版本的office或wps没有卸载干净,我也找过注册表没有发现其他版本的offic,网上有人建议重装系统。感觉重装系统有点麻烦,于是就尝试另一种方法。
第二种方法
使用第三方控件NPOI.NPOI 是 POI 项目的 .NET 版本。POI是一个开源的Java读写Excel、WORD等微软OLE2组件文档的项目。
NPOI不仅支持excel还支持word,不仅支持到处excel还可以导入。
步骤:
一、下载一个NPOI.DLL
二、把这个DLL放到Ui层的bin 的debug下。
三、在代码中做好引用。
Imports NPOI.HSSF.UserModel 'hssf是microsoft excel 97—2003 格式读写库Imports NPOI.SS.UserModel 'excel 公用接口及excel公式计算引擎Imports System.IO '提供允许读写文件和数据流的类Module exportexcel Public Sub ExportExcel(ByVal dtgrd As DataGridView) Dim workBook As New HSSFWorkbook '工作薄 Dim sheet As HSSFSheet '工作表 Dim excelRow As HSSFRow '行集 Dim intCol As Integer '列的循环变量 Dim intRow As Integer '行的循环变量 Dim saveDialog As Windows.Forms.SaveFileDialog '保存文件的对话框 Dim ms As MemoryStream '内存中的数据流 Dim fs As FileStream '文件流 Dim fileName As String '保存时的文件名称 '如果datagridview里没有数据,则不导出excel If dtgrd.Rows.Count = 0 Then MsgBox("无法导出Excel!", MsgBoxStyle.Exclamation, "温馨提示") Return '将执行过程调回到function,sub,get等开始的地方 End If sheet = workBook.CreateSheet '在工作簿中创建表 excelRow = sheet.CreateRow(0) '在工作表中穿件标题行Row(0) '添加每列列标题 For intCol = 0 To dtgrd.Columns.Count - 1 '将可见的列的标题写到单元格中(如果某列不可见,那么会在导出的Excel中空出这列) If dtgrd.Columns(intCol).Visible = True Then excelRow.CreateCell(intCol).SetCellValue(dtgrd.Columns(intCol).HeaderText) End If Next '添加除标题外的其他行和列 For intRow = 1 To dtgrd.Rows.Count excelRow = sheet.CreateRow(intRow) For intCol = 0 To dtgrd.Columns.Count - 1 '如果该列可见,则导出该列单元格的值 If dtgrd.Columns(intCol).Visible = True Then excelRow.CreateCell(intCol).SetCellValue(dtgrd.Rows(intRow - 1).Cells(intCol).Value.ToString) Else sheet.SetColumnHidden(intCol, True) End If Next Next saveDialog = New Windows.Forms.SaveFileDialog '实例化保存对话框 saveDialog.DefaultExt = "xls" '设置默认文件扩展名 saveDialog.Filter = "Excel文件|*.xls" '文件类型 saveDialog.ShowDialog() '弹出保存文件对话框 fileName = saveDialog.FileName '将对话框中输入的文件名赋给filename ms = New MemoryStream() fs = New FileStream(fileName, FileMode.Create) workBook.Write(ms) '写入数据 workBook.Write(fs) fs.Close() '关闭文件 workBook = Nothing ms.Close() '释放数据流 ms.Dispose() End SubEnd Module
小结
问题是前进的动力。用的第一个方法的时候就没想过再去尝试另一种方法,但是问题却给了我一个发现和开阔思路的机会。另外,感觉第三方控件挺好的,开发一种方法可以被许多人在不同的程序中调用,真正的实现了解耦和面向对象。
0 0
- 机房重构之导出Excel表
- 重构机房之“导出EXCEL异常”
- 机房重构之导出excel
- 【C#】导出excel表<机房重构>
- 【机房重构】导出Excel表
- 【机房重构】导出Excel
- 机房重构 导出Excel
- 机房重构—导出Excel
- 【机房个人重构】导出Excel
- 【机房重构】C#导出到Excel
- 【机房重构】--DatagridView导出Excel
- 【机房重构】导出到Excel
- 机房重构--导出Excel表格
- 机房重构导出Excel--C#版
- 机房之导出Excel
- VB.NET之旅-机房收费系统个人重构DatagridView导出数据到Excel
- 机房收费系统之导出excel表
- 【VB.NET机房重构】DataGridView导出Excel
- Memory和CPU性能分析总结
- 第三十二篇:关于opencv中图像的通道的问题
- Problem B
- 解决在weblogic(可能与之无关)下jsp通过post传递中文内容表单乱码问题
- AppInterface,一套Android与H5的混合开发框架
- 机房重构之导出Excel表
- 自动化测试,javasript遍历JSON对象及XML对象
- BZOJ4390Max Flow
- codeforces 630 I Parking Lot (规律&&组合)
- 虚拟机的三种网络模式
- 第四周项目5.3-用递归方法求解
- kafka入门
- 寄生组合继承
- IT行业2016研究分析