팬더는 xlrd를 사용하여 Excel 파일을 읽으며, 불행히도 xlrd는 셀 내에서 사용 된 형식을 구문 분석하지 않습니다.
openpyxl 패키지는 문자열 형식을 처리 할 수 있지만 이전 .xls 형식 만 처리 할 수 있습니다. 기본 XML 데이터를 보는 사용자 정의 파서를 작성해야 할 것입니다.
.xlsx 파일은 xml 파일 모음을 포함하는 zip 아카이브 일뿐입니다. 당신이 볼 필요 두 사람은
- file.xlsx/XL/sharedStrings.xml
- file.xlsx/XL/워크 시트/sheet1.xml 있습니다 (또는 시트의 이름은 무엇이든)
첫 번째 파일의 문자열은 이고 형식은입니다. 두 번째 파일에는 시트의 셀과 참조하는 문자열이 포함됩니다. 문자열은 sharedStrings.xml에서 순서대로 참조됩니다.
예 sharedStrings.xml 파일 :
<?xml version="1.0" encoding="UTF-8"?>
<sst xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main" count="3" uniqueCount="3">
<si>
<r>
<t>O</t>
</r>
<r>
<rPr>
<vertAlign val="subscript"/><sz val="11"/><color theme="1"/><rFont val="Calibri"/><family val="2"/><scheme val="minor" />
</rPr>
<t>2</t>
</r>
<r>
<rPr>
<vertAlign val="superscript"/><sz val="11"/><color theme="1"/><rFont val="Calibri"/><family val="2"/><scheme val="minor" />
</rPr>
<t>+</t>
</r>
</si>
<si>
<r>
<t>H</t>
</r>
<r>
<rPr>
<vertAlign val="subscript"/><sz val="11"/><color theme="1"/><rFont val="Calibri"/><family val="2"/><scheme val="minor" />
</rPr>
<t>2</t>
</r>
<r>
<rPr>
<sz val="11"/><color theme="1"/><rFont val="Calibri"/><family val="2"/><scheme val="minor" />
</rPr>
<t>O</t>
</r>
</si>
<si>
<r>
<t>O</t>
</r>
<r>
<rPr>
<vertAlign val="superscript"/><sz val="11"/><color theme="1"/><rFont val="Calibri"/><family val="2"/><scheme val="minor" />
</rPr>
<t>2+</t>
</r>
</si>
</sst>
각 <si>
요소는 텍스트의 덩어리가 여기
은 일례의 스크린 캡 시트 탁월하다. <r>
요소는 일련의 문자 및 서식입니다. <t>
요소가 실제 문자이며, 앞에있는 <rPr>
요소는 스타일/서식입니다. <vertAlign>
요소에서 위 첨자와 아래 첨자가 언제 구분되는지 구분할 수 있습니다. sheet1.xml의 예 :
<?xml version="1.0" encoding="UTF-8"?>
<worksheet xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" xmlns:x14ac="http://schemas.microsoft.com/office/spreadsheetml/2009/9/ac" mc:Ignorable="x14ac">
<dimension ref="A1:A3" />
<sheetViews>
<sheetView tabSelected="1" workbookViewId="0">
<selection activeCell="A4" sqref="A4" />
</sheetView>
</sheetViews>
<sheetFormatPr defaultRowHeight="15" x14ac:dyDescent="0.25" />
<sheetData>
<row r="1" spans="1:1" ht="18.75" x14ac:dyDescent="0.35">
<c r="A1" t="s">
<v>0</v>
</c>
</row>
<row r="2" spans="1:1" ht="18" x14ac:dyDescent="0.35">
<c r="A2" t="s">
<v>1</v>
</c>
</row>
<row r="3" spans="1:1" ht="17.25" x14ac:dyDescent="0.25">
<c r="A3" t="s">
<v>2</v>
</c>
</row>
</sheetData>
<pageMargins left="0.7" right="0.7" top="0.75" bottom="0.75" header="0.3" footer="0.3" />
<pageSetup orientation="portrait" r:id="rId1" />
</worksheet>
<row>
요소 내에 포함 <c>
셀 소자. <v>
값은 공유 문자열의 순서/색인에 대한 참조입니다. 따라서 셀 A1
은 0 번째 공유 문자열의 값을 가지며 0
에 이어 2
이라는 첨자가 붙고 그 다음에 위 첨자 +
이옵니다.: Excel 파일을 구문 분석을 시작하려면
<si>
<r>
<t>O</t>
</r>
<r>
<rPr>
<vertAlign val="subscript"/><sz val="11"/><color theme="1"/><rFont val="Calibri"/><family val="2"/><scheme val="minor" />
</rPr>
<t>2</t>
</r>
<r>
<rPr>
<vertAlign val="superscript"/><sz val="11"/><color theme="1"/><rFont val="Calibri"/><family val="2"/><scheme val="minor" />
</rPr>
<t>+</t>
</r>
</si>
, 당신은 사용할 수 있습니다
import zipfile
from lxml import etree
z = zipfile.ZipFile('file.xlsx')
with z.open('xl/sharedStrings.xml') as fp:
ss = etree.fromstring(fp.read())
with z.open('xl/worksheets/sheet1.xml') as fp:
sh1 = etree.fromstring(fp.read())
z.close()
# get the namespaces
ssns = ss.nsmap
if None in ssns:
ssns['none'] = ssns.pop(None)
sh1ns = sh1.nsmap
if None in sh1ns:
sh1ns['none'] = sh1ns.pop(None)
text_list = ss.xpath('//none:si', namespaces=ssns)
cell_list = sh1.xpath('//none:c', namespaces=sh1ns)
당신은 당신이 원하는 형식으로 포맷을 변환하는 파서를 작성해야합니다.
그래서 텍스트는 아래 첨자 및 위 첨자 글꼴 옵션을 사용하여 셀 내에서 서식이 지정됩니까? – James
맞아요. – rahulv88
O2 +와 O2 +가되어야할까요? –