为了把题目可以最美观的展示在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
3.接下来待解决的问题就是,如何快速将题目的题干、答案、分开入库