0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

kintoneでテンプレートのExcelに書き込んでダウンロードする

Last updated at Posted at 2021-05-31

今回はなんだかんだ言ってExcelのテンプレート(雛形)も使うんだよ
というお仕事に役立つカスタマイズ・・・かも知れません。

※書式が消えてしまうということが分かりました💦

予め作っておいたExcelファイルにkintoneのフィールドの値を書き込んでダウンロードするアプリです。

アプリの準備

アプリはファイル置き場のアプリと、Excelに書き込むアプリ2種類作成します。

ファイル置き場アプリ

このアプリは、フィールドを準備するだけです。特にカスタマイズはしません。

フィールド種類 フィールドコード 備考
添付ファイル 添付ファイル
文字列(1行) 説明

image.png

テンプレートとなるExcelファイルを保存しておきましょう。ファイル名はなんでもOKです。
今回は、A1セルになにか入力したらC2セルに「僕の名前は[A1の値]です」となるようなExcelファイルを作りました。
※A1になにか値を入力している状態で保存しておきましょう。

image.png

Excelに書き込むアプリ

フィールド種類 フィールドコード 備考
スペース spBtn
文字列(1行) 名前
文字列(1行) 出力ファイル名
ルックアップ テンプレート ファイル置き場からレコード番号取得
文字列(1行) テンプレートの説明 (ルックアップで説明フィールドを取得)

image.png

ルックアップの設定
image.png

JavaScript

Excelに書き込むアプリの方のカスタマイズをします。

こちらのライブラリを使用します。

ファイルダウンロードしつつ、sheetjsで書き換えたいセルを書き換えます。
↓ファイルダウンロードはこちらを参考に。

詳細、編集画面などお好きなイベントで使ってください。

// スペースフィールドにボタン設置
const sp = kintone.app.record.getSpaceElement("spBtn");
const btn = document.createElement("button");
btn.textContent = "ボタン";
sp.appendChild(btn);

// ボタンクリック
btn.addEventListener("click", async () => {
  const fileKey = await kintone.api(
    kintone.api.url("/k/v1/record.json", true),
    "GET",
    {
      app: kintone.app.getLookupTargetAppId("テンプレート"),
      id: event.record.テンプレート.value,
    }
  );
  const url =
    "https://{サブドメイン名}.cybozu.com/k/v1/file.json?fileKey=" +
    fileKey.record.添付ファイル.value[0].fileKey;

  // ファイルダウンロード 
  const req = new XMLHttpRequest();
  req.open("GET", url);
  req.setRequestHeader("X-Requested-With", "XMLHttpRequest");

  // SheetJS の公式ドキュメントのBrowser download fileを参考に
  req.responseType = "arraybuffer";
  req.onload = (e) => {
    const data = new Uint8Array(req.response);
    const workbook = XLSX.read(data, { type: "array" });
    // Excelのセルを書き換える(
    workbook.Sheets[workbook.SheetNames[0]].A1 = {
      v: kintone.app.record.get().record.名前.value,
    };
    XLSX.writeFile(workbook, event.record.出力ファイル名.value);
  };

  req.send();
});

return event;

動作確認&まとめ

こんな感じになります!
test.gif

今回の場合、A1のセルに決め打ちで入力しているので、柔軟にやりたい場合は書き込み先のセルの指定など色々と工夫する必要がありそうです。

0
1
2

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
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?