VB.NET导出Excel 轻松实现Excel的服务器与客户端交换 服务器不安装Office

说来VB.Net这个也是之前的一个项目中用到的。今天拿来总结下用途,项目需求,不让在服务器安装Office办公软件。这个也是煞费了一顿.

主要的思路就是 在导出的时候,利用DataTable做中间变量导出

下边这个是使用时候的代码 getData()方法是我获取的DataTable "defaultPickUpLocation" 是表的名字

    '導出Excel
    Protected Sub btnExport_Click(ByVal sender As Object,ByVal e As EventArgs) Handles btnExport.Click
        Dim dt As DataTable = getData()
        GridViewHelper.ExportToExcel(dt,"defaultPickUpLocation_")
    End Sub

下边接下来是导出的方法 GridView 是自定义的类文件

        Shared Sub ExportToExcel(ByVal dataTable As Data.DataTable,ByVal fileName As String)
            For Each daTarow As DaTarow In dataTable.Rows
                For i As Integer = 0 To daTarow.ItemArray.Count - 1
                    If Not Isdbnull(daTarow.Item(i)) Then
                        daTarow.Item(i) = removeHTMLTagat(CType(daTarow.Item(i),String))
                    End If
                Next
            Next
            Export2Excel(dataTable,fileName)

因为数据库中总有一些是Table的字节 现在要删除
        Private Shared Function removeHTMLTagat(ByVal HTML As String) As String
            Dim Codehtml() As keyvaluePair(Of String,String) = New keyvaluePair(Of String,String)() {
         New keyvaluePair(Of String,String)("<","<"),New keyvaluePair(Of String,String)(">",">"),String)(""," ")
         }
            For Each keyvaluePair As keyvaluePair(Of String,String) In Codehtml
                Dim regex As New Regex(keyvaluePair.Key)
                HTML = regex.Replace(HTML,keyvaluePair.Value)
            Next
            Dim aryReg() As String = New String() {
                      "<[^>]*>"}
            For Each pattern As String In aryReg
                Dim regex As New Regex(pattern)
                HTML = regex.Replace(HTML,"")
            Next
            Return HTML
        End Function


还有Export2Excel的具体导出Excel的方法

        Private Shared Sub Export2Excel(ByVal _dataTable As DataTable,ByVal _filename As String)
            Dim fileName = String.Format("{0}{1}.xls",_filename,DateTime.Now.ToString("yyMMddHHmmssffff"))
            Dim sNewFullFile = String.Format("{0}Downfiles/{1}",HttpContext.Current.Request.PhysicalApplicationPath,fileName)
            File.copy(String.Format("{0}format_files/{1}format.xls",_filename),sNewFullFile)
            Dim strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Persist Security Info=True;Data Source=" + sNewFullFile + ";Extended Properties='Excel 8.0;HDR=Yes;IMEX=0'"
            Dim conn = New OleDbConnection(strConn)
            Dim cmd As OleDbCommand = nothing
            Dim bRet = False
            conn.open()
            Dim insertDataStr = "INSERT INTO [Sheet1$] ("
            Dim insertValueStr = "values("
            For i As Integer = 0 To _dataTable.Columns.Count - 1
                insertDataStr = String.Format("{0} [{1}],",insertDataStr,_dataTable.Columns(i).ColumnName)
                insertValueStr = String.Format("{0}{1},insertValueStr,"?")
            Next
            insertValueStr = String.Format("{0})",insertValueStr.Trim(","c))
            insertDataStr = String.Format("{0}) {1}",insertDataStr.Trim(","c),insertValueStr)

            cmd = New OleDbCommand(insertDataStr,conn)
            For i As Integer = 0 To _dataTable.Columns.Count - 1
                cmd.Parameters.Add(i.ToString(),OleDbType.LongVarChar)
            Next
            For Each row As DaTarow In _dataTable.Rows
                For i As Integer = 0 To _dataTable.Columns.Count - 1
                    Dim value = row(_dataTable.Columns(i).ColumnName).ToString()
                    If value.Length > 100 Then
                        value = String.Format("{0}……",value.Substring(0,100))
                    End If

                    cmd.Parameters(i).Value = value
                Next
                cmd.ExecuteNonQuery()
            Next
            bRet = True

            cmd.dispose()
            conn.dispose()
            If bRet Then
                HttpContext.Current.Response.Redirect(String.Format("Downfiles/{0}",fileName))
            End If

        End Sub
现在就写了这个文件,等把导入再写。如有问题 请回复 祝君成功。

相关文章

Format[$] ( expr [ , fmt ] ) format 返回变体型 format$ 强...
VB6或者ASP 格式化时间为 MM/dd/yyyy 格式,竟然没有好的办...
在项目中添加如下代码:新建窗口来显示异常信息。 Namespace...
转了这一篇文章,原来一直想用C#做k3的插件开发,vb没有C#用...
Sub 分列() ‘以空格为分隔符,连续空格只算1个。对所选...
  窗体代码 1 Private Sub Text1_OLEDragDrop(Data As Dat...