Excel COM 自动化,255 个限制

Excel COM Automation, 255 limit

我使用 Excel.Application COM 对象自动生成依赖于 Excel 的文档。

本质上,输入是一个简单的 HTML 字符串,只有跨度、粗体和斜体标签。

我擦除相关单元格的内容,解析这个 HTML 字符串,然后将字符附加到相关单元格,调整字体和字体颜色,如下所示:

offset = Range.Characters().Count
Range.Characters(offset + 1).Insert("Hello");
Range.Characters(offset + 1).Font.Bold = True

它适用于少于 255 个字符的内容,但达到这个数字时,单元格中不会附加任何内容,偏移量始终为 255。

有什么想法吗?如果我打开 excel 并手动将内容写入单元格,则我没有此限制。

这是一个解决方法,它依赖于 Excel 能够打开一个仅包含 HTML 的文件,该文件被格式化为 table:

Sub Tester()
    Dim ws As Worksheet
    HTMLtoRange ActiveSheet.Range("B2").Value, ActiveSheet.Range("B4")
End Sub

'Take some HTML, write it to a file as a table,
'   open the file in Excel, and copy A1 to `c`
Sub HTMLtoRange(HTML As String, c As Range)
    Dim fName As String
    With CreateObject("scripting.filesystemobject")
        fName = .getSpecialFolder(2).Path & "\" & .getTempName() & ".xls"
        .opentextfile(fName, 2, True).write _         
                          "<html><table><tr><td>" & HTML & _
                          "</td></tr></table></html>"
    End With
    Application.ScreenUpdating = False
    With Workbooks.Open(fName)
        .Sheets(1).Range("A1").Copy c
        .Close False
    End With
End Sub

输入输出:

我将总结对我有用的方法:

  1. 首先,从 HTML 字符串中提取文本并将单元格的值设置为该文本,这是没有标签且未转义的 HTML,如下所示:
Range.Value = html_text
  1. 根据需要使用 Characters 对象修改格式,Characters.Count 不会截断为 255,现在它将 return 字符串的实际长度,如下所示:
Range.Characters(offset, format_length).Font.Bold = True

这样一来,我就没有在字符中使用 Insert 方法,这似乎是导致问题的原因。尝试使用 HTML 最多 1000 个字符的字符串成功。另请注意,我使用的是来自 Python 而不是 VBA 的 COM (Excel.Application),在后者中,这可能不是一件容易的事。