机房重构之导出excel
来源:互联网 发布:java字符串截取前几位 编辑:程序博客网 时间:2024/06/05 14:42
机房重构现在遇到了Excel导出的问题,从网上找了好多解决办法。不得不说网上的大神实在是太多了。试了好几个方法,后来挑了一个对我来说错误率最小的,现在给大家总结一下。
方法一
这种方法,不需要我们添加任何服务引用,通过代码来达到“将DataGridView中的数据导出到Excel表中”的目的,简单粗暴!不过我用这种方法的时候总是报错,整的我整个人都不好了
Public Function ExportExcel(ByVal gvw As DataGridView) As Boolean '导出到Excel函数 Try If gvw.Rows.Count <= 0 Then '判断记录数,如果没有记录就退出 MessageBox.Show("没有记录可以导出", "没有可以导出的项目", MessageBoxButtons.OK, MessageBoxIcon.Information) Return False Else '如果有记录就导出到Excel Dim objCreateExcel As Object Dim objAddExcel As Object objCreateExcel = CreateObject("Excel.Application") '创建Excel对象 objAddExcel = objCreateExcel.workbooks.add() Dim intTitle As Integer Dim intRow As Integer Dim intColumn As Integer '定义循环变量,行列变量 '把表头写入Excel For intTitle = 0 To gvw.Columns.Count - 1 objAddExcel.worksheets(1).cells(1, intTitle + 1) = gvw.Columns(intTitle).HeaderCell.Value Next '用循环添加数据 For intRow = 0 To gvw.Rows.Count - 1 '行循环 For intColumn = 0 To gvw.Columns.Count - 1 '列循环 objAddExcel.worksheets(1).cells(intRow + 2, intColumn + 1) = gvw.Item(intColumn, intRow).Value.ToString Next Next objAddExcel.worksheets(1).Cells.EntireColumn.AutoFit() '自动调整Excel列 objCreateExcel.visible = True '设置Excel可见作为Excel工作表名称 objAddExcel = Nothing '释放资源 objCreateExcel = Nothing '释放资源 End If Return True Catch ex As Exception '错误处理 MessageBox.Show(Err.Description.ToString, "错误", MessageBoxButtons.OK, MessageBoxIcon.Error) '出错提示 Return False End Try End Function</span> 使用时: Private Sub btnLead_Click(sender As Object, e As EventArgs) Handles btnLead.Click Call ExportExcel(DataGridView1) End Sub
方法二
首先,我们要先添加一个模块(将DataGridView中的数据导出到Excel表中这个方法,经常用到。添加到模块中,以后用的时候,直接调用模块即可。)然后添加服务引用 ,添加引用的时候如果找不到图片里的引用,还可以用代码来添加
代码添加引用
Imports Microsoft.Office.Interop
实现代码
Imports Microsoft.Office.Interop Module ImportToExcel Public Function ImportToExcel(ByVal gvw As DataGridView) As Boolean '导出到Excel函数 '建立Excel连接 Dim myExcel As New Microsoft.Office.Interop.Excel.Application() myExcel.Application.Workbooks.Add(True) myExcel.Visible = True '定义循环变量,行列变量 Dim intRow As Integer Dim intColumn As Integer Dim intTitle As Integer '添加表头 For intTitle = 0 To gvw.ColumnCount - 1 myExcel.Cells(1, intTitle + 1) = gvw.Columns(intTitle).HeaderText Next intTitle '通过循环来添加控件中的数据到表格中 For intRow = 0 To gvw.RowCount - 1 For intColumn = 0 To gvw.ColumnCount - 1 '由于第一行是表头,所以添加数据时从第二行开始 myExcel.Cells(intRow + 2, intColumn + 1) = gvw(intColumn, intRow).Value.ToString Next intColumn Next intRow Return True '添加完毕,返回true End Function End Module</span> 调用时Call ImportToExcel.ImportToExcel(DataGridView1)
方法三
用NPOI将DataGridView中需要的列导出为Excel
一.首先从网上下载NPOI.dll。
二. 在U层添加引用,添加NPOI.dll文件。或直接将文件放到U层的bin\Debug文件夹下。
三. 接下来,就是代码部分。
Imports NPOI.HSSF.UserModel 'HSSF是Microsoft Excel 97-2003 格式读写库 Imports NPOI.SS.UserModel 'Excel公用接口及Excel公式计算引擎 Imports System.IO '提供允许读写文件和数据流的类 Public Class ExportExcel ''' <summary> ''' 导出为Excel ''' </summary> ''' <param name="dgv"></param>参数为DataGridView ''' <remarks></remarks> Public Shared Sub ExportExcel(ByVal dgv As System.Windows.Forms.DataGridView) Dim workbook As New HSSFWorkbook '工作簿 Dim sheet As HSSFSheet '工作表 Dim excelrow As HSSFRow '行集 Dim i As Integer '列的循环变量 Dim m As Integer '行的循环变量 Dim n As Integer '列的循环变量 Dim saveDialog As Windows.Forms.SaveFileDialog '保存文件的对话框 Dim ms As MemoryStream '内存中的数据流 Dim fs As FileStream '文件流 Dim filename As String '保存时的文件名称 '如果DataGridView中没有数据,则不导出Excel If dgv.Rows.Count = 0 Then MsgBox("无法导出为Excel!", MsgBoxStyle.Exclamation, "温馨提示") Return End If sheet = workbook.CreateSheet '在工作簿中创建表 excelrow = sheet.CreateRow(0) '在工作表中创建标题行Row(0) '添加每列列标题 For i = 0 To dgv.Columns.Count - 1 '将可见的列的标题写到单元格中(如果某列不可见,那么会在导出的Excel中空出这列) If dgv.Columns(i).Visible = True Then excelrow.CreateCell(i).SetCellValue(dgv.Columns(i).HeaderText) End If Next '添加其他行和列 For m = 1 To dgv.Rows.Count excelrow = sheet.CreateRow(m) '每遍历一行,则在sheet中创建一行 For n = 0 To dgv.Columns.Count - 1 '遍历每一行中的所有列 '如果该列可见,则导出该列单元格的值 If dgv.Columns(n).Visible = True Then excelrow.CreateCell(n).SetCellValue(dgv.Rows(m - 1).Cells(n).Value.ToString) End If '如果该列不可见,则将该列设置为隐藏 If dgv.Columns(n).Visible = False Then sheet.SetColumnHidden(n, 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 Sub End Class 调用: Private Sub btnExportExcel_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnExportExcel.Click '当DataGridView中有记录时 If dtgrdRecord.Columns.Count <> 0 Then '设置不可见的列 dtgrdRecord.Columns(4).Visible = False End If ExportExcel.ExportExcel(dtgrdRecord) End Sub
有时候,任何事情的解决并不是只有一种方法.多多的探索,能开阔我们的视野。
总有一种方法适合你
小助手:DataGridView控件使用大全
0 0
- 重构机房之“导出EXCEL异常”
- 机房重构之导出Excel表
- 机房重构之导出excel
- 【机房重构】导出Excel
- 机房重构 导出Excel
- 机房重构—导出Excel
- 【C#】导出excel表<机房重构>
- 【机房个人重构】导出Excel
- 【机房重构】C#导出到Excel
- 【机房重构】--DatagridView导出Excel
- 【机房重构】导出到Excel
- 机房重构--导出Excel表格
- 【机房重构】导出Excel表
- 机房重构导出Excel--C#版
- 机房之导出Excel
- VB.NET之旅-机房收费系统个人重构DatagridView导出数据到Excel
- 【VB.NET机房重构】DataGridView导出Excel
- 【机房重构】——DataGridView导出Excel
- c++第三次实验-1
- c++定点设置小数点位数
- c++类的构造函数类型介绍及其特点
- Java编码规范
- c++第3次上机-2
- 机房重构之导出excel
- Java各种对象理解(转)
- 输出1-100之间的奇数
- hihocoder 1259 (数位DP)
- C++如何实现单例模式
- [BZOJ2186][Sdoi2008]沙拉公主的困惑
- 递归搜索之朋友配对数
- leetcode 121. Best Time to Buy and Sell Stock-股市交易
- 在Myeclipse 中导入java web项目出现JRE System Library(unbound)和Server Library(unbound)解决方法