kintoneの添付ファイルフィールドに保存されているExcelファイルを取得し、
内容を変更してダウンロードしてみます。
この記事は、読み込み編の続きです。
使用するライブラリや前提となるアプリ構成は前の記事を参照のこと。
結論
先に結論としては、SheetJSだとスタイルが削除されてしまう為、満足のいくExcel編集は難しかったです。代わりにkintoneのデータをJSONで渡して、テンプレートとして登録したExcelにデータを入力して返却するAPIを作成しましたので、こちらもご参照下さい。
やりたいこと
前回サンプルとして作成した↓の日本の人口(C21セル)を“999,999,999”に改ざん変更して
ローカルにダウンロードしてみようと思います。
やってみる
レコード詳細画面左上の「Excelデータ取得」ボタンクリックで
ローカルにダウンロードされました。
ファイルの中身を確認します。
!?
・・・えーと、いろいろと。
- ヘッダ行の背景色
- 罫線
- 列幅
- C列のフォーマット(カンマ区切りから、ただの数値になってる)
の設定がクリアされていますな。
とりあえず、C列の幅を調整して指数表示から10進数表示にします。
ふむ、値は正しく変わっている模様。
スタイル等の設定は扱えない・・・?
コミュニティ版とプロフェッショナル版の違い
公式サイトを確認すると以下のライセンスが有るようで。
どうやら今回使用したライセンスは機能が制限されている模様。
コミュニティ版
Apache 2.0ライセンスで使用できる。
「自由に使用していいですが、保障は無いです」という比較的縛りの緩いライセンスです。
今回使用したライセンス。
プロフェッショナル版
スタイルや画像の扱い、その他数式も扱えるようになるというライセンスです。
ただし料金が記載されていないので、いくらで使用できるのかが不明。
というか有料という記載は見当たらないので、有料ではないのか・・・?
詳細はメールで問い合わせてね、との事・・・。
使用したソースコード
何はともあれ、今回使用したソースコードは以下。
といっても前回のコードに下記ハイライト行を追加しただけ。
値の設定、ダウンロード
$(document).off('click', '#button-get-excel-data'); $(document).on('click', '#button-get-excel-data', function(ev) { getAttachedFile().then(function(blob){ return convertBlobToBase64(blob); }).then(function(base64) { var _base64 = base64.split(',')[1]; const workbook = XLSX.read(_base64, {type:"base64"}); workbook["Sheets"]["Sheet1"]["C21"]["v"] = "999999999" downloadFile(XLSX.write(workbook, {'type': 'base64'})); }); });
下記の通りオブジェクトを辿って値を設定しています。
workbook ┗"Sheets" ┗[シート名] ┗[セル名] ┣"v" ┗"w"
[セル名]内には、フォーマット後の値(”w”)や、素の値(”v”)が格納されており、
“v”の値を変更することで、実際に表示される値も変わります。
詳しくはGitHubを参照のこと。
XLSX.write()でworkbookオブジェクトの内容をbase64に変換しています。
変換のフォーマットは幾つか指定できる。
こちらも詳しくはGitHubを参照。
まとめ
Excelをただ読み込みたい、という需要には答えてくれる。
背景色や罫線を装飾したい、とゴリゴリ操作するのは
難しい、少なくともコミュティ版では。