SheetJSを使って、レコード編集時にテーブルをExcelでインポートしてまとめてレコード作成してみよう!
はじめに
今回のカスタマイズは、タイムカードアプリを作成して、編集画面でExcelファイルをインポートし、レコード内のテーブルにデータを自動入力するカスタマイズです。
勤怠情報を毎日テーブルに1行ずつ追加しなくても一括で追加、編集できます。
一覧からインポートも可能ですが、レコードの編集時に実施することで今編集中のレコードだけが更新されるため、直感的にわかりやすく、データを保存する前にインポートする内容を確認できます。
今回はSheetJSライブラリを使用します。
タイムカードアプリの作成
次の画像を参考に「タイムカードアプリ」を作成します。
| フィールドの種類 | フィールド名 | フィールドコード | 備考 |
|---|---|---|---|
| ユーザ選択 | 氏名 | name | |
| ドロップダウン | 部署 | department | 選択肢:人事部、技術部、営業部、経理部 |
| ドロップダウン | 月 | month | 選択肢:1、2、3、4、5、6、7、8、9、10、11、12 |
| ドロップダウン | 年 | year | 選択肢:2023、2024、2025、2026、2027、2028、2029、2030 |
| テーブル | 勤怠 | work_hours | |
| 日付 | 日付 | date | テーブル内フィールド |
| ドロップダウン | ステータス | status | 選択肢:通常勤務、有給休暇、終日休、午前休、午後休 |
| 時刻 | 勤務開始 | start_time | テーブル内フィールド |
| 時刻 | 勤務終了 | end_time | テーブル内フィールド |
| 数値 | 休憩 | break_time | テーブル内フィールド |
| 文字列(1行) | 備考 | note | テーブル内フィールド |
| スペース | timeCardImport |
JavaScriptの作成
次のコードを参考に、適当なファイル名(sample.js等)にて保存します。
|
|
コードの解説
JSフォーマットの日付をStringフォーマットに変換するライブラリを読み込んでいます。
|
|
ExcelのDateフォーマットをJSのフォーマットに変換する関数です。
|
|
編集画面のイベント内でボタン設置等の処理をします。
|
|
|
|
編集画面内のスペースフィールドの要素を取得した後、すでにボタンが存在していないかをチェックして、ページ更新によるボタンの増殖生成を防いでいます。
その後、ファイルアップロードのinputエレメントを定義して、スペースに設置します。
ファイルのタイプはExcelの拡張子に限定し、エレメントのChangeイベントにてファイルをアップロードした際にファイルの内容を取得します。
|
|
「エクセルアップロードで入力」ボタンをスペースに追加します。
|
|
|
|
「エクセルアップロードで入力」ボタンをクリックしたタイミングで、Excelファイル内のデータを読み込みます。
SheetJSライブラリによって、Excelファイル内のデータを読み込んでいます。
その後、kintoneのテーブルのJSON形式の配列を作成してテーブル内のレコードを更新します。
|
|
アップロードしたファイルのBinaryデータを読み込んで、SheetJSライブラリにてExcelのデータを読み込んでいます。
そして、データを配列形式に変換しています。
|
|
Excelの退勤データをkintoneのテーブルのJSON形式に設定して、レコードを更新します。
|
|
Excelの日付をJSの日付フォーマットに変換しています。
|
|
JSの日付フォーマットをString形式に変換しています。
|
|
動作確認
Luxonライブラリ
Luxonとは、JSフォーマットの日付をStringフォーマットに変換するライブラリです。
アプリの設定画面から「JavaScript / CSSによるカスタマイズ」を開き、「PC用のJavaScriptファイル」に、「URL指定」で次のライブラリを追加します。
Luxon:https://js.cybozu.com/luxon/3.7.2/luxon.min.js
上記URLは、2025年11月11日時点のCybozu CDNで配信されている最新バージョンのURLです。
Luxonを導入する際は、
Cybozu CDN
を確認し、必要に応じてバージョンを変更してください。
SheetJSライブラリ
SheetJSも Luxonライブラリ と同様にライブラリを追加します。
SheetJS:https://cdn.sheetjs.com/xlsx-0.20.3/package/dist/xlsx.full.min.js
上記URLは、2025年11月11日時点のSheetJSで配信されている最新バージョンのURLです。
SheetJSを導入する際は、
SheetJS - CDN
を確認し、必要に応じてバージョンを変更してください。
「アプリを更新」して設定を確定します。
作成したタイムカードアプリでレコードを一件作成します。
作成後、レコードを編集する画面に入り、ファイルアップロード用のボタンと「エクセルアップロードで入力」ボタンが表示されていることを確認します。
画像を参考に勤怠のデータを入力したExcelファイルを準備します。
ファイルを読み込む際には、読み込みたいフィールドのフィールド名と読み込むファイルの先頭行の項目名を一致させる必要があります。
作成したExcelファイルを選択し、「エクセルアップロードで入力」ボタンをクリックします。
クリックするとアップロードしたデータが編集画面にて表示されるので、「保存」ボタンでレコードを保存します。
画像のようにExcelからアップロードしたテーブルデータが保存されると成功です。
まとめ
今回は、一覧からではなく、レコードごとにテーブルへのデータをインポートするカスタマイズを紹介しました。
編集画面からインポートすることで、レコードを保存する前に内容が確認できるため、一覧からExcelデータをインポートするより分かりやすく簡単にテーブルへのデータのインポートが可能になります。
また、Excelの特定のレコードへインポートするためのデータの調整が不要となり、間違って他のレコードを更新してしまう心配もなくなります。
このTipsは、2025年11月版kintoneで動作を確認しています。
