DataTable輸出到Excel

來源:互聯網
上載者:User
Imports System.DataImports System.Data.OleDbImports System.IOImports System.Text''' <summary>''' DataTable的匯入匯出(CSV,XLS)''' </summary>Public NotInheritable Class Table#Region "Consts"    Private Const CsvConStr As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};Extended Properties='Text;{1}'"    Private Const XlsConStr As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};Extended Properties='Excel 8.0;HDR={1};IMEX=1'"    Private Const CsvSql As String = "Select * From [{0}.csv]"    Private Const XlsSql As String = "Select * From [Sheet1$]"    Private Shared chars() As Char = {vbCr, vbLf, vbTab, Chr(34), Chr(44)}    Public Shared Encod As Encoding = Encoding.GetEncoding("GB2312")#End Region#Region "Read"    ''' <summary>    ''' 讀取CSV檔案    ''' </summary>    ''' <param name="filename">CSV檔案路徑</param>    ''' <param name="HDR">是否有欄位標題</param>    ''' <returns>返回的DataTable</returns>    ''' <remarks></remarks>    Public Shared Function CsvRead(ByVal filename As String, Optional ByVal HDR As Boolean = True) As DataTable        Dim constr As String = String.Format(CsvConStr, Path.GetDirectoryName(filename), IIf(HDR, String.Empty, "HDR=no;"))        Dim con As New OleDbConnection(constr)        Dim Name As String = Path.GetFileNameWithoutExtension(filename)        Dim dt As New DataTable(Name)        Using da As New OleDbDataAdapter(String.Format(CsvSql, Name), con)            Try                da.Fill(dt)            Catch ex As Exception                MsgBox(ex.Message)            End Try        End Using        con.Dispose()        Return dt    End Function    ''' <summary>    ''' 讀取CSV字串    ''' </summary>    ''' <param name="CsvString">Csv格式字串</param>    ''' <returns>返回的DataTable</returns>    ''' <remarks></remarks>    Public Shared Function CsvStringRead(ByVal CsvString As String) As DataTable        Dim dt As New DataTable        On Error Resume Next        Dim str() As String = CsvString.Split({vbCr, vbLf}, StringSplitOptions.RemoveEmptyEntries)        Dim cs() As String = str(0).Split({","c})        For Each c As String In cs            dt.Columns.Add(c, GetType(String))        Next        For i = 1 To str.Length - 1            Dim Cells() As String = str(i).Split({","c})            If Cells.Length <> dt.Columns.Count Then                Continue For            Else                dt.Rows.Add(Cells)            End If        Next        'dt.PrimaryKey = New DataColumn() {dt.Columns(0)}        Return dt    End Function    ''' <summary>    ''' 讀取Excel檔案    ''' </summary>    ''' <param name="filename">Excel檔案路徑</param>    ''' <param name="HDR">是否有欄位標題</param>    ''' <returns>返回的DataTable</returns>    ''' <remarks></remarks>    Public Shared Function ExcelRead(ByVal filename As String, Optional ByVal HDR As Boolean = False) As DataTable        Dim constr As String = String.Format(XlsConStr, filename, IIf(HDR, "yes", "no"))        Dim con As New OleDbConnection(constr)        Dim dt As New DataTable("Sheet1")        Using da As New OleDbDataAdapter(XlsSql, con)            Try                da.Fill(dt)            Catch ex As OleDbException                MsgBox("確認表名是否是'Sheet1'!")            End Try        End Using        con.Dispose()        Return dt    End Function#End Region#Region "Write"    ''' <summary>    ''' 儲存DataTable到CSV檔案    ''' </summary>    ''' <param name="Path">CSV檔案路徑</param>    ''' <param name="Table">要儲存的DataTable</param>    ''' <remarks></remarks>    Public Shared Sub CsvSave(ByVal Path As String, ByVal Table As DataTable)        Using sw As New StreamWriter(Path, False, Encod)            sw.Write(GetString(Table, ","))            sw.Flush()            sw.Close()        End Using    End Sub    ''' <summary>    ''' 儲存DataTable到Excel檔案    ''' </summary>    ''' <param name="Path">Excel檔案路徑</param>    ''' <param name="Table">要儲存的DataTable</param>    ''' <remarks></remarks>    Public Shared Sub ExcelSave(ByVal Path As String, ByVal Table As DataTable)        Using sw As New StreamWriter(Path, False, Encod)            sw.Write(GetString(Table, vbTab))            sw.Flush()            sw.Close()        End Using    End Sub#End Region#Region "Utils"    Public Shared Function GetString(ByVal Table As DataTable, ByVal Link As String) As StringBuilder        Dim str As New StringBuilder        If Table.Columns.Count = 0 Then Return str        For Each c As DataColumn In Table.Columns            str.Append(CellString(c.ColumnName) & Link)        Next        str.Remove(str.Length - 1, 1).AppendLine()        str.Append(GetString(Table.Rows, Link))        Return str    End Function    Public Shared Function GetString(ByVal Rows As DataRowCollection, ByVal Link As String) As StringBuilder        Dim str As New StringBuilder        For Each Row As DataRow In Rows            For Each Item In Row.ItemArray                str.Append(CellString(Item.ToString)).Append(Link)            Next        str.Remove(str.Length - 1, 1).AppendLine()        Next        Return str    End Function    Public Shared Function CellString(ByVal str As String) As String        If String.IsNullOrWhiteSpace(str) Then Return String.Empty        If Contains(str, chars) Then            str = str.Replace(Chr(34), Chr(34) & Chr(34))            str = Chr(34) & str & Chr(34)        End If        Return str    End Function    Public Shared Function Contains(ByVal str As String, ByVal ParamArray chars() As Char) As Boolean        For Each c As Char In chars            If str.Contains(c) Then Return True        Next        Return False    End Function#End RegionEnd Class

http://www.codeproject.com/Articles/8500/Reading-and-Writing-Excel-using-OLEDB

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.