◆ xltx から xlsx は zip の中の [Content_Types].xml ファイルの 「template」 を 「sheet」 に変更する
◆ xlsx から xltx は変更する内容を逆にする

xls のテンプレート版が xlt
xlsx のテンプレート版が xltx です

昔の xls 形式に対する xlt ファイルはデータは全く同じものでした
単純に拡張子を変えるだけ
エクセルが開くときの拡張子を見て読み取り専用ファイルとして扱います

ですが xlsx と xltx ではデータにも違いがあるので xltx を xlsx にしたいときやその逆をしたいとき 単純に拡張子を変えただけだとファイルが壊れていると言われて開くことができません

エクセルがあれば開いて形式変えて保存するだけで変換できますが エクセルで開くの遅いしもっと機械的にデータ変換をしたい とかエクセル入ってないパソコンで変換したいということもあると思います

変換方法

末尾が x のオフィス系ファイルのフォーマットは xml ベースで zip 化しているデータなので拡張子を zip にすれば中身を見れます

zip ファイルのトップはこんなフォルダ構造になっています

xlsxzip


xlsx と xltx の違いは [Content_Types].xml ファイルだけです

<Override PartName="/xl/workbook.xml" ContentType="application/vnd.openxmlformats-officedocument.spreadsheetml.template.main+xml" />

xltx ファイルだとこういうタグがあるので 「template」を 「sheet」 に置換します
xlsx から xltx に変換する場合は逆に 「sheet」 を 「template」 にします

書き換えたら拡張子を zip から xlsx または xltx に変更して完了です
問題なくエクセルで開くことができます

フォルダの diff はバージョン管理ソフト使うと楽だった

上に書いた変更する場所を調べるために同じデータのエクセルファイルを xlsx と xltx の両方のフォーマットで保存して差分を探してたときのことです

zip ファイルとして解凍したすべてのファイルから差分を探したいのですが エクセルの A1 セルに「あ」というデータを入れただけのファイルでも解凍したときのファイル数はそれなりにあります
1 ファイルに対する diff ツールはあるのですが全ファイルにやっていくのはさすがに大変です

フォルダ単位で比較してくれるツール探そうかと考えていたのですが 思いつきでバージョン管理ソフトを使うことにしました

(1) リポジトリをつくる
(2) xlsx を解凍したフォルダをそこにコピーして全部をコミット
(3) (2) のフォルダを削除して代わりに xltx を解凍したフォルダをコピー
(4) コミット時の差分をみる

という手順で簡単にフォルダ単位の差分が見れました

本来の使い方とはちょっと違いますが簡単にフォルダ単位で差分が見れてとっても便利です