我有以下代码,用于保存表、修改表,然后复制表。我是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,它会复制带有新文本的表。有没有办法“保存”表格,然后在对原始表格进行更改后复制原始表格?
我有CSV一个如下所示的文件:
user,password,company
Administrator, 123456, test_company
test_user1, abcdf, test_company1
test_user2, 789, test_company2
Run Code Online (Sandbox Code Playgroud)
这应该是一个带有user,password和company作为标题的表格。
如何docx使用 python 将该结构作为表写入文件中?
我想使用正则表达式 (java RegEx)在MS Word ( .docx ) 文档中进行替换:
\n\nExample: \n \xe2\x80\xa6, \xd1\x81 \xd0\xbe\xd0\xb4\xd0\xbd\xd0\xbe\xd0\xb9 \xd1\x81\xd1\x82\xd0\xbe\xd1\x80\xd0\xbe\xd0\xbd\xd1\x8b, \xd0\xb8 %SOME_TEXT% \xd0\xb8\xd0\xbc\xd0\xb5\xd0\xbd\xd1\x83\xd0\xb5\xd0\xbc\xd0\xbe\xd0\xb5 \xd0\xb2 \xd0\xb4\xd0\xb0\xd0\xbb\xd1\x8c\xd0\xbd\xd0\xb5\xd0\xb9\xd1\x88\xd0\xb5\xd0\xbc \xc2\xab\xd0\x97\xd0\xb0\xd0\xba\xd0\xb0\xd0\xb7\xd1\x87\xd0\xb8\xd0\xba\xc2\xbb, \xd0\xb2 \n \xd0\xbb\xd0\xb8\xd1\x86\xd0\xb5 %SOME_TEXT% \xd0\xb4\xd0\xb5\xd0\xb9\xd1\x81\xd1\x82\xd0\xb2\xd1\x83\xd1\x8e\xd1\x89\xd0\xb5\xd0\xb3\xd0\xbe \xd0\xbd\xd0\xb0 \xd0\xbe\xd1\x81\xd0\xbd\xd0\xbe\xd0\xb2\xd0\xb0\xd0\xbd\xd0\xb8\xd0\xb8 %SOME_TEXT% \xd1\x81 \xd0\xb4\xd1\x80\xd1\x83\xd0\xb3\xd0\xbe\xd0\xb9 \xd1\x81\xd1\x82\xd0\xbe\xd1\x80\xd0\xbe\xd0\xbd\xd1\x8b, \n \xd0\xb7\xd0\xb0\xd0\xba\xd0\xbb\xd1\x8e\xd1\x87\xd0\xb8\xd0\xbb\xd0\xb8 \xd0\xbd\xd0\xb0\xd1\x81\xd1\x82\xd0\xbe\xd1\x8f\xd1\x89\xd0\xb8\xd0\xb9 \xd0\x94\xd0\xbe\xd0\xb3\xd0\xbe\xd0\xb2\xd0\xbe\xd1\x80 \xd0\xbe \xd0\xbd\xd0\xb8\xd0\xb6\xd0\xb5\xd1\x81\xd0\xbb\xd0\xb5\xd0\xb4\xd1\x83\xd1\x8e\xd1\x89\xd0\xb5\xd0\xbc: \xe2\x80\xa6\nRun Code Online (Sandbox Code Playgroud)\n\n我尝试使用Apache POI - XWPF获取文本模板(如%SOME_TEXT%) 并替换文本,但不能保证替换,因为 POI 分隔运行 => 我得到类似这样的内容():System.out.println(run.getText(0))
\xe2\x80\xa6\n, \xd1\x81 \xd0\xbe\xd0\xb4\xd0\xbd\xd0\xbe\xd0\xb9 \xd1\x81\xd1\x82\xd0\xbe\xd1\x80\xd0\xbe\xd0\xbd\xd1\x8b, \xd0\xb8 \n%\nSOME_TEXT\n%\n\n\xd0\xb8\xd0\xbc\xd0\xb5\xd0\xbd\xd1\x83\xd0\xb5\xd0\xbc\xd0\xbe\xd0\xb5 \n\xd0\xb2 \xd0\xb4\xd0\xb0\xd0\xbb\xd1\x8c\xd0\xbd\xd0\xb5\xd0\xb9\xd1\x88\xd0\xb5\xd0\xbc \xc2\xab\xd0\x97\xd0\xb0\xd0\xba\xd0\xb0\xd0\xb7\xd1\x87\xd0\xb8\xd0\xba\xc2\xbb, \xd0\xb2 \xd0\xbb\xd0\xb8\xd1\x86\xd0\xb5\n\n%\nSOME\n_\nTEXT\n%\nRun Code Online (Sandbox Code Playgroud)\n\n代码示例:
\n\nFileInputStream fis = new FileInputStream(new File("document.docx"));\nXWPFDocument document = new XWPFDocument(fis);\nList<XWPFParagraph> …Run Code Online (Sandbox Code Playgroud) 请问如何将pdf转换为docx。我尝试使用 pdfminer 转换为 html 来提取文本,但看起来仍然不够好。
我有一个关于 python 的结构化文本。我想将其保存为 docx 文件。
就像是
text = "A simple text\n Structured"
with open('docx_file.docx', 'w') as f:
f.write(text)
Run Code Online (Sandbox Code Playgroud) 我将此作为 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) 我经常需要使用 LibreOffice 将许多(> 1000).docx 文档导出为 PDF。这是一个示例文档:test.docx。以下代码可以工作,但在 Windows 上速度相当慢(每个 PDF 文档平均 3.3 秒):
import subprocess, docx, time # first do: pip install python-docx
for i in range(10):
doc = docx.Document('test.docx')
for paragraph in doc.paragraphs:
paragraph.text = paragraph.text.replace('{{num}}', str(i))
doc.save('test%i.docx' % i) # these 4 previous lines are super fast - a few ms
t0 = time.time()
subprocess.call(r'C:\Program Files\LibreOffice\program\soffice.exe --headless --convert-to pdf test%i.docx --outdir . --nocrashreport --nodefault --nofirststartwizard --nolockcheck --nologo --norestore"' % i)
print('PDF generated in %.1f sec' % (time.time()-t0)) …Run Code Online (Sandbox Code Playgroud) 我正在使用 python-docx 但我不理解或检索任何更改标题样式(从粗体到正常)的方法。我的代码是:
import docx
from docx.shared import RGBColor
from docx.shared import Pt
from docx.dml.color import ColorFormat
from docx.enum.style import WD_STYLE_TYPE
#format only the filename as return text
def format_filename(fname):
index = fname.rfind('\\')
font.color.rgb = RGBColor(255,0,0)
#IF statement for structuring the fine name
if index>0:
filename = fname[index + 1, len(fname)]
else:
index = fname.rfind('/')
filename = fname[index + 1 : len(fname)]
return filename
#print all the file into docx
def print_file(file):
font.bold = False
font.color.rgb = RGBColor(0,0,0)
cnt = …Run Code Online (Sandbox Code Playgroud) 我正在使用 Apache POI 处理 .docx 文件。
我有 .docx ,其中有1 行、1 列表。
XWPFTable table = document.getTables().get(0);
XWPFTableRow copiedRow = table.getRow(0);
table.addRow(copiedRow);
Run Code Online (Sandbox Code Playgroud)
上面的代码成功复制了行,因此表现在有2 rows。
但是,我也想改变复制的行。
XWPFTable table = document.getTables().get(0);
XWPFTableRow copiedRow = table.getRow(0);
copiedRow.getTableCells().get(0).setText("SOME MODIFICATION HERE"); // <- setting some data
table.addRow(copiedRow);
Run Code Online (Sandbox Code Playgroud)
问题是......修改影响了两行。原来的第一个和刚刚添加的第二个都会受到影响。
我还尝试显式构造新行,如下所示:
copiedRow.getTableCells().get(0).setText("SOME MODIFICATION");
XWPFTableRow newRow = new XWPFTableRow(copiedRow.getCtRow(), table);
table.addRow(newRow);
Run Code Online (Sandbox Code Playgroud)
...但结果仍然相同:两行都被修改,而不仅仅是第二行。
我试图使示例尽可能简单。谢谢你的帮助!
我正在尝试在文档的中心生成一个带有图像的DocX文档,但我已经尝试了几样但没有任何结果.图像显示但位于左上角.addImageToBody函数来自MS网站(http://msdn.microsoft.com/en-us/library/office/bb497430(v=office.15).aspx).我试过使用HorizontalPosition类(http://msdn.microsoft.com/en-us/library/documentformat.openxml.drawing.wordprocessing.horizontalposition(v=office.14).aspx)但是没有工作为了我.
添加图片和通话功能:
MainDocumentPart mainPart = document.MainDocumentPart;
ImagePart imagePart = mainPart.AddImagePart(ImagePartType.Png);
using (FileStream stream = new FileStream(@"C:...\Logo.png", FileMode.Open))
{
imagePart.FeedData(stream);
}
AddImageToBody(document, mainPart.GetIdOfPart(imagePart));
Run Code Online (Sandbox Code Playgroud)
和功能:
private static void AddImageToBody(WordprocessingDocument wordDoc, string relationshipId)
{
int defX = 854;
int defY = 350;
int size = 3000;
// Define the reference of the image.
var element =
new DocumentFormat.OpenXml.Wordprocessing.Drawing(
new DW.Inline(
new DW.Extent() { Cx = defX * size, Cy = defY * size },
new DW.EffectExtent()
{
LeftEdge = …Run Code Online (Sandbox Code Playgroud)