LoginSignup
5
3

More than 3 years have passed since last update.

Javascriptでbase64エンコード化されたExcelファイルをダウンロードする

Posted at

やりたいこと

これもタイトル通りなのですが、仕事の要件的にSOAPでサーバーサイドプログラムを使用せずにJavascriptだけでbase64binaryをブラウザでダウンロードさせるというものがあり、苦戦したので自分メモとして書いときます。

ソースからの解説

atobでASCIIからBinaryへ変換し、それを1文字ずつUnicodeの数値に変換し、その数字を配列化します。
この配列をBlobコンストラクタに入れてtypeをExcelの形式で指定します。
このBlobをcreateObjectURLでブラウザのメモリに展開してaタグを作成し、強制的にクリックしたことにしてダウンロードさせます。

sample.js
var filename = 'something';
var binary = 'バイナリ文字列ーーーUEsDBBQACAgIABp2QlEAAAAAAAAAAAAAAAALAAAAX3JlbHMvLnJlbHOtksFqwzAMhl/F6N447WCM
UbeXMuhtjO4BNFtJTGLL2NqWvf3MLltLChvsKCRDQANAGgDAAAYBAEAAAA=ーーー的な';
binary = atob(binary);
var decoded_array = new Uint8Array(Array.prototype.map.call(binary, c => c.charCodeAt()));
var decoded = new Blob([decoded_array], {type: "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"});
var url = window.URL.createObjectURL(decoded);
var a = document.createElement("a");
a.href = url;
a.download = filename + ".xlsx";
a.click();
window.URL.revokeObjectURL(url);

大変参考にさせていただきました

Blob, ArrayBuffer, Uint8Array, DataURI の変換
JavaScriptでBase64エンコード・デコード(UTF-8も)

5
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
3