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
相关产品推荐
相关产品推荐

