From df7b16c177b8e681e86d31897dce1773ab72d63c Mon Sep 17 00:00:00 2001 From: Ichthyostega Date: Sat, 20 May 2023 00:16:05 +0200 Subject: [PATCH] Word-Generierung implementiert --- sosci2word/_SoSci2Word.mm | 32 +++++++++----- sosci2word/experiment.py | 2 +- sosci2word/sosci2word.py | 87 ++++++++++++++++++++++++++++++++++++--- 3 files changed, 104 insertions(+), 17 deletions(-) diff --git a/sosci2word/_SoSci2Word.mm b/sosci2word/_SoSci2Word.mm index 8494131..81f746f 100644 --- a/sosci2word/_SoSci2Word.mm +++ b/sosci2word/_SoSci2Word.mm @@ -227,9 +227,9 @@ - + - + @@ -292,17 +292,27 @@ - - - - - - - + + + + + + + + + + + + + - - + + + + + + diff --git a/sosci2word/experiment.py b/sosci2word/experiment.py index 02260af..9d54b0c 100755 --- a/sosci2word/experiment.py +++ b/sosci2word/experiment.py @@ -50,4 +50,4 @@ for c in range(1,6): table.cell(1,0).paragraphs[0].text = "IST" table.cell(2,0).paragraphs[0].text = "SOLL" -document.save('Mist.docx') +#document.save('Mist.docx') diff --git a/sosci2word/sosci2word.py b/sosci2word/sosci2word.py index 7f116e6..c7c0992 100644 --- a/sosci2word/sosci2word.py +++ b/sosci2word/sosci2word.py @@ -8,6 +8,9 @@ import sys from xml.etree import ElementTree +from docx import Document +from demo import document + #-----------------------SETUP @@ -24,7 +27,7 @@ def convertSosci2Word(): # Schritt-2 : die Fragen in der Reihenfolge vom Questionaire questionaire = buildQuestionaire(questions) ## TODO - # Schritt-3 : Questionaire in das Word-Dokument ausgeben + renderContentToWord(questionaire) ## TODO @@ -40,6 +43,10 @@ class QuestionElement: def dump(self): return self.dumpBasis("Basis") + + + def render(self, document): + pass # macht nichts in der Basisklasse @@ -64,6 +71,28 @@ class LikertItem(QuestionElement): + "\nItems: " + str(list("(%d,%s)" % (c,t) for c,t in self.items)) ) + def render(self, document): + questionText = self.desc + ": " + self.title + document.add_paragraph(questionText, style='Fragebogen-Item') + # + # Tabelle mit den Antwortmöglichkeiten + cntLabels = len(self.labels) + cntItems = len(self.items) + table = document.add_table(rows=cntItems+1, cols=cntLabels+1) + # gesammte Tabelle mit dem korrekten Style auszeichnen + for r in table.rows: + for c in r.cells: + c.paragraphs[0].style = 'Frabebogen-Wert' + # alle Inhalts-Spalten ausfüllen + # in die Kopfzeile kommt das richtige Label + # in die Inhaltsfelder ein Symbol für das Antwort-Kästchen + for c in range(1, cntLabels+1): + table.cell(0,c).paragraphs[0].text = self.labels[c-1][1] + for r in range(1, cntItems+1): + table.cell(r,c).paragraphs[0].text = '□' + # + for r in range(1, cntItems+1): + table.cell(r,0).paragraphs[0].text = self.items[r-1][1] @@ -81,6 +110,24 @@ class SelectItem(QuestionElement): return ( self.dumpBasis('Select') + "\nItems: " + str(list("(%d,%s)" % (c,t) for c,t in self.items)) ) + + def render(self, document): + questionText = self.title + document.add_paragraph(questionText, style='Fragebogen-Item') + # + # Tabelle mit den Antwortmöglichkeiten + cntItems = len(self.items) + table = document.add_table(rows=cntItems, cols=2) + # gesammte Tabelle mit dem korrekten Style auszeichnen + for r in table.rows: + for c in r.cells: + c.paragraphs[0].style = 'Frabebogen-Wert' + # alle Inhalts-Spalten ausfüllen + # in die Inhaltsfelder links der Fragetext, rechts der Code-Wert + for r in range(0, cntItems): + table.cell(r,0).paragraphs[0].text = self.items[r][1] # text + table.cell(r,1).paragraphs[0].text = str(self.items[r][0]) # code + @@ -97,6 +144,11 @@ class TextElement(QuestionElement): return ( self.dumpBasis('Text') + "\nText: " + self.text ) + + def render(self, document): + document.add_paragraph(self.desc, style='Überschrift-Anhang 3') + if self.text != None: + document.add_paragraph(self.text, style='Body Text') @@ -158,21 +210,46 @@ def buildQuestionaire(questions): continue # die erste Seite enthält den Einführungstext. Den fügen wir später manuell ein # info = page.find('info').text - print('Seite: %s' % info) questionsOnThisPage = [] for quest in page.findall('question'): questionID = quest.get('id') - print(questionID) element = questions[questionID] - print(element.dump()) questionsOnThisPage.append(element) questionaire.append((info, questionsOnThisPage)) # - print(questionaire) return questionaire + +def renderContentToWord(questionaire): + # + print('Integrate content in Word file "%s"....' % WORD_TEMPLATE) + document = Document('Thesis-Fragebogen.docx') + # + renderQuestionaireTitle(document) + for pageInfo, elements in questionaire: + renderPageTitle(document, pageInfo) + for element in elements: + print(element.dump()) + element.render(document) + + print('Writing modified Word file as "%s"....' % WORD_OUTPUT) + document.save(WORD_OUTPUT) + # + +# erzeugt ein neues Hauptkapitel im Anhang für den Fragebogen +def renderQuestionaireTitle(document): + document.add_paragraph('Fragebogen (TODO Import)', style='Überschrift-Anhang 1') + + +# erzeugt einen Abschnitt im Anhang für die jeweilige Seite des Fragebogens +def renderPageTitle(document, title): + document.add_paragraph(title, style='Überschrift-Anhang 2') + + + + # ---- Hilfsfunktionen def __err(text):