axlsx で同じワークブック内のリンクを貼る


背景

ruby から excel いじるライブラリである axlsx で、同じワークブック内のシートのリンクを貼りたかったがうまくいかなかったのでメモ

原因

うまくいかなかった原因は、リンクを

  sheet.add_hyperlink :location => "'Next Sheet'!A1", :ref => 'A2', :target => :sheet

という形ではるわけだが、この「location」、なんとキャメルケースに変換される。

これはなかなか気づかない。

生成されるリンクは「不正」とだけ言われてみることがなかなかできなかったからだ。

その後、しばらくホバーしていると情報が得られることが発覚。

さらにしばらく後、リンクがキャメルケースになっていることが発覚。

結構時間を取られた。

ちなみに、以上の原因のため、ワークシートの名前がキャメルケースであれば問題ない。

今回の事案はワークシートはスネークケースだったため、見事にハマった。

(axlsx の issue で見かけたが、なにやらワークシートの名前もキャメルケースにされるらしいのだが一体…)

修正

リンク先のシート名をキャメルケースに変えた。

雑記

xlsx ってどうやって読み込むんだろう

普通の xml ではないっぽい(プレーンテキストとして読めなかった)ので、

どうやっていじるのか気になりますね。

あと、emotet…自動実行は脆弱性の温床…