こんなツールが私以外に需要あるかどうかわからなかったのですが、作った本人である自分は結構使う機会があるので公開することにします。
ツールの用途を一言でいうと「エクセルファイル(xls, xlsx)のテキストビューワ」です。ターミナルやコマンドプロンプトで作業している時に、ふと「このエクセルファイルの中身なんだっけ?」と確認したくなることがあります。多くは業務に必要な情報がエクセルファイルの中に格納されているケースで、「エクセルを起動して編集したいわけじゃないけど、ちょっと内容を確認したい」という場合がほとんどです。あと人によってはエクセルをインストールしているとも限らないので、LibreOffice などの代替製品をインストールしていたりするんだけど、起動に時間がかかって面倒だったり・・・ 理由は様々あると思いますが、「ちょっとした理由でエクセルファイルの中身だけ確認したい」けど「ターミナル作業中にアプリケーションを切り替えるのが面倒」といった、自分にはよくあるケースで役立つと考えています。
ツールそのものはこちらからダウンロードできるようにしておきました。自作の Node.js アプリですが、先日このブログでも紹介した pkg を使って単体で実行可能なバイナリ化しました(Linux, Windows, MacOS 用。ただし MacOS 用は未検証です)。リンク先から自分の PC プラットフォームに合うものを選んでダウンロードしてください。ダウンロード後は PATH の通ったフォルダに "xls-viewer" という名前で(Windows の場合は "xls-viewer.exe" という名前で)保存しておくとコマンドプロンプトやターミナルから直接実行できるようになります。この名前で保存しておくことで、どのプラットフォーム向けであっても "xls-viewer" というツール名で実行できるようになり、以下ではこの前提で説明を続けます(ファイル名を変えずに保存した場合は自分のプラットフォーム向けのファイル名に読み替えてください)。
【エクセルファイルのサンプル】
以下でその使い方を紹介しますが、このサンプル・エクセルファイルを使った例を紹介します。こちらも併せてダウンロードしておいてください:
https://github.com/dotnsf/xls-viewer/raw/main/sample01.xlsx
ちなみにこのサンプル・エクセルファイル sample01.xlsx の中身をエクセルそのもので開くと以下のようなものです。2つのシート Sheet1 と Sheet2(2は全角文字)から構成されています。Sheet1 は(実は1箇所だけ式を使ってますが)特に文字装飾要素も使わない、ごくシンプルなシートです:
一方 Sheet2 は式も使っていますし、日本語や文字装飾も併用しています。またわざと空の行や空の列も含めています。このエクセルファイルをサンプルとして xls-viewer を使う例を以下で紹介します:
【xls-viewer の使い方】
以下で xls-viewer の使いかたを紹介します。準備として xls-viewer(ファイル名を変えていない場合は元のファイル名に読みかえてください)を PATH の通ったフォルダ(/usr/local/bin など)に配置してください。そしてコマンドプロンプトやターミナルを開き、サンプルエクセルファイル sample01.xlsx のあるフォルダに移動しておきます。
まずは単純に(オプションなしで)実行して見ます。xls-viewer に続いて対象のエクセルファイル名(今回の場合は sample01.xlsx)をフルパスまたは相対パスで指定して実行します。今回は実行時のパスに sample01.xlsx が存在している想定なので、パス指定なしでも実行できるはずです。成功すると以下のような表示になります(見ている人の環境によっては変な所で改行されているように見えるかもしれませんが、実際には必要な半角スペースのパディングなども加えて正しく改行されている、はず)。各シートから表示されているテキスト情報を抜き出して表示しています:
指定したファイル(sample01.xlsx)に含まれている2つのシート毎に結果が表示されています。このように特にオプションを指定しない場合は全てのシートを対象に表示します。
特定のシートだけを対象にしたい場合は、"--sheets=(シート名)" というオプションで指定します。チート名は半角カンマ(,)で分けて複数指定することも可能です(Sheet2の "2" は全角なので注意してください):
デフォルト指定だと列名や行番号は表示されません。表示したい場合は "--label=1" オプションを付けて実行します:
上のラベルを付けた結果を見るとわかりますが、対象のシート内の有効なエリアだけが表示されています(A 列目や1行目にはデータがないので表示されていません)。常に A1 セルも含めて表示する場合は "--a1=1" オプションを付けて実行します:
各列の幅はデフォルトだと半角20文字となっています。この値を変えて表示するには "--row_max_width" オプションを指定して実行します。以下の例では「半角10文字」で表示しています。B2 セルや D3 セルの長めのテキストが半角10文字で折り返している様子が確認できます:
デフォルトでは各セルの「表示されている内容」をそのまま表示していますが、セルの表示式が定義されている場合に、その式だけを表示するには "--formula=1" オプションを指定します。実行結果にはセルに定義されている式だけが表示されます:
なお "--border=0" オプションを付けると、シートの枠が表示されなくなります:
これらのオプションは組み合わせて使うことも可能です。結果をファイルにリダイレクトしながら使えば後からファイルとして開くこともできて、個人的には我ながら重宝しているコマンドです。
上述の説明では実行可能ファイルだけを紹介していますが、実際にはソースコード含めて公開しています。作り方に興味ある方はこちらもどうぞ:
https://github.com/dotnsf/xls-viewer
ツールの用途を一言でいうと「エクセルファイル(xls, xlsx)のテキストビューワ」です。ターミナルやコマンドプロンプトで作業している時に、ふと「このエクセルファイルの中身なんだっけ?」と確認したくなることがあります。多くは業務に必要な情報がエクセルファイルの中に格納されているケースで、「エクセルを起動して編集したいわけじゃないけど、ちょっと内容を確認したい」という場合がほとんどです。あと人によってはエクセルをインストールしているとも限らないので、LibreOffice などの代替製品をインストールしていたりするんだけど、起動に時間がかかって面倒だったり・・・ 理由は様々あると思いますが、「ちょっとした理由でエクセルファイルの中身だけ確認したい」けど「ターミナル作業中にアプリケーションを切り替えるのが面倒」といった、自分にはよくあるケースで役立つと考えています。
ツールそのものはこちらからダウンロードできるようにしておきました。自作の Node.js アプリですが、先日このブログでも紹介した pkg を使って単体で実行可能なバイナリ化しました(Linux, Windows, MacOS 用。ただし MacOS 用は未検証です)。リンク先から自分の PC プラットフォームに合うものを選んでダウンロードしてください。ダウンロード後は PATH の通ったフォルダに "xls-viewer" という名前で(Windows の場合は "xls-viewer.exe" という名前で)保存しておくとコマンドプロンプトやターミナルから直接実行できるようになります。この名前で保存しておくことで、どのプラットフォーム向けであっても "xls-viewer" というツール名で実行できるようになり、以下ではこの前提で説明を続けます(ファイル名を変えずに保存した場合は自分のプラットフォーム向けのファイル名に読み替えてください)。
【エクセルファイルのサンプル】
以下でその使い方を紹介しますが、このサンプル・エクセルファイルを使った例を紹介します。こちらも併せてダウンロードしておいてください:
https://github.com/dotnsf/xls-viewer/raw/main/sample01.xlsx
ちなみにこのサンプル・エクセルファイル sample01.xlsx の中身をエクセルそのもので開くと以下のようなものです。2つのシート Sheet1 と Sheet2(2は全角文字)から構成されています。Sheet1 は(実は1箇所だけ式を使ってますが)特に文字装飾要素も使わない、ごくシンプルなシートです:
一方 Sheet2 は式も使っていますし、日本語や文字装飾も併用しています。またわざと空の行や空の列も含めています。このエクセルファイルをサンプルとして xls-viewer を使う例を以下で紹介します:
【xls-viewer の使い方】
以下で xls-viewer の使いかたを紹介します。準備として xls-viewer(ファイル名を変えていない場合は元のファイル名に読みかえてください)を PATH の通ったフォルダ(/usr/local/bin など)に配置してください。そしてコマンドプロンプトやターミナルを開き、サンプルエクセルファイル sample01.xlsx のあるフォルダに移動しておきます。
まずは単純に(オプションなしで)実行して見ます。xls-viewer に続いて対象のエクセルファイル名(今回の場合は sample01.xlsx)をフルパスまたは相対パスで指定して実行します。今回は実行時のパスに sample01.xlsx が存在している想定なので、パス指定なしでも実行できるはずです。成功すると以下のような表示になります(見ている人の環境によっては変な所で改行されているように見えるかもしれませんが、実際には必要な半角スペースのパディングなども加えて正しく改行されている、はず)。各シートから表示されているテキスト情報を抜き出して表示しています:
$ xls-viewer sample01.xlsx Sheet1 : +----+------+------+---+--+-----+ | 1 | 3 | | | | | +----+------+------+---+--+-----+ | 3 | 2 | safa | | | saf | +----+------+------+---+--+-----+ | 2 | sa | | | | | +----+------+------+---+--+-----+ | 43 | safd | | | | | +----+------+------+---+--+-----+ | | | | 5 | | | +----+------+------+---+--+-----+ Sheet2 : +----------------------+--+----------------------+--+------------+ | 少し長めのテキストを | | | | 太字 | | 入力 | | | | | +----------------------+--+----------------------+--+------------+ | | | 更に123を追加したテ | | Italic | | | | キスト | | | +----------------------+--+----------------------+--+------------+ | | | | | 色付き | +----------------------+--+----------------------+--+------------+ | aaa | | 3 | | 下線 | +----------------------+--+----------------------+--+------------+ | | | 6 | | | +----------------------+--+----------------------+--+------------+ | | | | | | +----------------------+--+----------------------+--+------------+ | | | | | | +----------------------+--+----------------------+--+------------+ | | | | | 2行とばし | +----------------------+--+----------------------+--+------------+ | | | | | | +----------------------+--+----------------------+--+------------+ | | | | | | +----------------------+--+----------------------+--+------------+ | | | | | | +----------------------+--+----------------------+--+------------+ | 3行とばし | | | | | +----------------------+--+----------------------+--+------------+
指定したファイル(sample01.xlsx)に含まれている2つのシート毎に結果が表示されています。このように特にオプションを指定しない場合は全てのシートを対象に表示します。
特定のシートだけを対象にしたい場合は、"--sheets=(シート名)" というオプションで指定します。チート名は半角カンマ(,)で分けて複数指定することも可能です(Sheet2の "2" は全角なので注意してください):
$ xls-viewer --sheets=Sheet2 sample01.xlsx
Sheet2 :
+----------------------+--+----------------------+--+------------+
| 少し長めのテキストを | | | | 太字 |
| 入力 | | | | |
+----------------------+--+----------------------+--+------------+
| | | 更に123を追加したテ | | Italic |
| | | キスト | | |
+----------------------+--+----------------------+--+------------+
| | | | | 色付き |
+----------------------+--+----------------------+--+------------+
| aaa | | 3 | | 下線 |
+----------------------+--+----------------------+--+------------+
| | | 6 | | |
+----------------------+--+----------------------+--+------------+
| | | | | |
+----------------------+--+----------------------+--+------------+
| | | | | |
+----------------------+--+----------------------+--+------------+
| | | | | 2行とばし |
+----------------------+--+----------------------+--+------------+
| | | | | |
+----------------------+--+----------------------+--+------------+
| | | | | |
+----------------------+--+----------------------+--+------------+
| | | | | |
+----------------------+--+----------------------+--+------------+
| 3行とばし | | | | |
+----------------------+--+----------------------+--+------------+
デフォルト指定だと列名や行番号は表示されません。表示したい場合は "--label=1" オプションを付けて実行します:
$ xls-viewer --sheets=Sheet2 --label=1 sample01.xlsx
Sheet2 :
+====+======================+===+======================+===+============+
| | B | C | D | E | F |
+====+======================+===+======================+===+============+
| 2 | 少し長めのテキストを | | | | 太字 |
| | 入力 | | | | |
+====+----------------------+---+----------------------+---+------------+
| 3 | | | 更に123を追加したテ | | Italic |
| | | | キスト | | |
+====+----------------------+---+----------------------+---+------------+
| 4 | | | | | 色付き |
+====+----------------------+---+----------------------+---+------------+
| 5 | aaa | | 3 | | 下線 |
+====+----------------------+---+----------------------+---+------------+
| 6 | | | 6 | | |
+====+----------------------+---+----------------------+---+------------+
| 7 | | | | | |
+====+----------------------+---+----------------------+---+------------+
| 8 | | | | | |
+====+----------------------+---+----------------------+---+------------+
| 9 | | | | | 2行とばし |
+====+----------------------+---+----------------------+---+------------+
| 10 | | | | | |
+====+----------------------+---+----------------------+---+------------+
| 11 | | | | | |
+====+----------------------+---+----------------------+---+------------+
| 12 | | | | | |
+====+----------------------+---+----------------------+---+------------+
| 13 | 3行とばし | | | | |
+====+----------------------+---+----------------------+---+------------+
上のラベルを付けた結果を見るとわかりますが、対象のシート内の有効なエリアだけが表示されています(A 列目や1行目にはデータがないので表示されていません)。常に A1 セルも含めて表示する場合は "--a1=1" オプションを付けて実行します:
$ xls-viewer --sheets=Sheet2 --label=1 --a1=1 sample01.xlsx
Sheet2 :
+====+===+======================+===+======================+===+============+
| | A | B | C | D | E | F |
+====+===+======================+===+======================+===+============+
| 1 | | | | | | |
+====+---+----------------------+---+----------------------+---+------------+
| 2 | | 少し長めのテキストを | | | | 太字 |
| | | 入力 | | | | |
+====+---+----------------------+---+----------------------+---+------------+
| 3 | | | | 更に123を追加したテ | | Italic |
| | | | | キスト | | |
+====+---+----------------------+---+----------------------+---+------------+
| 4 | | | | | | 色付き |
+====+---+----------------------+---+----------------------+---+------------+
| 5 | | aaa | | 3 | | 下線 |
+====+---+----------------------+---+----------------------+---+------------+
| 6 | | | | 6 | | |
+====+---+----------------------+---+----------------------+---+------------+
| 7 | | | | | | |
+====+---+----------------------+---+----------------------+---+------------+
| 8 | | | | | | |
+====+---+----------------------+---+----------------------+---+------------+
| 9 | | | | | | 2行とばし |
+====+---+----------------------+---+----------------------+---+------------+
| 10 | | | | | | |
+====+---+----------------------+---+----------------------+---+------------+
| 11 | | | | | | |
+====+---+----------------------+---+----------------------+---+------------+
| 12 | | | | | | |
+====+---+----------------------+---+----------------------+---+------------+
| 13 | | 3行とばし | | | | |
+====+---+----------------------+---+----------------------+---+------------+
各列の幅はデフォルトだと半角20文字となっています。この値を変えて表示するには "--row_max_width" オプションを指定して実行します。以下の例では「半角10文字」で表示しています。B2 セルや D3 セルの長めのテキストが半角10文字で折り返している様子が確認できます:
$ xls-viewer --sheets=Sheet2 --label=1 --a1=1 --row_max_width=10 sample01.xlsx
Sheet2 :
+====+===+============+===+============+===+============+
| | A | B | C | D | E | F |
+====+===+============+===+============+===+============+
| 1 | | | | | | |
+====+---+------------+---+------------+---+------------+
| 2 | | 少し長めの | | | | 太字 |
| | | テキストを | | | | |
| | | 入力 | | | | |
+====+---+------------+---+------------+---+------------+
| 3 | | | | 更に123を | | Italic |
| | | | | 追加したテ | | |
| | | | | キスト | | |
+====+---+------------+---+------------+---+------------+
| 4 | | | | | | 色付き |
+====+---+------------+---+------------+---+------------+
| 5 | | aaa | | 3 | | 下線 |
+====+---+------------+---+------------+---+------------+
| 6 | | | | 6 | | |
+====+---+------------+---+------------+---+------------+
| 7 | | | | | | |
+====+---+------------+---+------------+---+------------+
| 8 | | | | | | |
+====+---+------------+---+------------+---+------------+
| 9 | | | | | | 2行とばし |
+====+---+------------+---+------------+---+------------+
| 10 | | | | | | |
+====+---+------------+---+------------+---+------------+
| 11 | | | | | | |
+====+---+------------+---+------------+---+------------+
| 12 | | | | | | |
+====+---+------------+---+------------+---+------------+
| 13 | | 3行とばし | | | | |
+====+---+------------+---+------------+---+------------+
デフォルトでは各セルの「表示されている内容」をそのまま表示していますが、セルの表示式が定義されている場合に、その式だけを表示するには "--formula=1" オプションを指定します。実行結果にはセルに定義されている式だけが表示されます:
$ xls-viewer --label=1 --a1=1 --formula=1 sample01.xlsx
Sheet1 :
+===+===+=====+===+===+===+===+
| | A | B | C | D | E | F |
+===+===+=====+===+===+===+===+
| 1 | | 1+2 | | | | |
+===+---+-----+---+---+---+---+
| 2 | | | | | | |
+===+---+-----+---+---+---+---+
| 3 | | | | | | |
+===+---+-----+---+---+---+---+
| 4 | | | | | | |
+===+---+-----+---+---+---+---+
| 5 | | | | | | |
+===+---+-----+---+---+---+---+
Sheet2 :
+====+===+===+===+======+===+===+
| | A | B | C | D | E | F |
+====+===+===+===+======+===+===+
| 1 | | | | | | |
+====+---+---+---+------+---+---+
| 2 | | | | | | |
+====+---+---+---+------+---+---+
| 3 | | | | | | |
+====+---+---+---+------+---+---+
| 4 | | | | | | |
+====+---+---+---+------+---+---+
| 5 | | | | 1+2 | | |
+====+---+---+---+------+---+---+
| 6 | | | | D5*2 | | |
+====+---+---+---+------+---+---+
| 7 | | | | | | |
+====+---+---+---+------+---+---+
| 8 | | | | | | |
+====+---+---+---+------+---+---+
| 9 | | | | | | |
+====+---+---+---+------+---+---+
| 10 | | | | | | |
+====+---+---+---+------+---+---+
| 11 | | | | | | |
+====+---+---+---+------+---+---+
| 12 | | | | | | |
+====+---+---+---+------+---+---+
| 13 | | | | | | |
+====+---+---+---+------+---+---+
なお "--border=0" オプションを付けると、シートの枠が表示されなくなります:
$ xls-viewer --label=1 --a1=1 --border=0 sample01.xlsx
Sheet1 :
A B C D E F
1 1 3
2 3 2 safa saf
3 2 sa
4 43 safd
5 5
Sheet2 :
A B C D E F
1
2 少し長めのテキストを 太字
入力
3 更に123を追加したテ Italic
キスト
4 色付き
5 aaa 3 下線
6 6
7
8
9 2行とばし
10
11
12
13 3行とばし
これらのオプションは組み合わせて使うことも可能です。結果をファイルにリダイレクトしながら使えば後からファイルとして開くこともできて、個人的には我ながら重宝しているコマンドです。
上述の説明では実行可能ファイルだけを紹介していますが、実際にはソースコード含めて公開しています。作り方に興味ある方はこちらもどうぞ:
https://github.com/dotnsf/xls-viewer