パンダはxlrdを使用してExcelファイルを読み込みますが、残念ながらxlrdはセル内で使用されている書式設定を解析しません。
openpyxlパッケージでは文字列の書式設定を処理できますが、古い.xls書式の場合のみです。おそらく、基礎となるXMLデータを調べるカスタムパーサを記述する必要があります。
.xlsxファイルは、xmlファイルのコレクションを含むzipアーカイブです。あなたが見てする必要がある2つの
- file.xlsx/XL/sharedStrings.xml
- file.xlsx/XL /ワークシート/ sheet1.xmlている(または、あなたのシートの名前は何でも)
最初のファイルには、文字列が含まれ、書式はです。 2番目のファイルには、シート内のセルと、それらが参照する文字列が含まれています。文字列は、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の
例:<row>
要素内に含まれている<c>
<?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>
電池素子。 <v>
の値は、共有文字列の順序/インデックスへの参照です。そのため、セルA1
は0番目のsharedStringの値を持ち、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 +'と 'O²+'でしょうか? –