我需要实现word文档的设计。我必须使用 python-docx 库以编程方式将该文档的页面布局设置为 2 列布局。请帮忙。
我正在使用 python-docx 并尝试替换表保存样式中的文本。 这就是我的桌子的样子
我已经成功地使用以下内容替换了段落:
from docx import Document
def replace_string(doc, to_replace, replacement):
for p in doc.paragraphs:
if to_replace in p.text:
inline = p.runs
for i in range(len(inline)):
if to_replace in inline[i].text:
text = inline[i].text.replace(to_replace, replacement)
inline[i].text = text
return 1
Run Code Online (Sandbox Code Playgroud)
但它不适用于表格和单元格。我也尝试过这个:
def replace_in_table(doc, to_replace, replacement):
for table in doc.tables:
for cell in table.cells:
for p in cell.paragaphs:
if to_replace in p.text:
inline = p.runs
for i in range(len(inline)):
if to_replace in inline[i].text:
text = inline[i].text.replace(to_replace, replacement)
inline[i].text = text …Run Code Online (Sandbox Code Playgroud) 我有以下代码,用于保存表、修改表,然后复制表。我是copy_table_after()从这里来的。
def copy_table_after(table, paragraph):
tbl, p = table._tbl, paragraph._p
new_tbl = deepcopy(tbl)
p.addnext(new_tbl)
def replaceText(document, search, replace):
for table in document.tables:
for row in table.rows:
for paragraph in row.cells:
if search in paragraph.text:
paragraph.text = replace
document = Document('Test.docx')
template = document.tables[0]
replaceText(document, '<<VALUE_TO_FIND>>', 'New value')
paragraph = document.add_paragraph()
copy_table_after(template, paragraph)
Run Code Online (Sandbox Code Playgroud)
我的问题是,当我运行时copy_table_after,它会复制带有新文本的表。有没有办法“保存”表格,然后在对原始表格进行更改后复制原始表格?
因此,列宽是使用一列中所有单元格的单元格宽度来完成的,如下所示:
from docx import Document
from docx.shared import Cm
file = /path/to/file/
doc = Document(file)
table = doc.add_table(4,2)
for cell in table.columns[0].cells:
cell.width = Cm(1.85)
Run Code Online (Sandbox Code Playgroud)
然而,行高是使用行来完成的,但我不记得上周我是如何做到的。
现在我设法找到一种方法来引用表中的行,但似乎无法回到那种方式。可以使用 add_row 方法更改高度,但无法创建没有行的表格,因此顶行将始终为默认高度,约为 1.6 厘米。
有一种方法可以在不使用 add_paragraph 的情况下访问段落,有谁知道如何在不使用 add_row 方法的情况下访问行,因为我曾经将表中的行高设置为默认值。
我已经尝试过这个但它不起作用:
row = table.rows
row.height = Cm(0.7)
Run Code Online (Sandbox Code Playgroud)
但是虽然这不会给出错误,但它对高度也没有影响。
浏览完文档后,我试图弄清楚如何将行距应用于单个段落,但似乎任何行距都只能使用样式在全局范围内完成。有没有办法隔离特定段落,同时使文档的其余部分保持正常?像这样:
import docx
from docx.enum.text import WD_LINE_SPACING
text = 'Lorem ipsum...'
doc = Document()
para = doc.add_paragraph('text')
para.line_spacing = WD_LINE_SPACING.ONE_POINT_FIVE
Run Code Online (Sandbox Code Playgroud)
上面的代码当然不起作用,我只能猜测这是因为 line_spacing 是样式级别的格式。尝试在不执行样式的情况下对其进行本地化的另一点是文档一旦构建后的可移植性,如果您将可能已通过电子邮件发送到另一台计算机的任何内容从一个文档剪切并粘贴到另一个文档,则存在恢复为“正常”样式的风险另一台机器的。可以通过不使用文档级别样式来防止这种情况(这是一种令人讨厌的解决方法,但这是一个单词问题而不是 docx 问题。)
我正在尝试制作一个程序,该程序将基于文本文件创建文档,到目前为止,它工作得很好。我决定这样做,以便更容易地使用图像和其他在 Python-docx 中不支持/难以有效使用的东西。在使用完全相同的代码但使用 Doc = document() 时,我使用 Doc = document("template.docx")。修改后,文件保存到不同的docx文件中。我在尝试使用模板时遇到这些错误。创建新文档时没有错误。
回溯(最近一次调用最后一次):
File "C:\Users\bgrif\Desktop\QPA.py", line 45, in <module>
Doc.add_heading("QuizPax 28/02/2019",0)
File "C:\Users\bgrif\AppData\Local\Programs\Python\Python37-32\lib\site-packages\docx\document.py", line 39, in add_heading
return self.add_paragraph(text, style)
File "C:\Users\bgrif\AppData\Local\Programs\Python\Python37-32\lib\site-packages\docx\document.py", line 56, in add_paragraph
return self._body.add_paragraph(text, style)
File "C:\Users\bgrif\AppData\Local\Programs\Python\Python37-32\lib\site-packages\docx\blkcntnr.py", line 39, in add_paragraph
paragraph.style = style
File "C:\Users\bgrif\AppData\Local\Programs\Python\Python37-32\lib\site-packages\docx\text\paragraph.py", line 111, in style
style_or_name, WD_STYLE_TYPE.PARAGRAPH
File "C:\Users\bgrif\AppData\Local\Programs\Python\Python37-32\lib\site-packages\docx\parts\document.py", line 78, in get_style_id
return self.styles.get_style_id(style_or_name, style_type)
File "C:\Users\bgrif\AppData\Local\Programs\Python\Python37-32\lib\site-packages\docx\styles\styles.py", line 109, in get_style_id
return self._get_style_id_from_name(style_or_name, style_type)
File "C:\Users\bgrif\AppData\Local\Programs\Python\Python37-32\lib\site-packages\docx\styles\styles.py", line 139, in _get_style_id_from_name
return self._get_style_id_from_style(self[style_name], …Run Code Online (Sandbox Code Playgroud) 我想使用 python 在 docx 文件中写入/包含两个以上的表。如何使用 python 将此结构写入 docx 文件中的表?
我为单个表尝试了以下代码。现在我想在一个 docx 中创建 2 个表。
table = document.add_table(rows=rows_no,cols=1)
Timeline = row[5]
print (row[0],row[3],"Timing:",row[5])
cells = table.add_row().cells
cells[0].paragraphs[0].add_run( Compliance_requirements).bold = True
cells[0].paragraphs[1].add_run( "Obs: "+Finding_Description).text = True
cells[0].paragraphs[2].add_run( "requitements: "+requirements).text = True
cells[0].paragraphs[3].add_run( "Timeline: Need"+Timeline+" days of notice period .").text = True
document.add_paragraph()
Run Code Online (Sandbox Code Playgroud) 请问如何将pdf转换为docx。我尝试使用 pdfminer 转换为 html 来提取文本,但看起来仍然不够好。
我将此作为 python-docx 问题提交: https: //github.com/python-openxml/python-docx/issues/805,但被要求在此处展开讨论。
https://python-docx.readthedocs.io/en/latest/user/styles-using.html意味着我应该能够更改标题字体样式,如下所示:
font = doc.styles['Heading 1'].font
font.name = 'Times New Roman'
font.size = docx.shared.Pt(16)
Run Code Online (Sandbox Code Playgroud)
但这不起作用:生成的文档对所有标题都使用 Calibri。(它们也是蓝色的,标题 1 有下划线,我也需要以某种方式消除它。)
它也无法更改特定标题上的字体,也无法删除标题的 Latent_styles 。
下面是一个测试程序,它尝试了所有三种方法,但标题 1 和 2 仍然显示为蓝色 Calibri,尽管所有尝试都将其更改为 Times New Roman:
import docx
doc = docx.Document()
# Deleting heading latent styles seems to do nothing:
latent_styles = doc.styles.latent_styles
latent_styles['Heading 1'].delete()
latent_styles['Heading 2'].delete()
# Setting the Normal font works:
font = doc.styles['Normal'].font
font.name = 'Times New Roman'
font.size = docx.shared.Pt(12)
# Setting heading styles doesn't do …Run Code Online (Sandbox Code Playgroud) 我正在使用 python-docx 创建文档。我想将此文件保存到 AWS S3。目前我正在做的是,我正在创建 .docx 文件并使用 .docx 将其保存在本地document.save('filename.docx')。然后使用s3.meta.client.upload_file('/path/to/file/filename.docx', bucket, 'filename.docx')将其保存到S3中。有什么方法可以将 .docx 文件直接保存到 AWS S3 中而不将其保存在本地?
python-docx ×10
python ×7
python-3.x ×5
docx ×3
amazon-s3 ×1
line-spacing ×1
ms-word ×1
pdf ×1
pdfminer ×1
row-height ×1