Datagridview学习心得之三Datagridview转成EXCEL

      作为数据显示的一个控件datagridview,经常有用户问我能不能直接将显示出来的数据转到EXCEL里面使用,以前我常用的方式就是先转成水晶报表,然后再利用水晶报表的转换功能将数据转到EXCEL里面,或者还有一种方式,就是在程序里引用EXCEL,然后直接对EXCEL文件操作,这种方式使用起来比较灵活,但是也比较麻烦,一是要添加对EXCEL文件的引用,二是正因为灵活,所以也比较复杂,中间控制起来比较不方便。通过一段时间的学习,我找到了另一种方式,即以文件流的方式直接写入到一个EXCEL文件里。我们先看一段代码:

Public SubGv_ExportToExcel(ByVal _Gr As DataGridView, ByVal_File_path As String)

        '直接将DATAGRIDVIEW 转为EXCEL文件,参数一、需要转出的datagridview,参数二、转出的文件路径名称.

 Dim row_num As Integer = _Gr.Rows.Count- 1 '得到总行数

 Dim cell_num As Integer = _Gr.ColumnCount- 1 '得到总列数

Dim i, j AsInteger

 Dim myStream As IO.Stream

 Dim sw As IO.StreamWriter

 Dim v_Title, v_ValuesAs String

 Dim fs As System.IO.FileStream = Nothing

         If IO.File.Exists(_File_path)Then

     ‘判断输出的文件是否已被打开

           Try

 fs = New System.IO.FileStream(_File_path,IO.FileMode.Open, IO.FileAccess.ReadWrite, IO.FileShare.Write)

            If Not fs.CanWrite Then  ‘文件不能被写入,说明文件已经被占用

                   MsgBox("报表文件已经打开,请先关闭!!", MsgBoxStyle.OkOnly, "警告")

                    ExitSub

                End If

            Catchex As Exception

                MsgBox("报表文件已经打开,请先关闭!!", MsgBoxStyle.OkOnly, "警告")

                ExitSub

            Finally

                Iffs IsNot NothingThen

                    fs.Close()

                    fs.Dispose()

                EndIf

            EndTry

            IO.File.Delete(_File_path)

        End If

         myStream = IO.File.Open(_File_path, IO.FileMode.OpenOrCreate)

            ‘开启文件,如果文件不在存在则建立该文件.

        sw = NewIO.StreamWriter(myStream, System.Text.Encoding.GetEncoding(-0))

         Try

            v_Title = ""

             For i = 0 To cell_num 获取DATAGRIDVIEW的列表题做为EXCEL的标题

                v_Title += _Gr.Columns(i).HeaderText

                v_Title += vbTab

            Next

             sw.WriteLine(v_Title)  ‘写入EXCEL列标题

             Fori = 0 To row_num

                v_Values = ""

                Forj = 0 To cell_num  ‘获取每一行的数据

                    v_Values += _Gr.Rows(i).Cells(j).Value.ToString

                    v_Values += vbTab

                Next

                sw.WriteLine(v_Values) ‘写入数据到EXCEL

            Next

            sw.Close()

            myStream.Close()

 

            If IO.File.Exists(_File_path)Then‘最后打开EXCEL文件

                System.Diagnostics.Process.Start(_File_path)

            EndIf

         Catch ex As Exception

            MsgBox("转EXCEL出错,代码为!!" + ex.ToString, MsgBoxStyle.OkOnly,"警告")

            ExitSub

        Finally

            sw.Close()

            myStream.Close()

        End Try

     End Sub

 

这样一段小代码,基本就可以解决所有DATAGRIDVIEW转EXCEL的问题了,你只需要在DATAGRIDVIEW控件上增加一个右键菜单转EXCEL,再调用这一段函数,就可以将任意一个DATAGRIDVIEW转化成EXCEL文件了,相比起来,这种方式比前两种方式更直接和好用。

posted @ 2010-12-25 21:10  峰再起时  阅读(605)  评论(0编辑  收藏  举报