【问题标题】:Replace italics within Excel file with HTML tags用 HTML 标记替换 Excel 文件中的斜体
【发布时间】:2015-10-23 15:36:18
【问题描述】:

有没有办法用它们的标签替换格式,例如斜体,例如?更一般地说,我如何搜索格式:斜体并替换为

<i>foundstring(^&)</i>?

基本上我想要的是拥有这个:

blabla bla bla

替换为:

blabla <i>bla</i> bla

这是因为我需要在“保留”格式的同时将 .xslx 导出到 .csv。是否有适用于 Mac 版 MS Office 2011 的 VBA 脚本?或者它可以用 Python 做吗?

提前感谢您的帮助。

编辑:这是我尝试无济于事的 vba 代码:

Sub Tag_Italic()

Dim oWS As Worksheet

Dim oRng As Range

Dim FirstUL

Set oWS = ActiveSheet

Application.FindFormat.Clear

Application.FindFormat.Font.Italic = True

Set oRng = oWS.Range("A1:A1000").Find(What:="", LookIn:=xlValues, LookAt:= _

xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, SearchFormat:=True)

If Not oRng Is Nothing Then

FirstUL = oRng.Row

Do

oRng.Font.Italic = False

oRng.Value2 = "" & oRng.Value2 & ""

Set oRng = oWS.Range("A" & CStr(oRng.Row + 1) & ":A1000").Find(What:="", LookIn:=xlValues, LookAt:= _

xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, SearchFormat:=True)

Loop While Not oRng Is Nothing

End If

End Sub

编辑 2:Gary 的学生回答完成了工作!

【问题讨论】:

  • 有没有VBA脚本...?如果你写一个,会有的。根据文件的大小和需要解析的行数,虽然它可以在 VBA 中完成,但 python 可能会更好(或者,您熟悉的任何其他语言,它能够与 Win32Com 一起使用以访问Excel 对象模型/api)。不过,这似乎是一个“给我所有代码”的问题。你自己尝试过什么吗?
  • 如果您可以预期整个单元格都以斜体格式设置,您只需检查单元格的格式属性并使用适当的标签包装文本。如果每个单元格中只有 一些 个单词是斜体的,那么你必须进行字符迭代...
  • @David 感谢您的回答。我试过(vbadud.blogspot.ru/2008/12/…)这个宏无济于事。我会尝试使用 Python - 我对它很陌生,所以可能需要一些时间。感谢您为我指明了一个好的方向!
  • 将您的代码放在问题正文中,而不是在 cmets 中 :)
  • 很可能是您因为缺乏努力而投下反对票...

标签: python excel excel-2011 vba


【解决方案1】:

考虑以下UDF()

Public Function TagMaker(r As Range) As String
   Dim outpt As String, v As String, C As String
   Dim i As Long, boo As Boolean
   Dim booNext As Boolean

   outpt = ""
   v = r.Text

   For i = 1 To Len(v)
      boo = r.Characters(i, 1).Font.Italic
      C = Mid(v, i, 1)
      If (i = 1) And boo Then
         outpt = "<i>"
      End If
      If i = Len(v) Then
         If boo Then
            outpt = outpt & C & "</i>"
            Exit For
         Else
            outpt = outpt & C
            Exit For
         End If
      End If


      booNext = r.Characters(i + 1, 1).Font.Italic
      If (boo And booNext) Or (Not boo And Not booNext) Then
         outpt = outpt & C
      End If
      If boo And Not booNext Then
         outpt = outpt & C & "</i>"
      End If
      If Not boo And booNext Then
         outpt = outpt & C & "<i>"
      End If
   Next i
TagMaker = outpt
End Function

例子:

【讨论】:

    【解决方案2】:

    不,CSV 严格删除所有格式。

    CSV 代表逗号分隔值,通常用于导入/导出数据库或进行备份。如果您将 excel 文件转换为 CSV,所有格式标记都将被删除,包括 、表格边框、突出显示或字体颜色及其样式。数据以纯文本形式存储。

    【讨论】:

    • 我认为您错过了问题的要点,本质上是“如何将富文本转换为带有标记的纯文本”。因此,这个答案并没有真正解决 OP 的问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-03-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-23
    • 2012-03-13
    • 1970-01-01
    相关资源
    最近更新 更多