Stories

Detail Return Return

Access自定義導出HTML報表 - Stories Detail

Hi,大家好!
在日常工作中,我們經常需要將 Access 中的數據分享給沒有安裝 Access 的同事,或者發佈到公司內網上。截圖、發 Excel 文件都或多或少有些不便。今天,我將帶你解鎖一個非常實用的技能——將 Access 數據導出為 HTML 文件。這不僅能生成任何設備都能完美打開的報表,還能通過自定義,讓你的數據報表看起來像一個專業的網頁。
為什麼要導出為 HTML?
通用性強:無需任何特定軟件,有瀏覽器就能打開,手機、平板、電腦全平台兼容。
格式穩定:不像 Excel 在不同設備上可能格式錯亂,HTML 的顯示效果非常穩定。
易於分享:一個輕量的 .html 文件,通過郵件、微信發送都非常方便。

1創建表與窗體

首先,我們先準備一張表,如果你有現成的表也OK,表有了,那就可以創建一個窗體了,像這樣,放一個按鈕就可以了。

2添加代碼

接着,我們就可以來添加代碼了

Private Sub Command0_Click()
 
    Dim rs As DAO.Recordset
    Dim html As String
    Dim stream As Object
    
    ' 打開記錄集
    Set rs = CurrentDb.OpenRecordset("SELECT * FROM tblLanguage")
    
    ' 構建HTML頭部(關鍵:聲明UTF-8編碼)
    html = "<!DOCTYPE html>" & vbCrLf
    html = html & "<html lang='zh-CN'>" & vbCrLf
    html = html & "<head>" & vbCrLf
    html = html & "<meta charset='utf-8'>" & vbCrLf
    html = html & "<title>測試列表</title>" & vbCrLf
    html = html & "<style>" & vbCrLf
    html = html & "  body { font-family: 'Microsoft YaHei', Arial, sans-serif; margin: 20px; }" & vbCrLf
    html = html & "  table { border-collapse: collapse; width: 100%; }" & vbCrLf
    html = html & "  th, td { border: 1px solid #ddd; padding: 8px; text-align: left; }" & vbCrLf
    html = html & "  th { background-color: #4CAF50; color: white; }" & vbCrLf
    html = html & "  tr:nth-child(even) { background-color: #f2f2f2; }" & vbCrLf
    html = html & "</style>" & vbCrLf
    html = html & "</head>" & vbCrLf
    html = html & "<body>" & vbCrLf
    html = html & "<h1>測試列表</h1>" & vbCrLf
    
    ' 構建表格
    html = html & "<table>" & vbCrLf
    
    ' 表頭
    html = html & "<thead><tr>"
    Dim fld As DAO.Field
    For Each fld In rs.fields
        html = html & "<th>" & fld.Name & "</th>"
    Next fld
    html = html & "</tr></thead>" & vbCrLf
    
    ' 數據行
    html = html & "<tbody>" & vbCrLf
    Do While Not rs.EOF
        html = html & "<tr>"
        For Each fld In rs.fields
            html = html & "<td>" & Nz(fld.value, "") & "</td>"
        Next fld
        html = html & "</tr>" & vbCrLf
        rs.MoveNext
    Loop
    html = html & "</tbody>" & vbCrLf
    html = html & "</table>" & vbCrLf
    html = html & "</body>" & vbCrLf
    html = html & "</html>"
    
    ' === 關鍵:使用ADODB.Stream以UTF-8編碼寫入文件 ===
    Set stream = CreateObject("ADODB.Stream")
    With stream
        .Type = 2                    ' adTypeText 文本模式
        .Charset = "utf-8"           ' 設置UTF-8編碼
        .Open
        .WriteText html              ' 寫入HTML內容
        .SaveToFile "C:\Users\Desktop\html\Employees_Custom.html", 2  ' adSaveCreateOverWrite
        .Close
    End With
    
    rs.Close
    Set rs = Nothing
    Set stream = Nothing
    
    MsgBox "導出完成!", vbInformation
 
 End Sub

核心思路:用 DAO.Recordset 讀取數據。用 VBA 拼接出包含 CSS 樣式的 HTML 字符串。使用 ADODB.Stream 對象,以 UTF-8 編碼將字符串寫入文件(這是解決中文亂碼的關鍵)。

3運行輸出

最後,我們可以輸出看一下效果,HTML的樣式大概是這樣的:

現在,你得到的不僅是一個數據報表,更是一個功能完備的迷你網頁應用!

4總結

簡單導出用 DoCmd.OutputTo,但要注意其侷限性。解決中文亂碼,必須使用 ADODB.Stream 對象並設置 .Charset = "utf-8"。自定義樣式,通過拼接包含 <style> 標籤的 HTML 字符串來實現。數據安全,在將數據填入表格單元格 <td> 時,務必使用 HTMLEncode 函數進行轉義,防止特殊字符(如 <、>)破壞頁面結構。增強交互,可以引入現成的前端框架(如 Bootstrap)和編寫少量 JavaScript 來實現搜索、打印等高級功能。
**掌握了這些方法,你的 Access 應用交付的將不再是冰冷的數據,而是體驗更佳、更專業的數據產品。
下一篇我們來講講在表格的基礎上加一些圖表。**

user avatar xzqcsj Avatar aloudata Avatar RCJL Avatar python-learn Avatar
Favorites 4 users favorite the story!
Favorites

Add a new Comments

Some HTML is okay.