【PYTHON】自动化office 03 python内置xml包处理docx和xlsx文档

发布于:2024-10-24 编辑:匿名 来源:网络

背景:我每天都写计划,每天都写计划,写怀疑人生……所以我们可以用python来帮助我们实现那些重复性很高的计划。由于环境不支持连接外网,所以没有第三方包。

那些都好用的文字处理包都不能用了,难度一下子就上来了……至少有python3(对于py2来说,难度就更高了。) 注:由于代码都是在内网上写的,所以完整的无法提供版本。

例子。本文主要关注XML处理word/xlsx的一些陷阱。

分析:docx是doc的扩展,xlsx是xls的扩展。它们都是标准格式,似乎与其他制造商竞争兼容性。

本质上,它是一个 zip 文件。我们来一一看看DOCX。

我们先来看word,它是一个docx格式的文件。格式是指以下结构。

如果我们使用zip解压docx文件,我们可以看到以下信息。 docProps/app.xml 是一些应用程序信息,例如Manufacturer docProps/core.xml 是文件的一些基本信息,例如谁修改的、何时修改的。

因此,在传输word文件时应注意隐私和安全。 docProps/custom.xml是一些自定义信息,例如KEYword/media。

媒体资源,比如图片,word/theme是一些主题,word/document.xml是我们的文档。这是本文的重点。

代码语言:md copy├── [Content_Types].xml├── docProps│ ├── app. xml│? ├── core.xml│? └── custom.xml├── _rels└── word ├── document.xml ├── fontTable.xml ├── media │? ├── image1.png │? ├── image2.png │ ├── image3.png │ ├── image4.png │ ├── image5.png │ ├── image6.png │ ├── image7.png │ └── image8.png ├── _rels │ └── document.xml.rels ├── settings.xml ├── styles.xml└── theme └── theme1.xmldocument.xml 文件解析并读取数据。我们使用浏览器打开xml文件(直接将xml文件拖到浏览器中即可)。

您将看到类似于以下的格式。这是一个 xml 文件。

我们可以使用python的xml.dom.minidom来解析这个文件。由于是zip文件,所以必须先使用zipfile解压文件并读取里面的document.xml文件。

代码语言:python 代码运行次数:0 复制Cloud Studio代码并运行 import zipfileimport os ,sysfrom xml.dom import minidomfilename = "aaaa.docx" #我们的word文件 #namespace namespace = {"w":" zipfile.ZipFile( filename,'r') as docx: with docx.open('word/ document.xml', 'r') as docx_xml: xml_content = docx_xml.read() root = minidom.parseString(xml_content).documentElement body = root. childNodes[0]w:body 是我们文档的主体部分 w:p 是段落 w:tbl 是表格 w:t 是记录文本。所有数据,我们可以直接使用 getElementsByTagName('w:t') 来编码: Number of python code running: 0 复制 Cloud Studio 代码并运行 for ) #w:t 不是具体数据,实际上有一个节点它调用#textdocument.xml文件解析并写入数据读取数据很简单,直接遍历w:t即可,但是写入数据比较麻烦。

尤其是新的数据,看着那一对复杂的格式,让人头疼。 1.幸运的是,我们可以使用cloneNode来克隆节点。

(elementree 不用了,巨大的坑啊,不剧透了。)这样我们就可以遍历w:t的匹配值了。

如果存在匹配,则返回 w:t 中最接近的 w:p(段落)。只是w:t不方便。

,通常建议直接复制一段。否则格式会太复杂。

如果是表格,则只需行即可。 2.然后使用insertBefore在指定位置插入。

3. 不需要的数据可以使用removeChild删除。 4、修改 数据完成后,就可以写回word文件了。

我们重新打开word,看看是否是文档。代码语言:python 代码运行次数:0 Copy Cloud Studio code run #首先找到一个节点。

我刚刚在这里找到了 ref_node = body.getElementsByTagName('w:t')[12].parentNode.parentNode# 克隆节点并修改数据 new_node = ref_node.cloneNode(1) new_node.firstChild.firstChild.firstChild.nodeValue = "使用minidom修改的数据" # 插入到指定位置 ref_node.parentNode.insertBefore(new_node, ref_node) #删除(这里就不演示了) (removeChild(ref_node) 'newfile.docx','w') as zout:for item在 zin.infolist() 中:if item.filename == "word/document.xml": #如果是文档就用我们修改的 zout.writestr(item,root.toxml().encode())else:zout.writestr(item, zin.read (item.filename))document.xml文件解析验证,可以自行验证。 XLS的内容要做(坑的开始。

)我们还是用zip解压查看代码语言:md copy ├── [Content_Types].xml├── docProps│ ├── app.xml│ ├── core.xml│ └── 自定义 .xml├── _rels└── .xml └── 工作表 ├──sheet1.xml ├──sheet2.xml └──sheet3.xmldocProps 与单词 one 类似。我们主要看xl目录。

