2015-06-02 3 views
2

Прежде всего, я должен сказать, что я ОЧЕНЬ новичок в программировании (менее чем за неделю опыта в целом). Я решил написать программу, которая генерирует ряд документов шаблона .odt. Я хочу использовать шаблон с определенным ключевым словом, чтобы сказать «X1234X» и так далее. Затем это будет заменено значениями, генерируемыми программой. Каждый документ немного отличается, и значения вводятся и вычисляются с помощью подсказки (даты и другие вещи)Редактирование файла .odt с использованием python

Я написал большую часть кода до сих пор, но я застрял с 2-х дней по этой проблеме. Я использовал модуль ezodf для создания нового документа (с разными именами файлов) из шаблона, но я зациклился на том, как редактировать содержимое. Я тяжело вздохнул, но придумал пустую надежду, что кто-то здесь может помочь. Я пробовал читать документацию, но я должен быть честным ... ее немного сложно понять. Я не знаком с «жаргоне»

Благодарности

PS: метод ezodf было бы здорово, но любые другие способы будут делать тоже. Программа не должна быть симпатичной, она просто должна работать (так что я могу работать меньше^_ ^)

ответ

4

Ну, я понял. и закончил программу. Я использовал ezodf для создания файла, затем zipfile, чтобы извлечь и отредактировать content.xml, а затем переупаковать все это с помощью nice> def thingy < от here. Я пытался возиться с etree ... но я не мог понять это ...

from ezodf import newdoc 
import os 
import zipfile 
import tempfile 

for s in temp2: 
input2 = s 
input2 = str(s) 
input1 = cname[0] 
file1 = '.odt' 
namef = input2 + input1 + file1 
odt = newdoc(doctype='odt', filename=namef, template='template.odt') 
odt.save() 
a = zipfile.ZipFile('template.odt') 
content = a.read('content.xml') 
content = str(content.decode(encoding='utf8')) 
content = str.replace(content,"XXDATEXX", input2) 
content = str.replace(content, 'XXNAMEXX', input1) 



def updateZip(zipname, filename, data): 
    # generate a temp file 
    tmpfd, tmpname = tempfile.mkstemp(dir=os.path.dirname(zipname)) 
    os.close(tmpfd) 

    # create a temp copy of the archive without filename 
    with zipfile.ZipFile(zipname, 'r') as zin: 
     with zipfile.ZipFile(tmpname, 'w') as zout: 
      zout.comment = zin.comment # preserve the comment 
      for item in zin.infolist(): 
       if item.filename != filename: 
        zout.writestr(item, zin.read(item.filename)) 

    # replace with the temp archive 
    os.remove(zipname) 
    os.rename(tmpname, zipname) 

    # now add filename with its new data 
    with zipfile.ZipFile(zipname, mode='a', compression=zipfile.ZIP_DEFLATED) as zf: 
     zf.writestr(filename, data) 

updateZip(namef, 'content.xml', content)