Sql server 将Word文档中的内容提取到SQL数据库的最佳方法?

Sql server 将Word文档中的内容提取到SQL数据库的最佳方法?,sql-server,vba,import,ms-word,ssms,Sql Server,Vba,Import,Ms Word,Ssms,我有一个以word文档形式存在的100000个问题的题库。问题以文本形式出现,其中包含一些图片。是否有任何有效的方法一次提取一个问题(包括图像)并将其导入SQL数据库?不希望将文本转换为图像,因为问题可能需要编辑。谢谢 这是一个开始 分隔问题编号、问题文本、每个答案编号和每个答案文本 然后在即时窗口中打印它们 请用你的一份文件试试 Option Explicit Sub parse() Dim rgx As Object Set rgx = CreateObject("vbs

我有一个以word文档形式存在的100000个问题的题库。问题以文本形式出现,其中包含一些图片。是否有任何有效的方法一次提取一个问题(包括图像)并将其导入SQL数据库?不希望将文本转换为图像,因为问题可能需要编辑。谢谢

这是一个开始

分隔问题编号、问题文本、每个答案编号和每个答案文本

然后在即时窗口中打印它们

请用你的一份文件试试

Option Explicit

Sub parse()

    Dim rgx As Object
    Set rgx = CreateObject("vbscript.regexp")
    rgx.MultiLine = True
    rgx.Global = True
    rgx.pattern = "^[\s]+|[\s]+$"

    Dim s As String

    Dim i As Integer

    Dim qNum As Long
    Dim qest As String

    Dim aNum As Integer
    Dim answ As String

    Dim par As Paragraphs
    Set par = ActiveDocument.Paragraphs

    Dim p As Integer
    For p = 1 To par.Count
        s = rgx.Replace(par(p).Range.Text, "")                  ' trim whitespace (leading and trailing)
'        Debug.Print "--- "; s

        Select Case Left(s, 1)
            Case "0" To "9"                                     ' question found
                qNum = CDec(Split(s, ".")(0))                   ' number
                i = 1

                qest = rgx.Replace(Split(s, ".", 2)(1), "")     ' first line of text

                Do While True
                    s = rgx.Replace(par(p + i).Range.Text, "")  ' check for multiline question
                    If Len(s) > 0 Then
                        If Left(s, 1) = "(" Then
                            p = p + i - 1                       ' it is an answer line, so exit
                            Exit Do
                        Else
                            qest = qest & vbNewLine & s         ' assemble multiline question
                        End If
                    End If
                    i = i + 1
                Loop

                Debug.Print vbNewLine; "question # "; qNum; vbTab; qest

            Case "("                                            ' answer found
                aNum = CDec(Mid(s, 2, 1))                       ' number
                answ = Split(s, ")", 2)(1)                      ' text
                Debug.Print "answer # "; aNum, answ
        End Select
    Next p


End Sub

当你说SQL数据库时,你脑子里有什么特定的dbms吗?@jarlh谢谢你的及时回复。使用的dbms是MS SQL Server Management Studio 17.2。仔细看,有些问题包含单词对象,如空框。很确定这会让事情复杂化。。。VBA脚本还会继续吗?为了获得更好的关注,我替换了一些标记。你能在word文档的屏幕截图上贴一个链接,上面有段落标记和所有其他格式标记吗?如有必要,替换任何私有数据,但保持格式完全相同。@jsotola以下是第一页的屏幕截图:。其他页面不包含前4行文本。谢谢很抱歉迟回复,我目前正忙于其他项目。非常感谢您分享代码,我将在有时间继续该项目时尽快更新进度。