python读取word中active控件值

该博客介绍了如何使用Python将Word文档转换为HTML,并通过BeautifulSoup解析提取特定对象参数,最终保存到Excel表格中。主要涉及pywin32、BeautifulSoup和openpyxl库,用于处理包含ActiveX控件的Word文档,例如选项按钮,以便进行进一步的数据处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

word中出现了这种鬼东西:
在这里插入图片描述
问卷很多,同事要帮忙提出来。研究了下,找到py的最佳方法,直接上代码

大概思路就是先转html,然后提取html就简单了,注意一定要用pywin32转,其他的转发,丢东西,这是微软的active控件,只能他们自家转的好。

#!/usr/bin/env python 
# coding=utf-8 
import win32com.client as win32
from bs4 import BeautifulSoup
import os
from openpyxl import Workbook
def docx2html():
    word = win32.gencache.EnsureDispatch('Word.Application')
    p=os.path.abspath("./test.docx")
    print (p)
    doc = word.Documents.Open(p)
    # doc.SaveAs('./2.pdf', 17)
    doc.SaveAs('D:\mypy\dataWash\wang_han\zz.html', 10)
    doc.Close()
    word.Quit()
def parse(f="./zz.html"):
    wb=Workbook()
    ws=wb.active
    ws.title="res"
    start=1
    
    with open(f,"rb") as f:
        data=f.read()
        soup = BeautifulSoup(data, 'html.parser')
        oblist=soup.select("object")
        for ob in oblist:
            paramlist=ob.select("param")
            for param in paramlist:
                name=param.get("name")
                if name=="Value":
                    ws.cell(row=start,column=1).value=name
                    ws.cell(row=start, column=2).value = param.get("value")
                    start+=1
    wb.save("caoyang.xlsx")
parse()

转出来的html

 </object></span><span style='font-size:16.0pt;font-family:仿宋_GB2312'>省公司级单位本部</span></p>
            </td>
        </tr>
        <tr style='height:25.0pt'>
            <td width=590 style='width:442.8pt;border:solid white 1.0pt;border-top:none;
  background:white;padding:0cm 5.4pt 0cm 5.4pt;height:25.0pt'>
                <p class=MsoNormal style='text-indent:32.0pt;line-height:30.0pt'><span
                        lang=EN-US style='font-size:16.0pt;font-family:仿宋_GB2312'><object
                        classid="CLSID:8BD21D50-EC42-11CE-9E0D-00AA006002F3" id=OptionButton2
                        width=17 height=37>
   <param name=DisplayStyle value=5>
   <param name=Size value="462;990">
   <param name=Value value=0>
   <param name=GroupName value=1>
   <param name=FontName value=微软雅黑>
   <param name=FontHeight value=315>
   <param name=FontCharSet value=134>
   <param name=FontPitchAndFamily value=34>
  </object></span><span style='font-size:16.0pt;font-family:仿宋_GB2312'>地市公司级单位</span></p>
            </td>
        </tr>
        <tr style='height:25.0pt'>
            <td width=590 style='width:442.8pt;border:solid white 1.0pt;border-top:none;
  background:white;padding:0cm 5.4pt 0cm 5.4pt;height:25.0pt'>
                <p class=MsoNormal style='text-indent:32.0pt;line-height:30.0pt'><span
                        lang=EN-US style='font-size:16.0pt;font-family:仿宋_GB2312'><object
                        classid="CLSID:8BD21D50-EC42-11CE-9E0D-00AA006002F3" id=OptionButton3
                        width=17 height=37>
   <param name=DisplayStyle value=5>
   <param name=Size value="462;990">
   <param name=Value value=0>
   <param name=GroupName value=1>
   <param name=FontName value=微软雅黑>
   <param name=FontHeight value=315>
   <param name=FontCharSet value=134>
   <param name=FontPitchAndFamily value=34>
  </object>

仔细观察,其实就是找他: 或者value=1.然后一切搞定。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值