unzip -p で真のエクシェル芸が完成したような気がする。

Sun Apr 20 14:19:30 JST 2014 (modified: Sun Oct 1 10:50:27 JST 2017)
views: 2290, keywords:エクセル,CLI,Excel,エクセル方眼紙はこうやって処理する,シェル芸,エクシェル芸 この記事は最終更新日が7年以上前のものです。

なんでこんなに眠いのか。

地味に好評なエクシェル芸ですが、肝心なことを忘れていました。

これまでのブログの記事では、エクセルを一旦解凍していましたが、unzipの-pを使うとその必要はありません。こんな感じにxlsxから標準出力にダイレクトにxmlを流すことができます。unzip -pの後にzipファイル(この場合はエクセルファイル)、その次にzipの中の見たいファイルを指定します。最初のシートなら大抵xl/worksheets/sheet1.xmlを指定すればよいことになります。

ueda@remote:~$ unzip -p book1.xlsx xl/worksheets/sheet1.xml 
   <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
   <worksheet xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main" 
   xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationshi
   ps" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    mc:Ignorable="x14ac" 
   xmlns:x14ac="http://schemas.microsoft.com/office/spreadsheetml/2009/9/ac">
   <dimension ref="A1:A4"/><sheetViews><sheetView tabSelected="1" 
   workbookViewId="0"><selection activeCell="A5" sqref="A5"/></sheetView>
   </sheetViews><sheetFormatPr baseColWidth="12" defaultRowHeight="18" 
   x14ac:dyDescent="0"/><sheetData><row r="1" spans="1:1"><c r="A1"><v>1</v>
   </c></row><row r="2" spans="1:1"><c r="A2"><v>2</v></c></row><row r="3" 
   spans="1:1"><c r="A3"><v>3</v></c></row><row r="4" spans="1:1"><c r="A4">
   <v>-4.2300000000000004</v></c></row></sheetData><phoneticPr fontId="1"/>
   <pageMargins left="0.7" right="0.7" top="0.75" bottom="0.75" header="0.3" 
   footer="0.3"/><extLst><ext uri="{64002731-A6B0-56B0-2670-7721B7C09600}" 
   xmlns:mx="http://schemas.microsoft.com/office/mac/excel/2008/main"><mx:PLV 
   Mode="0" OnePage="0" WScale="0"/></ext></extLst></worksheet>ueda@remote:~$ 

ということで、xlsxからワンライナーでデータをすっぱ抜くワンライナーが完成です。

ueda@remote:~$ unzip -p book1.xlsx xl/worksheets/sheet1.xml |
    hxselect c | sed 's;</c>;&\\n;g'
   <c r="A1"><v>1</v></c>
   <c r="A2"><v>2</v></c>
   <c r="A3"><v>3</v></c>
   <c r="A4"><v>-4.2300000000000004</v></c>

これぞ真のエクシェル芸。なんじゃそりゃ?

うまくやればワンライナーだけでエクセル方眼紙からデータを抜いて、方眼紙にばらまかれた数字や文字列を結合することも夢ではない。やりたくないけど

ところで、zipしたままファイル名が見たければ、unzip -lすれば見れます。これもご活用を。

ueda@remote:~$ unzip -l book1.xlsx
   Archive: book1.xlsx
    Length Date Time Name
   --------- ---------- ----- ----
    1084 1980-01-01 00:00 [Content_Types].xml
    733 1980-01-01 00:00 _rels/.rels
    557 1980-01-01 00:00 xl/_rels/workbook.xml.rels
    745 1980-01-01 00:00 xl/workbook.xml
    16544 1980-01-01 00:00 docProps/thumbnail.jpeg
    7646 1980-01-01 00:00 xl/theme/theme1.xml
    1210 1980-01-01 00:00 xl/styles.xml
    1150 1980-01-01 00:00 xl/worksheets/sheet1.xml
    617 1980-01-01 00:00 docProps/core.xml
    803 1980-01-01 00:00 docProps/app.xml
   --------- -------
    31089 10 files

昼寝する。

ノート   このエントリーをはてなブックマークに追加 
 

prev:仕事の総量を減らす発想の無い人間に協力してはいかんなあ。 next:ワードシェル芸?の方法。

やり散らかし一覧

記事いろいろ