. Docx modülünü denedim ve işe yaramayacaktım. Sonunda, zip dosyası modülünü kullanarak ve docx arşivindeki document.xml dosyasını değiştirerek aşağıda açıklanan yöntemi kullandım. Bunun çalışması için, belgede mevcut veya gelecekteki herhangi bir metinle eşleşmeyecek benzersiz dizeler olarak değiştirmek istediğiniz metin içeren bir şablon belgesine (docx) ihtiyacınız vardır (örn. "XXXMEETDATEXXX üzerindeki XXXCLIENTNAMEXXX ile toplantı çok iyi geçti. ").bulun ve .docx dosyası metni değiştirmek - ı bulup biraz şans ile bir docx dosyası metni değiştirmek için bir yöntem için birçok arama da yapıyorum Python
import zipfile
replaceText = {"XXXCLIENTNAMEXXX" : "Joe Bob", "XXXMEETDATEXXX" : "May 31, 2013"}
templateDocx = zipfile.ZipFile("C:/Template.docx")
newDocx = zipfile.ZipFile("C:/NewDocument.docx", "a")
with open(templateDocx.extract("word/document.xml", "C:/")) as tempXmlFile:
tempXmlStr = tempXmlFile.read()
for key in replaceText.keys():
tempXmlStr = tempXmlStr.replace(str(key), str(replaceText.get(key)))
with open("C:/temp.xml", "w+") as tempXmlFile:
tempXmlFile.write(tempXmlStr)
for file in templateDocx.filelist:
if not file.filename == "word/document.xml":
newDocx.writestr(file.filename, templateDocx.read(file))
newDocx.write("C:/temp.xml", "word/document.xml")
templateDocx.close()
newDocx.close()
Sorum şu: Bu yöntemde sorun nedir? Bu şeylere oldukça yeniyim, bu yüzden başka birinin bunu anlaması gerektiğini hissediyorum. Bu, bu yaklaşımda çok yanlış bir şey olduğuna inanıyorum. Ama işe yarıyor! Burada neyi özlüyorum?
. İşte
herkes için benim düşünce sürecinin bir örneklerde başka bu şeyleri öğrenmeye çalışıyor ise:Adım 1) anahtarlar ve öğeleri gibi yeni metin olarak değiştirmek istediğiniz metin dizeleri bir Python sözlüğü hazırlayın (örn . {"XXXCLIENTNAMEXXX": "Joe Bob", "XXXMEETDATEXXX": "31 Mayıs 2013").
Adım 2) Şablon docx dosyasını zipfile modülünü kullanarak açın.
Adım 3) ekleme erişim modu ile yeni yeni docx dosyasını açın.
Adım 4) şablonu docx dosyasından document.xml (tüm metin can) Özü ve bir metin dizesi değişkene xml okuyun.
Adım 5) Yeni metinle xml metin dizesindeki Sözlüğünüzde tanımlanan metnin tamamını değiştirmek için for döngüsü kullanın.
Adım 6) xml metin dizesini yeni bir geçici xml dosyasına yazın.
Adım 7) döngü ve kelime/document.xml dosyası HARİÇ yeni docx arşive şablon docx arşivinde tüm dosyaları kopyalamak için zipfile modül için bir kullanın.
Adım 8) Yeni bir kelime/document.xml dosyası olarak yeni docx arşive yerini metinle geçici xml dosyası yaz.
Adım 9) Şablonunuzu ve yeni docx arşivlerini kapatın.
10. Adım) Yeni docx belgenizi açın ve değiştirilen metninizin tadını çıkarın!
--Edit-- Bazen kapanış hatlarında 7 parantez ')' ve
Gönderdiğiniz kodun çalıştığı ve "Neden bir başkası bunu neden yapmamış?" Diye soruyorsun. Bu neden sorun olur ki? Kodunuzdaki şahane bir bakıştan, yapılacak en doğru şey gibi görünüyor. –
Tabii ki insanlar bunu daha önce yapmışlardır. Bu bir form mektubunun bir barebone uygulamasıdır. Microsoft Word (ve OpenOffice ve vb), bunu yerel olarak yapacak bir "Adres Mektup Birleştirme" işlevine sahiptir. –
Bu soru konu dışı görünmektedir, çünkü çalışma kodunun gözden geçirilmesi ile ilgilidir. Codereview.SE'ye geçişi önerin –