前言
刚刚需要用到这个功能的时候,完全是去百度的,并且是直接百度功能,对于是用的什么函数啊,什么方法啊,根本就不知道,完全都是照着誊下来的。
所谓,欠下的早晚要还的,现在终于到了偿还的时候了。
正文
在第一次机房重构时导出Excel完全就是抄的,这次依旧,所以一直感觉很是神秘的一个功能。
经过查找资料之后,突然就豁然开朗了。
首先,现在U层添加引用,选择程序集中扩展中的Microsoft.Office.Interop.Excel
在这里我有一个疑问。
在添加引用时其中有程序集和COM,程序集中又分了框架和扩展,我不懂的是:
框架、扩展、COM中的类型库,三者中分别包含的内容有什么区别?每次添加引用时总不知道该去哪找。
回到正题,添加引用之后在U层添加代码
Imports Microsoft.Office.Interop.Excel
我们在这里将这个功能写成模块放在U层中,以供重复使用。
Module Exportexcel
Public Function ExportExcel(ByVal dgv As DataGridView) As Boolean
' 实例化一个excel,创建一个工作簿,工作簿可见
Dim myExcel As New Microsoft.Office.Interop.Excel.Application
' Application代表整个Excel的应用程序
myExcel.Application.Workbooks.Add(True)
' 返回一个工作簿的集合表示所有打开的工作簿
myExcel.Visible = True
' 工作簿可见
Dim i, j As New Integer
' 因为在DataGridView中表头内容和表格中的内容获取所用的函数不同,所以需要分用两个循环向Excel中填写数据
' 利用循环,填写表头
For i = 0 To dgv.ColumnCount - 1
myExcel.Cells(1, i + 1) = dgv.Columns(i).HeaderText
Next
' 利用嵌套循环,将datagridview内容放到导出为excel表格
' 这里有两个循环i表示行循环,j为列循环,Excel先从行开始循环,DataGridView需要从列开始循环
' DataGridView中除去表头,表格的坐标从(0,0)开始,而Excel中单元格表示从(1,1)开始。
For i = 0 To dgv.RowCount - 1
For j = 0 To dgv.ColumnCount - 1
myExcel.Cells(i + 2, j + 1) = dgv(j, i).Value.ToString
Next
Next
Return True
End Function
End Module
这里有几个需要注意的地方:
1.利用嵌套循环向Excel中填充数据时,i表示行,就表示列,Excel中从行开始循环,DataGridView中从列开始循环。
2.Excel中单元格的坐标从(1,1)为起始单元格,DataGridView中以(0,0)为起始单元格。
如果对于代码还有哪些不理解或者想进一步了解相关类和方法的话,可以参考相关文章或者与我交流
文章还有不足之处,欢迎指正。
总结
所谓好借好还,再接不难