xl/sharedStrings.xml是共享字符,我们实际的数据是 xl/worksheets/sheet1.xml 这里的xl/worksheets/sheet1.xml就是我们的sheetxl/workbook.xml的sharedStrings.xml,记录了sheet等信息。这个xml文件非常简单。

它是一个字符串列表。这个文件主要记录那些共享的值,所以这里的值应该尽可能唯一。

索引是表中记录的值,所以这个位置也很重要。基本上就是遍历,索引在shardStrings中返回。

否则,将被插入并返回 len()-1。我就不写 example.xl /worksheets/sheet1.xml 其实这个文件格式比较简单。

数据放置在sheetData中。表面。

sheetData与tablerow类似,即c行是col列。 v是value(是字符串,即使看到数字也是字符串(小坑))。

row 中的跨度是记录该行中数据的列数。 r 是行号(从1开始)。

c中的r是记录列号,是excel中的A1 A2 t记录数据类型。例如,t='s'表示数据是共享的,所以你必须去sharedStrings.xml中找到它。

xl/worksheets/sheet1.xml读写:比较简单,直接遍历即可。也可以使用索引来访问。

例如, xml.etree.elementtree()[5][ROWNO][COLNO].text 是 ROWNO 行 COLNO 列的值。如果要修改,必须先deepcopy出来,然后再修改,全部修改完成后再copy回去。

不然数据会乱。这是一个巨大的陷阱。

写回 xlsx 文件与 word 相同。它只是多个文件(sharedStrings.xml)。

所以我这里就不演示了。总结1.虽然python自带的xml可以操作docx和xlsx文档,但是不推荐,因为太蛋疼了。

2、实际写代码的时候,要根据自己的情况来。抽象多个方法使编写更容易。

例如,(复制某一行,然后修改指定列的数据,最后在行尾插入这一系列操作)到一个方法中。同样的操作也非常简单。

也就是每一种循环...) 3.注意环境,docx可能有命名空间问题。 4、如果xlsx数据部分不显示,很大概率是c的行号或者列号有问题。

更糟糕的是,没有进行 DeepCopy,而是直接遍历并修改原始值。

【PYTHON】自动化office 03 python内置xml包处理docx和xlsx文档

站长声明

版权声明:本文内容由互联网用户自发贡献,本站不拥有所有权,不承担相关法律责任。如果发现本站有涉嫌抄袭的内容,欢迎发送邮件 举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。

标签:

