# kintone上\[xlsx-populate\]を使用して、エクセルファイルの読み書き方法

**URL:** <https://community.cybozu.dev/t/topic/1131>\
**Category:** kintone 開発相談\
**Created:** [2022 年 11 月 9 日午前 9:06 UTC](https://community.cybozu.dev/t/topic/1131 "2022-11-09T09:06:38Z")\
**Posts on this page:** 6\
**Page:** 1

<div class="post-metadata">

**Author:** ![Legacy\_Account117](https://avatars.discourse-cdn.com/v4/letter/l/8edcca/32.png) [@Legacy\_Account117](https://community.cybozu.dev/u/Legacy_Account117)\
**Post date:** [2022 年 11 月 9 日午前 9:06 UTC](https://community.cybozu.dev/t/topic/1131/1 "2022-11-09T09:06:38Z")

</div>

お世話になっております。

kintone上xlsx-populateを使用して、  
エクセルファイルの読み書きをしたいです。  
サンプルプログラムを教えていただけますと助かります。

下記はやりたい内容です。  
kintoneの添付ファイルフィールドからアップロードしたエクセルを読み込み、エクセルに値を設定、出力したいです。  
[Sheetjs]ではなく書式を保持できるライブラリ[xlsx-populate]を使用したいです。

ご教示いただけますと幸いです。

---

<div class="post-metadata">

**Author:** ![Legacy\_Account2592](https://avatars.discourse-cdn.com/v4/letter/l/d9b06d/32.png) [@Legacy\_Account2592](https://community.cybozu.dev/u/Legacy_Account2592)\
**Post date:** [2022 年 11 月 10 日午前 3:40 UTC](https://community.cybozu.dev/t/topic/1131/2 "2022-11-10T03:40:12Z")

</div>

ぽーさん

テンプレート用の添付ファイルを他のアプリに保存しています。

超適当な回答になりますが。。。参考まで

&nbsp;

```
(function() {
    'use strict';
    kintone.events.on('app.record.detail.show', function(event) {

        // スペースフィールドにボタン設置
        const sp = kintone.app.record.getSpaceElement("spBtn");
        const btn = document.createElement("button");
        btn.textContent = "xlxPopulate";
        sp.appendChild(btn);
        let fileNameSource = event.record.テンプレートの説明.value;
        let extension = fileNameSource.substring(fileNameSource.lastIndexOf("."));
        let exportFileName = event.record.出力ファイル名.value;

        // ボタンクリック
        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 =location.origin+"/k/v1/file.json?fileKey=" +fileKey.record.添付ファイル.value[0].fileKey;

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

            req.responseType = "arraybuffer";
            // テンプレート読み込み
            req.onload = async (e) => {

                const wb = await XlsxPopulate.fromDataAsync(req.response);
                const ws = wb.sheet(0);
                // セル操作
                ws.cell('AB1').value("write somethine here");
                ws.cell('A3').value("write somethine here2");

                // ダウンロード(SaveAsモジュール）
                const wbout = await wb.outputAsync();
                const blob = new Blob([wbout], {
                    type: 'application/octet-stream'
                });

                const output_filename = exportFileName + extension;
                saveAs(blob, output_filename);
            };

            req.send();
        });

        
        return event;

    });
})();

```

---

<div class="post-metadata">

**Author:** ![Legacy\_Account117](https://avatars.discourse-cdn.com/v4/letter/l/8edcca/32.png) [@Legacy\_Account117](https://community.cybozu.dev/u/Legacy_Account117)\
**Post date:** [2022 年 11 月 10 日午前 6:15 UTC](https://community.cybozu.dev/t/topic/1131/3 "2022-11-10T06:15:21Z")

</div>

[SAI](https://community.cybozu.dev/hc/ja/profiles/901529451786-SAI)様

お世話になっております。

サンプルコードありがとうございました。

サンプルコードを使ってみたところ、「xlxPopulate」のボタン押下際に、

「 ReferenceError: XlsxPopulate is not defined」というエラーが発生しました。  
XlsxPopulateをkintone上で使用するためには、XlsxPopulate用のライブラリが必要でしょうか。

下記のライブラリをURL指定で追加していますが、エラーの内容が変わりませんでした。

[https://cdnjs.com/libraries/xlsx-populate](https://cdnjs.com/libraries/xlsx-populate)

⇒[https://cdnjs.cloudflare.com/ajax/libs/xlsx-populate/1.21.0/xlsx-populate.min.js](https://cdnjs.cloudflare.com/ajax/libs/xlsx-populate/1.21.0/xlsx-populate.min.js)

ご教示いただけますと幸いです。

---

<div class="post-metadata">

**Author:** ![Legacy\_Account2592](https://avatars.discourse-cdn.com/v4/letter/l/d9b06d/32.png) [@Legacy\_Account2592](https://community.cybozu.dev/u/Legacy_Account2592)\
**Post date:** [2022 年 11 月 10 日午前 7:06 UTC](https://community.cybozu.dev/t/topic/1131/4 "2022-11-10T07:06:22Z")

</div>

ぽーさん～

僕は実際参照していたjs  
最後のやつは先ほど送っていたコードとなります

[https://cdnjs.cloudflare.com/ajax/libs/xlsx-populate/1.21.0/xlsx-populate.min.js](https://cdnjs.cloudflare.com/ajax/libs/xlsx-populate/1.21.0/xlsx-populate.min.js)

[https://cdn.jsdelivr.net/npm/file-saver@2.0.5/dist/FileSaver.min.js](https://cdn.jsdelivr.net/npm/file-saver@2.0.5/dist/FileSaver.min.js)

---

<div class="post-metadata">

**Author:** ![Legacy\_Account117](https://avatars.discourse-cdn.com/v4/letter/l/8edcca/32.png) [@Legacy\_Account117](https://community.cybozu.dev/u/Legacy_Account117)\
**Post date:** [2022 年 11 月 11 日午前 12:06 UTC](https://community.cybozu.dev/t/topic/1131/5 "2022-11-11T00:06:15Z")

</div>

[SAI](https://community.cybozu.dev/hc/ja/profiles/901529451786-SAI)様

早急の対応ありがとうございました。

おかげさまで問題が解決できました。

ありがとうございました。

---

<div class="post-metadata">

**Author:** ![system](https://us1.discourse-cdn.com/flex015/uploads/cybozu/original/1X/d5c841c3c5a6cb66eed514001c1b45147c9e1f4f.png) [@system](https://community.cybozu.dev/u/system)\
**Post date:** [2024 年 6 月 1 日午前 1:55 UTC](https://community.cybozu.dev/t/topic/1131/6 "2024-06-01T01:55:21Z")

</div>

このトピックはベストアンサーに選ばれた返信から 3 日が経過したので自動的にクローズされました。新たに返信することはできません。
