.XLSXファイルの分析:はじめに、セルスタイル

少し前までは、義務の問題として、PL / SQL、つまりまったく接続されていない.NETの言語を使用して、MS Officeファイル(主にMS WordとMS Excel)を編集する必要がありました。 この点に関して、これらのファイルの編集に関するマイクロソフトのマニュアルは、「手で何も言わなかった」と述べており、この事例に関する唯一の正気な参照サイトは、2010年から1年間更新されなかったという問題が発生しました。 Stackoverflowから少しずつすべてをまとめて、私自身の実験がほぼ即座に行われました。

いくつかコメントをしたいだけです。

最初のもの 。 主に私が個人的に出会ったことについて話します。 私は、このフォーマットの「間違った側面」に関する100%の知識を主張していません。

二番目 。 多くの人が知っているように、MS Office 2007以降のファイルは、任意のアーカイバー(WinRAR、7zipなど)を使用して開くことができるアーカイブです。

3番目 。 これらのファイルの「内部」は、ほとんどがXMLマークアップであり、誇らしげにOOXMLまたは単にOpenXMLと呼ばれています。 したがって、原則として、「手作業」でファイルを編集する原則を理解するには、Notepad(または、より便利なNotepad ++)で十分です。

したがって、あらゆる種類のレポートの生成、データベースなどからのアンロードに最も使用されるMS Excel形式から始めましょう。

.XLSX形式を扱う場合、それぞれの質問「なぜ実装されているのか...」と答える必要があります。「最適化にはそれが必要です」。 マイクロソフトは、観察者の観点から許容シートサイズをわいせつに拡大したとき(約100万行と1万6千列のポニーテール)、彼らはこれをすべて目玉のデータで埋めるマニアがいることに気付きました。 これにより、データストレージに「正面から」アプローチする場合、どのような状況でもPCの容量が増え続けても十分ではありません。 したがって、保存されるデータの量が本のデータの量よりも少ないことを確認する必要があります。 どうやってやるの? 先を見据えて:たとえば、重複行を排除します。

関心のある最初のファイルは、%file%/ xl / workbook.xmlです。 その主な目的はマニフェスト、つまり、Excelブックが実際に構成するシートのリストです。
このリストは、たとえば次のようになります。

<sheets> <sheet name="1" sheetId="1" r:id="rId1"/> <sheet name="2" sheetId="2" r:id="rId2"/> <sheet name="3" sheetId="3" r:id="rId3"/> <sheet name="4" sheetId="4" r:id="rId4"/> </sheets> 

これは、ブックに4枚のシートがあり、それらの名前が名前属性で示されていることを意味します。 各タグには、%file%/ xl / worksheetsフォルダーにファイルが必要です。 Excel自体はこれらのファイルの名前を知っているため、名前を変更しようとすると、書籍全体が破損していることがわかります。

%file%/ xlフォルダーでも、styles.xmlファイルに興味があります。

ご想像のとおり、セル設計に関する情報はここに保存されます。 そして最適化のために、かなり興味深い形式で保存されます。 このファイルは、次のセクションで構成されています。

1.フォント:

 <fonts count="2" x14ac:knownFonts="1"> <font> <sz val="11"/> <color theme="1"/> <name val="Calibri"/> <family val="2"/> <scheme val="minor"/> </font> <font> <b/> <sz val="11"/> <color theme="1"/> <name val="Calibri"/> <family val="2"/> <charset val="204"/> <scheme val="minor"/> </font> </fonts> 

理解できるように、本で使用されている一意のテキストスタイルのみがここにリストされています。 各タグは1つのスタイルです。 ネストされたタグ-太字(<b />タグ)、サイズ(<sz />)などのスタイル機能。

2.セルを埋める:

 <fills count="2"> <fill> <patternFill patternType="none"/> </fill> <fill> <patternFill patternType="gray125"/> </fill> </fills> 

ご覧のとおり、最初のオプションは塗りつぶしなしで、2番目はライブラリカラー「gray125」の塗りつぶしです。

3.ボーダー:

 <borders count="2"> <border> <left/> <right/> <top/> <bottom/> <diagonal/> </border> <border> <left style="thin"> <color indexed="64"/> </left> <right style="thin"> <color indexed="64"/> </right> <top style="thin"> <color indexed="64"/> </top> <bottom style="thin"> <color indexed="64"/> </bottom> <diagonal/> </border> </borders> 

ご覧のとおり、ここでの1つの名前は、5つの要素、4つの主要な境界線、および対角線で構成されています。

4.セルスタイル:

 <cellXfs count="4"> <xf numFmtId="0" fontId="0" fillId="0" borderId="0" xfId="0"/> <xf numFmtId="0" fontId="1" fillId="0" borderId="0" xfId="0" applyFont="1" applyAlignment="1"> <alignment wrapText="1"/> </xf> <xf numFmtId="0" fontId="0" fillId="0" borderId="1" xfId="0" applyBorder="1" applyAlignment="1"> <alignment horizontal="center" vertical="center"/> </xf> <xf numFmtId="0" fontId="1" fillId="2" borderId="1" xfId="0" applyFont="1" applyFill="1" applyBorder="1" applyAlignment="1"> <alignment horizontal="center" vertical="center"/> </xf> </cellXfs> 

そして、ここでより詳細に説明する必要があります。 シートファイルでセルスタイルを指定する場合、このセクションを参照します。 単一のスタイルである各<xf />タグは、前のセクションへのリンクのコレクションです。つまり、それ自体にはフォント宣言、境界線、および塗りつぶしが含まれていません。 いくつかの興味深い属性を詳しく見てみましょう。

  1. numFmtId-セル内のテキストの形式(日付、通貨、数値、テキストなど)を示します。 これらのタイプの完全なリストはこちらです。
  2. fontId、fillId、borderId-フォント/塗りつぶし/境界線へのリンク(それぞれセクション1、2、3を参照)。 番号は0から始まります。
  3. applyFont、applyFill、applyBorder-このセルの設計でカスタムフォント/塗りつぶし/境界線が一般的に使用されることを示します。 デフォルト値は0であるため、要素#0の例に見られるように、まったく省略できます。
  4. applyAlignment-セル内のテキストの配置が標準と異なることを示す。 デフォルト値は0ですが、「1」が指定されている場合、親タグ<xf />で
    #から始まる例に見られるように、<alignment />タグが埋め込まれています。

次に、テキストデータとシート自体のレイアウトについて話し合います。

Source: https://habr.com/ru/post/J347550/


All Articles