相关文章

  • 「AI投研邦」团体会员上线!75折解锁会员权益、PDF版研报、AI峰会....

    「AI投研邦」团体会员上线!75折解锁会员权益、PDF版研报、AI峰会....

    《AI投研邦》群会员上线! 25折解锁会员权益、PDF版研究报告、AI峰会……2019年12月,我们正式推出《AI投资研究状态》。 这几十天,我们听到不少AI+企业为员工购买统一会员的诉求。 经过与AI+企业的多次沟通和尝试,“AI投研邦”团体会员服务于1月22日正式上线。 我们重点整合

    06-18

  • AT&S半导体封装载板项目落户重庆

    AT&S半导体封装载板项目落户重庆

    美通社:近日,高端印刷电路板制造商AT&S宣布,为应对高性能计算日益增长的市场需求,公司将扩产其战略支柱 类型业务为半导体封装载板。 计划在重庆建设新工厂,并扩大奥地利莱奥本工厂的产能。 为此,该公司计划未来五年投资近10亿欧元,主要用于在重庆建设新工厂。 这项投资

    06-06

  • 特朗普隔空喊话他不要的无人水下航行器是什么?

    特朗普隔空喊话他不要的无人水下航行器是什么?

    12月16日,美国国防部官员表示,中国海军在南海捕获了一艘美国水下无人潜艇。 中国国防部回应称,为防止不明装置危及过往舰艇航行安全和人员安全,中国海军一艘救生艇对该装置进行了识别验证,并将通过适当的手段。 然而,一向推崇推特治国政策的特朗普却发文:我们不要这艘潜

    06-18

  • 58同城宣布任命首任CFO,或为境外上市做准备

    58同城宣布任命首任CFO,或为境外上市做准备

    据6月27日消息,国内分类信息网站58同城今日宣布任命周浩为公司首任CFO。 分析师人士指出,此举意在为公司海外上市做准备。 美国IPO准备工作。     58同城CFO周浩  据悉,这是58同城自2016年成立以来聘请的第一位CFO。 58同城公关部人士透露,58同城还没有聘请过CFO。

    06-17

  • 连云港新设20亿基金

    连云港新设20亿基金

    投资界(ID:pedaily)4月11日消息,江苏洋泾石化集团有限公司近日发起设立连云港徐圩新区产业投资基金(以下简称“连云港徐圩新区”) “徐威新区产业投资基金”),基金规模20.1亿元,盛世聚鑫担任基金管理人。 该基金主要投资于石化行业上下游,重点关注石化等战略新兴产业

    06-18

  • 请保留这份笔记本电脑陷阱指南

    请保留这份笔记本电脑陷阱指南

    购买电脑对于很多人来说一直是一件非常烦人的事情。 当你打开购物网站时,琳琅满目的商品总是让人眼花缭乱。 CPU、内存、显卡、硬盘,选择一台合适的电脑需要考虑的各种硬件参数并不比买车容易。 如果你对硬件参数一无所知,那么买电脑无异于去相亲。 你不仅害怕错过眼前的美

    06-21

  • 诞生125年后,圆形方向盘即将变成方形?

    诞生125年后,圆形方向盘即将变成方形?

    前段时间,丰田公布了bZ纯电动专属系列首款车型bZ4X的详细信息。 新车定位中型纯电动SUV,车身尺寸与RAV4类似。 新车的外观我大致了解了一下。 它与8个月前上海车展上展示的概念车没有什么不同。 虽然值得肯定,但也在情理之中。 真正让我惊讶的是方向盘——它采用了异形方向

    06-21

  • MVG紧凑型OTA测试系统订单量持续攀升

    MVG紧凑型OTA测试系统订单量持续攀升

    领先创新天线测试技术的系统制造商法国Microwave Vision集团(以下简称MVG)公布其专为实验室设计的高精度多探头天线测试和测量系统 StarLab 的订单猛增 44%。 *StarLab 是 MVG 紧凑型便携式测试设备“Little Big Lab”系列的一部分,是同类产品中设计最全面的产品之一。 经过

    06-06

  • 收入增加,利润减少!云众科技今年一季度利润下滑超20%

    收入增加,利润减少!云众科技今年一季度利润下滑超20%

    科创板上市公司云众科技(60.SH)一季度实现营业收入1.35亿元,同比增长21.37%;归属于母公司股东的净利润。 26万元,同比下降22.53%。

    06-17

  • ASML 柏林火灾最新消息:DUV 线路正常,部分 EUV 系统受到影响

    ASML 柏林火灾最新消息:DUV 线路正常,部分 EUV 系统受到影响

    继上周火灾之后,ASML 提供了有关其德国柏林工厂受损情况的最新消息。 Dutch Semiconductor Components是全球最大的光刻系统供应商;提供用于制造集成电路的机器。 该公司本周表示,其深紫外(DUV)和极紫外光刻(EUV)生产线均受到影响。 但在 DUV 系统可以恢复的地方,EUV

    06-08

  • 京东斥资3.71亿港元认购彩生活5%股份,双方达成深度战略合作

    京东斥资3.71亿港元认购彩生活5%股份,双方达成深度战略合作

    据投资界消息,京东集团、旗下京东物流集团、京东数码科技集团与彩生活服务集团股份有限公司达成深度战略合作,同时彩生活将向京东发行新股,京东将出资3.71亿港元认购5股彩生活持股比例。 彩生活成立于2007年,是一家集物业服务、建筑智能化、社区服务于一体的科技型、综合性

    06-18

  • 【融资24小时】2022年11月3日投融资事件汇总及明细

    【融资24小时】2022年11月3日投融资事件汇总及明细

    今日国内市场共发生13起投资披露事件,医疗健康领域4起(智新浩正、科艺药业、科医医疗)联创、集智医疗)、先进制造案例3个(上海超硅半导体、钛金科技、瑶芯微)、智能硬件案例2个(智翔光电、鄂企翔)、区块链案例1个(成都链安)、汽车交通案例1个(上海)车友汇)、企业

    06-17