You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

VB.NET导出WebBrowser中HTML表格至Excel时,读取单元格颜色遇异常求助

问题:WebBrowser表格导出Excel时复制单元格颜色失败

原有代码可正常将WebBrowser中的HTML表格文本导出至Excel,但尝试复制单元格背景色时,执行cols(j).Style(backcolor)抛出无法将颜色值转换为整数值的异常。

原有导出文本代码:

Dim htmlDoc As HtmlDocument = WebBrowser1.Document
Dim table As HtmlElement = htmlDoc.GetElementById("Table1")
Dim rows As HtmlElementCollection = table.GetElementsByTagName("tr")
Dim excelApp As Excel.Application = New Excel.Application
Dim workbook As Excel.Workbook = excelApp.Workbooks.Add()
Dim worksheet As Excel.Worksheet = workbook.Worksheets(1)

For i As Integer = 0 To rows.Count - 1
    Dim cols As HtmlElementCollection = rows(i).GetElementsByTagName("td")
    For j As Integer = 0 To cols.Count - 1
        worksheet.Cells(i + 1, j + 1) = cols(j).InnerText
    Next
Next

尝试复制颜色的出错代码片段:

Dim color As String = cols(j).Style(backcolor)
Dim cell As Excel.Range = worksheet.Cells(i + 1, j + 1)
cell.Interior.Color = ColorTranslator.FromHtml(color)

解决办法

1. 修正样式属性名

HTML中背景色的标准样式属性是background-color,而非backcolor,需修改获取样式的代码:

Dim colorStr As String = cols(j).Style("background-color")

2. 处理空值与无效颜色

部分单元格可能未设置背景色,此时colorStr会是空字符串,直接传入ColorTranslator.FromHtml会报错,需先做判断:

If Not String.IsNullOrEmpty(colorStr) Then
    Dim cell As Excel.Range = worksheet.Cells(i + 1, j + 1)
    cell.Interior.Color = ColorTranslator.FromHtml(colorStr)
End If

3. 完整修正后代码

整合文本导出与背景色复制逻辑的完整代码:

Dim htmlDoc As HtmlDocument = WebBrowser1.Document
Dim table As HtmlElement = htmlDoc.GetElementById("Table1")
Dim rows As HtmlElementCollection = table.GetElementsByTagName("tr")
Dim excelApp As Excel.Application = New Excel.Application
Dim workbook As Excel.Workbook = excelApp.Workbooks.Add()
Dim worksheet As Excel.Worksheet = workbook.Worksheets(1)

For i As Integer = 0 To rows.Count - 1
    Dim cols As HtmlElementCollection = rows(i).GetElementsByTagName("td")
    For j As Integer = 0 To cols.Count - 1
        ' 导出单元格文本
        worksheet.Cells(i + 1, j + 1) = cols(j).InnerText
        
        ' 复制背景色
        Dim colorStr As String = cols(j).Style("background-color")
        If Not String.IsNullOrEmpty(colorStr) Then
            Dim cell As Excel.Range = worksheet.Cells(i + 1, j + 1)
            cell.Interior.Color = ColorTranslator.FromHtml(colorStr)
        End If
    Next
Next

' 可选:显示Excel窗口
excelApp.Visible = True

内容的提问来源于stack exchange,提问作者Mika

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 07:57:38