2017-09-14 2 views
-1

J'ai une banque de questions de 100 000 questions sous la forme de documents Word. Les questions sont dans le texte avec quelques images contenant. Existe-t-il un moyen efficace d'extraire les questions une à la fois (y compris les images) et de les importer dans une base de données SQL? Je préférerais ne pas avoir à convertir le texte en images car les questions pourraient devoir être modifiées. Merci!Le meilleur moyen d'extraire du contenu dans un document Word vers une base de données SQL?

+0

Lorsque vous parlez de base de données SQL, avez-vous des dbms spécifiques en tête? – jarlh

+0

@jarlh Merci pour la réponse rapide. Le dbms utilisé est MS SQL Server Management Studio 17.2. En y regardant de plus près, certaines questions contiennent des objets Word tels que des boîtes vides. Assez sûr que ça va compliquer les choses ... Un script VBA serait-il toujours la solution? – dasanibottle

+0

J'ai remplacé certaines des étiquettes, pour obtenir une meilleure attention. – jarlh

Répondre

0

ici est un début

sépare le numéro de question, texte de la question, chaque numéro de réponse et chaque texte de réponse

il les imprime dans la fenêtre immédiate

s'il vous plaît essayer avec un de vos documents

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 
+0

Désolé pour la réponse tardive, suis actuellement rattrapé avec d'autres projets. Merci beaucoup de partager le code, je mettrai à jour sur les progrès dès que j'ai le temps de continuer sur ce projet. – dasanibottle