2013-01-14 24 views
6

Python Docx doğrudan COM şeyler her başa olmayan bir şeyi, Microsoft Word belgelerini oluşturmak için oldukça iyi bir kütüphane - yine de bazı sınırlamalar içine çalıştırıyorum. Herkesin bir metin dizisine nasıl bir vagon dönüşü yapacağına dair bir fikri var mı? Bir paragrafın aralarında fazladan boşluk olmadan birden fazla satıra sahip olmasını istiyorum. Bununla birlikte, çizgileri her zamanki '\ n' ile ayıran bir dize yazmak çalışmıyor. Ne de & # 10 veya & # 13 kullanıyor. Diğer düşünceler, ya da bu çerçeve böyle bir şey için çok mu sınırlı?Python Docx Satır Başı

cevap

6

Bunun mümkün olup olmadığından emin değilim. Word aslında giriş anahtarının preslerini işlemektedir (sanki bu eylemi bir programatik eşdeğeri "\ r \ n" ve "\ n" gibi) yeni bir paragrafın oluşturulması olarak ele alıyorum. Ben oluşur Word'de bir makro kaydetmek için


: Anahtar

girmek basılması metin "biri"

  • Yazma

    1. Ben VBA olsun:

      Selection.TypeText Text:="One" 
      Selection.TypeParagraph 
      

      Şöyle bir Word belgesi oluşturursanız

      (her kelimeden sonra Enter tuşuna basarak):

      O belgenin gövde documents.xml dosyasında şöyle

      One 
      
      Two 
      
      Three 
      
      : MSDN itibaren

      <w:body> 
          <w:p w:rsidR="00BE37B0" w:rsidRDefault="00CF2350"> 
           <w:r> 
            <w:t>One</w:t> 
           </w:r> 
          </w:p> 
          <w:p w:rsidR="00CF2350" w:rsidRDefault="00CF2350"> 
           <w:r> 
            <w:t>Two</w:t> 
           </w:r> 
          </w:p> 
          <w:p w:rsidR="00CF2350" w:rsidRDefault="00CF2350"> 
           <w:r> 
            <w:t>Three</w:t> 
           </w:r> 
          </w:p> 
          <w:sectPr w:rsidR="00CF2350" w:rsidSect="001077CC"> 
           <w:pgSz w:w="11906" w:h="16838"/> 
           <w:pgMar w:top="1440" w:right="1440" w:bottom="1440" w:left="1440" w:header="708" w:footer="708" w:gutter="0"/> 
           <w:cols w:space="708"/> 
           <w:docGrid w:linePitch="360"/> 
          </w:sectPr> 
      </w:body> 
      

      <w:p> öğesinin bir paragrafı temsil ettiğini görebiliyoruz.

      body.append(paragraph("Hi.")) 
      body.append(paragraph("My name is Alice.")) 
      body.append(paragraph("Let's code")) 
      

      Veya:

      for paragraph_text in "Hi. \nMy name is Alice.\n Let's code".split("\n"): 
          body.append(paragraph(paragraph_text.strip())) 
      

      Düzenleme:

      bu bazı içine bakıyor


      Bu çözüm Python Docx örneği takip etmek olacağını düşünüyorum Daha fazla, Word'de Shift + Enter tuşlarına basarsanız Chr(11) ekleyerek manuel satır sonu (paragraf değil) ekler. Açık XML'de, bu bir Break anlamına gelir. (: Test edilmedi feragat): Python Docx ait docx.py dosyanın baktığımızda

      , böyle bir şey gitmek için bir yol olabilir piton-docx çevirir '\ n' v0.7.2 itibariyle

      for text in "Hi. \nMy name is Alice.\n Let's code".split("\n"): 
          run = makeelement('r') 
          run.append(makeelement('t', tagtext=text)) 
          run.append(makeelement('br')) 
          body.append(run) 
      
  • +0

    Sizin analizi doğru görünüyor, ama body.append (paragraf) bir çözüm olarak görünmüyor. Bu sadece yukarıda gördüğünüz sorunu "Bir", "İki" ve "Üç" paragraflarla yeniden oluşturur. İstediğim şey bir şekilde paragraflar arasındaki bu fazladan boşluktan kurtulan bir şey, muhtemelen bir şekilde bir paragraf elemanının tek bir satır sonu karakterini tanıması. – user1427661

    +0

    @ user1427661 benim düzenleme konusuna bakın. –

    0

    , ve açıkladığınız davranışı sağlayan <w:br/> öğelerine bir dizgede '' karakterleri '. Ayrıca '\ t' karakterlerini <w:tab/> öğelerine de çevirir.

    • Document.add_paragraph()
    • Paragraph.add_run()

    ve atanan dizeleri için:

    • Paragraph.text
    • Bu davranış sağlanan dizeleri için kullanılabilir Run.text

    2

    Vuruşunuzda add_break() numaralı telefonu arayarak python-docx kullanarak arabanızın iadesine ulaşabilirsiniz. Örneğin: paragraflar oluşturulur nasıl

    doc = Document() 
    p = doc.add_paragraph() 
    run = p.add_run() 
    run.add_break() 
    

    python-docx reference

    İlgili konular