我正在使用Python-docx模块以编程方式创建word文档.
我希望能够将我的标题集中,在我创建的表格中将某些单词转换为粗体,并进行其他基本标记.
不幸的是,阅读模块中的源代码并没有给我带来很大的帮助.
我猜这与docx代码所基于的lxml/etree模块有关,但我对该库并不太熟悉.有任何想法吗?
我目前正在编写一个python 3程序,它解析某些docx文件并从中提取文本和图像.我一直在尝试使用docx,但它不会导入我的程序.我已经安装了lxml,Pillow和python-docx但它没有导入.当我尝试从终端使用python-docx时,我无法使用example-extracttext.py或example-makedocument.py,这让我相信安装没有正常运行.有没有办法可以检查这是否正确安装或是否有办法使其正常工作,以便我可以将其导入我的项目?我在Ubuntu 13.10上.
我试图拆开一个看起来像这样的word文档:
1.0清单项目
1.1清单项目
1.2清单项目
2.0清单项目
它存储在docx中,我正在使用python-docx来尝试解析它.不幸的是,它在开始时丢失了所有编号.我正在尝试识别每个有序列表项的开头.
python-docx库也允许我访问样式,但我无法弄清楚如何确定样式是否是列表样式.
到目前为止,我一直在搞乱函数和检查输出,但标准格式是这样的:
for p in doc.paragraphs:
s = p.style
while s.base_style is not None:
print s.name
s = s.base_style
print s.name
Run Code Online (Sandbox Code Playgroud)
我一直在尝试搜索自定义样式,但所有结束都在"正常",而不是"ListNumber".
我已经尝试在文档,段落和运行中搜索样式而没有运气.我也试过搜索p.text,但如前所述,编号不会持续存在.
以下代码尝试使用landscape方向,但文档创建为potrait.
可以建议问题出在哪里?
from docx import Document
from docx.enum.section import WD_ORIENT
document = Document()
section = document.sections[-1]
section.orientation = WD_ORIENT.LANDSCAPE
document.add_heading('text')
document.save('demo.docx')
Run Code Online (Sandbox Code Playgroud)
当我以XML格式读回代码时
<w:document>
<w:body>
<w:p>
<w:pPr>
<w:pStyle w:val="Heading1"/>
</w:pPr>
<w:r>
<w:t>TEXT</w:t>
</w:r>
</w:p>
<w:sectPr w:rsidR="00FC693F" w:rsidRPr="0006063C" w:rsidSect="00034616">
<w:pgSz w:w="12240" w:h="15840" w:orient="landscape"/>
<w:pgMar w:top="1440" w:right="1800" w:bottom="1440" w:left="1800" w:header="720" w:footer="720" w:gutter="0"/>
<w:cols w:space="720"/>
<w:docGrid w:linePitch="360"/>
</w:sectPr>
</w:body>
</w:document>
Run Code Online (Sandbox Code Playgroud)
假设部分标签应该位于顶部而不是底部的TEXT标签之上,我不太清楚XML.
我正在尝试使用python-docx库从.docx文件中获取图像索引.我能够提取图像的名称,图像的高度和宽度.但不是它在word文件中的索引
import docx
doc = docx.Document(filename)
for s in doc.inline_shapes:
print (s.height.cm,s.width.cm,s._inline.graphic.graphicData.pic.nvPicPr.cNvPr.name)
Run Code Online (Sandbox Code Playgroud)
产量
21.228 15.920 IMG_20160910_220903848.jpg
Run Code Online (Sandbox Code Playgroud)
事实上,我想知道是否有更简单的方法来获取图像名称,例如s.height.cm以cm为单位获取高度.我的主要要求是了解图像在文档中的位置,因为我需要提取图像并对其进行一些处理,然后再将图像放回到同一位置
我正在尝试从 word 文件中获取文本并突出显示所需的文本,并且老化想要将文本保存到新的 word 文件中。
我能够使用 ANSI 转义序列突出显示文本,但我无法将其添加回 word 文件。
from docx import Document
doc = Document('t.docx')
##string present in t.docx '''gnjdkgdf helloworld dnvjk dsfgdzfh jsdfKSf klasdfdf sdfvgzjcv'''
if 'helloworld' in doc.paragraphs[0].text:
high=doc.paragraphs[0].text.replace('helloworld', '\033[43m{}\033[m'.format('helloworld'))
doc.add_paragraph(high)
doc.save('t1.docx')
Run Code Online (Sandbox Code Playgroud)
得到这个错误。
ValueError: All strings must be XML compatible: Unicode or ASCII, no NULL bytes or control characters
Run Code Online (Sandbox Code Playgroud) 我希望能够接受来自Python的MS Word(.docx)文档的所有更改,最好使用python-docx模块.
我知道如何在Perl中做(参见下面的参考资料),但是想在我的Python程序中使用本机代码来做同样的事情.井
任何的想法?
use strict;
use Win32::OLE qw(in with valof OVERLOAD);
use Win32::OLE::Const 'Microsoft.Word'; # wd constants
use Win32::OLE::Variant;
$Win32::OLE::Warn = 3;
my $true = Variant(VT_BOOL, 1);
my $false = Variant(VT_BOOL, 0);
use File::Spec;
use File::Basename;
## Original & New File
my $DocFile = &transform_path($ARGV[0]);
my $NewFile = ($ARGV[1] ? &transform_path($ARGV[1]) : $DocFile);
[ -e $DocFile ] || die "*** Cannot open '$DocFile'\n";
### Transform path
sub transform_path {
my $path = shift;
if ( ! File::Spec->file_name_is_absolute($path) …Run Code Online (Sandbox Code Playgroud) 我无法弄清楚为什么“ Delaware”一词没有从下面的代码中提取出来。其他所有字符都会被提取。谁能提供从下面的Docx文件中提取“ Delaware”一词的代码,而无需手动更改文件?
输入:
import docx
import io
import requests
url = 'https://github.com/python-openxml/python-docx/files/1996979/Delaware_Test.docx'
file = io.BytesIO(requests.get(url).content)
for text in docx.Document(file).paragraphs:
print(text.text)
Run Code Online (Sandbox Code Playgroud)
输出:
适用法律本协议应根据所在州的法律进行解释和解释,但不包括法律冲突规定。《联合国国际货物销售合同公约》的规定不适用于本协议。
最奇怪的部分是,如果我对文档中的“ Delaware”一词(ee.gg.,粗体/粗体,键入该词)进行任何处理然后保存,则“ Delaware”一词不再缺少下次我运行代码。但是,仅保存文件而不更改单词并不能解决问题。您可能会说解决方案是手动更改单词,但实际上我正在处理成千上万个此类文档,而手动逐个更改每个文档没有意义。
使用python-docx时,缺少文档文本的答案似乎提供了可能无法提取“ Delaware”的原因,但未提供解决方案。谢谢。
我的问题是,当我应用删除线或双删除线格式并保存文件时,它不会反映在输出文件中。
以下代码无法解决问题:
from docx import Document
document = Document()
p = document.add_paragraph()
p.add_run('Strike through the following text').strike = True
document.save('demo.docx')
Run Code Online (Sandbox Code Playgroud) 我正在处理的 docx 文件有一个带有注释的超链接。
例如:https: //www.someurl.com/ddoai9101? %20dsadoi -包含学生地址的文件
https://www.someurl.com/ddoai9101?%2a1231w1 -包含学生成绩的文件
我正在尝试提取 Excel 工作表中的超链接和注释。我正在使用 python-docx 库来提取超链接和文本。但是,python-docx 库将为您提供文本或超链接。这就是我获得超链接的方式:
from docx import Document
from docx.opc.constants import RELATIONSHIP_TYPE as RT
document = Document("StudentData.docx")
rels = document.part.rels
for rel in rels:
if rels[rel].reltype == RT.HYPERLINK:
url = rels[rel]._target
Run Code Online (Sandbox Code Playgroud)
这就是我得到文本的方式
texts = document.paragraphs
for t in texts:
print(t.text)
Run Code Online (Sandbox Code Playgroud)
现在的问题是文本不显示超链接,我不知道哪个评论与哪个超链接相关联。有没有办法使用 python 从 docx 文件中获取带有超链接的文本?