用xlrd处理excel的时候,报了以下的错误:
xlrd.biffh.XLRDError: Unsupported format, or corrupt file:Expected BOF record; found '<?xml ve'
后来发现,这个应该是一个xml类型的文件。为了提取表格内的内容,直接用xml的包进行操作。
import xml.dom.minidom
dom = xml.dom.minidom.parse('filename')
root = dom.documentElement
首先获取文件内的xml内容。
将这个xml文件导出到一个txt内,分析xml里面的内容。
截取其中一小段进行分析:
<Row>
<Cell ss:StyleID="s21"><Data ss:Type="String"> 名称 </Data></Cell>
<Cell ss:StyleID="s21"><ss:Data ss:Type="String" xmlns="http://www.w3.org/TR/REC-html40"><B> <Font html:Face="宋体" x:CharSet="134">法人或负责人</Font><Font> </Font></B></ss:Data></Cell>
<Cell ss:StyleID="s21"><Data ss:Type="String"> 电 话 </Data></Cell>
<Cell ss:StyleID="s21"><Data ss:Type="String"> 移动电话 </Data></Cell>
<Cell ss:StyleID="s21"><Data ss:Type="String"> 传 真 </Data></Cell>
<Cell ss:StyleID="s21"><Data ss:Type="String"> 地 址 </Data></Cell>
<Cell ss:StyleID="s21"><Data ss:Type="String"> 邮 编 </Data></Cell>
</Row>
一开始想直接提取最内存的<data>标签:
use = root.getElementsByTagName('Data')
content = use.firstChild.data
想要提取“名称”,直接加一个计数的num,再num%7 == 0 进行提取。
但是第二行中,data标签不是最内层,计数就全乱了。
之后采取这几个标签就一层一层的提取。
use = root.getElementsByTagName('Row')
for li in use:
temp = li.getElementsByTagName('Cell')[0]
content = temp.getElementsByTagName('Data')[0].firstChild.data
Row标签为最外层,取第一个Cell标签,再取其中的Data标签。打印出来内容。
done。
网友评论