元ファイル
workbook.xmlに5枚のシートが登録されています。関連付けIDで参照しています。
関連付けにそれぞれのワークシートのパスとIDがあります。
ワークシートの中からsheet1.xmlを確認してみました。
sharedStrings.xmlには各シートのセルで使われている全ての文字列が格納されています。
シート間を跨ぐ参照を含む計算処理がある場合ではcalcChain.xmlの比較なども行いたいところですが、今回は単純な分割ですので省略しました。
操作後のファイル
Spreadsheet APIによって分割し、生成された「monthlyreport_製品A通年売上.xslx」の内容を元ファイルと比較します。
元のファイルではSpreadsheetMLの名前空間のプレフィックスが省略されていましたが、ツール処理時に追加されています。スクリーンショットの通り、動作には特に影響しません。
defaultThemeVersionの値も保持されています。themeパーツ側に変更がなければ元ファイルと同じテーマが適用されることになります。
mc:Ignorableに登録されている拡張である、xr名前空間の要素xr:revisionPtrは保持されています。属性の値も同じであるので、Excelで開いたときには元ファイルと同じ情報を示すはずです。
顕著な違いとして、sheets要素の子のsheet要素が1つだけになっています。シートごとに別のxlsxファイルにする操作を行ったので期待通りに動作していることが分かります。
ワークシートの分割を行ったため、ワークシートの関連付けは期待通り「製品A通年売上」のシートであるsheet1.xmlのみが残っています。
元のxlsxと同じ参照のワークシートの内容を見てみました。元ファイルから大きな変更はありません。必要箇所のみを変更すれば他の箇所の変更が必要ない、OOXMLで扱うことによるパーツ化の恩恵といえるでしょう。
r="A4"、s="3"のx:c要素の値v要素を見てみましょう。元ファイルと違いますね。この場所は文字列が格納されていました。次の箇所でsharedStrings.xmlを見てみましょう。
この例ではsheet1.xmlでパーツ名に変更がありませんでしたが、パーツ名に変更があった場合も関連付けを適切に設定すれば期待通り表示されます。
「製品A通算売上」のシートに登場しない「製品D 通年売上」「製品E 通年売上」などが削除されています。
「製品A通算売上」のシートに登場する文字列の順序が変わっています。sst内の要素は位置で参照されるため、sheet1.xmlで期待通りの表示を得るためにはsharedStrings.xmlでの変更を反映させる必要がありました。