Python Docx jest całkiem dobrą biblioteką do generowania dokumentów Microsoft Word dla czegoś, co nie dotyczy bezpośrednio wszystkich rzeczy COM - niemniej jednak mam pewne ograniczenia. Czy ktokolwiek ma pojęcie, jak umieścić powrót karetki w tekście? Chcę, aby akapit zawierał wiele wierszy bez dodatkowej przestrzeni między nimi. Jednak wypisywanie łańcucha, który oddziela linie od zwykłego "\ n", nie działa. Nie używa się też & # 10 ani & # 13. Jakieś inne myśli, czy ta struktura jest zbyt ograniczona do czegoś takiego?Python Docx Powrotu karetki
Odpowiedz
Nie jestem pewien, czy jest to możliwe. Wygląda na to, że program Word w rzeczywistości traktuje naciśnięcia klawisza Enter (traktuję to działanie jako programowy odpowiednik "\ r \ n" i "\ n") jako tworzenie nowego akapitu.
Gdybym rejestrowania makra w programie Word, który składa się z:
- Wpisanie tekstu "jeden"
- Naciśnięcie Enter
uzyskać VBA od:
Selection.TypeText Text:="One"
Selection.TypeParagraph
Jeśli utworzyć dokument programu Word, który wygląda tak (naciskając klawisz ENTER po każdym słowie):
One
Two
Three
Ciało tego dokumentu wygląda to w pliku documents.xml
:
<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>
Od MSDN widzimy, że element <w:p>
reprezentuje akapit.
Myślę, że rozwiązanie to byłoby do naśladowania w Python Docx:
body.append(paragraph("Hi."))
body.append(paragraph("My name is Alice."))
body.append(paragraph("Let's code"))
czyli
for paragraph_text in "Hi. \nMy name is Alice.\n Let's code".split("\n"):
body.append(paragraph(paragraph_text.strip()))
Edit:
patrząc na to jakiś więcej, jeśli wciśniesz Shift + Enter w Word dodaje ręczną podział wiersza (a nie akapit) poprzez dodanie Chr(11)
. W Open XML przekłada się to na Break.
Patrząc na akt Python Docx docx.py
, coś takiego może być droga (disclaimer: nie testowane):
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)
Począwszy od v0.7.2, python-docx przekłada '\ n' oraz "\ r" znaków w ciągu znaków do elementów <w:br/>
, co zapewnia zachowanie, które opisujesz. Przekłada również znaki \ t na elementy.
Takie zachowanie jest dostępny na smyczki przewidzianych do:
Document.add_paragraph()
Paragraph.add_run()
i ciągów przypisanych:
Paragraph.text
Run.text
Możesz uzyskać swój powrót karetki za pomocą python-docx dzwoniąc pod numer add_break()
. Na przykład:
doc = Document()
p = doc.add_paragraph()
run = p.add_run()
run.add_break()
- 1. Python file.write tworzenie dodatkowego powrotu karetki
- 2. Kodowanie powrotu karetki XML
- 3. vba userforms powrót powrotu karetki
- 4. Python print nic nie wypisuje znakiem powrotu karetki
- 5. Jak szukać powrotu karetki w Eclipse
- 6. Wstaw znak powrotu karetki do vim
- 7. Usuwanie powrotu karetki w MySQL DB
- 8. Usunąć powrotu karetki i przestrzeni z ciągu
- 9. Usuwanie w czasie rzeczywistym powrotu karetki w powłoce
- 10. zapytań SQL do powrotu karetki w ciąg znaków i ostatecznie usuwanie powrót karetki
- 11. Broszura do powrotu karetki w java na windows na konsoli
- 12. powrotu karetki i nowa linia z Java i readline()
- 13. Dodaj powrotu karetki do zasobu ciąg w WPF
- 14. SQL Usuń tylko początkowe lub końcowe znaki powrotu karetki
- 15. Dlaczego funkcja wstawiania znaków powrotu karetki (\ r) do pliku data.table?
- 16. Jak zamienić powrót karetki
- 17. Jak zachować wiersze tabeli w python-docx?
- 18. W jaki sposób następuje iteracja za pomocą spakowanego pliku powrotu karetki przy użyciu Pythona 2.7?
- 19. Utwórz powrót karetki w ciągu PHP?
- 20. Usuwanie powrotu karetki i nowej linii od końca ciągu w C#
- 21. Jak używać gvim do dodawania powrotu karetki (aka ENTER) do wzoru?
- 22. Scalanie wielu wierszy w jedną kolumnę za pomocą wierszy z wierszami powrotu karetki
- 23. Czy możemy dodać znak powrotu karetki ("\ n") do pliku resx w telefonie z systemem Windows?
- 24. Użycie REPLACE w zapytaniu SQL dla znaków powrotu nowej linii/karetki
- 25. Jak dodać znaki nowej linii lub powrotu karetki do opisu na facebook graph API
- 26. Dlaczego JavaScript tylko oblicza liczbę znaków powrotu karetki jako jeden znak, gdy jest dwa?
- 27. Jak wysłać powrót karetki przez telnet?
- 28. generowanie dynamicznych dokumentów docx
- 29. Powrót karetki w C?
- 30. Python Napisz bajty do pliku
Twoja analiza, w jaki sposób są tworzone akapity wygląda w porządku, ale body.append (pkt) nie wydaje się być rozwiązaniem. To właśnie odtwarza problem, który pokazałeś powyżej, z akapitami "Jeden", "Dwa" i "Trzy". To, czego chcę, to coś, co w jakiś sposób pozbywa się tej dodatkowej przestrzeni między akapitami, prawdopodobnie w jakiś sposób, że element akapitu rozpoznaje znak pojedynczej kreski. – user1427661
@ user1427661 zobacz moją edycję. –