为了把题目可以最美观的展示在web中,决定将word题集以文字+图片的形式存储到数据库中。为了实现这个思路,进行了多方面考虑。最终解决方案是,将word中的图片替换成该文字的本地url并以html标签img编写。
1.第一个要解决的问题是,将word中的图片保存到本地
将word以网页形式保存,可以得到所有的图片内容。再通过批量修改文件名的插件,将题目名进行递增命名,方便之后替换。
2.现在要把word中的图片替换成如下的img标签
<img src="7_/7_632.png">
在这一步我进行了如下尝试:
(1)使用python的python-docx库将图片进行修改,但是该库目前仅支持替换文字,对于图片处理还不能很好的支持。
(2)继续思路(1)首先通过word里中的通配符将所有图片替换为特定的字符串(比如“helloword”)然后在通过python库对这个字符串进行替换。属于最低限度的思路,唯一问题就是繁琐。
(2)使用VBA宏定义,通过宏定义无论如何都可以解决这个问题。通过下列宏,可以完美解决问题。
Sub 图片替换() On Error GoTo xxx: Dim Rng As Range, n&, arr, a$ Dim k1, k2, k4, k5 As String k3 = 1 k1 = "<img src=""" k2 = ActiveDocument.Name k2 = Replace(k2, ".docx", "") k2 = "question_picture" & "/" & k2 k3 = 1 k4 = ".png"" > " k5 = k1 & k2 & "/" & k3 & k4 a = ActiveDocument.Content.Text Set Rng = ActiveDocument.Content With Rng.Find .ClearFormatting .Replacement.ClearFormatting arr = Array(k5) Do While .Execute(findtext:="^g") Rng = arr(n) Rng.SetRange Rng.End, ActiveDocument.Content.End k3 = k3 + 1 k5 = k1 & k2 & "/" & k3 & k4 arr = Array(k5) Loop End With GoTo yyy: xxx: MsgBox "运行错误!" yyy: MsgBox "转换完成!" End Sub