kintoneにはエクセルやCSVのデータをアプリにインポートできる「ファイルから読み込む」という機能があります。アプリへの初期データの登録や、登録済みデータに対して一括で値を変えて反映する、といった用途でよく使用されます。
この「ファイルから読み込む」という機能ですが、kintoneを使用されているユーザからすると”たまに使う機能”という扱いです。そのため、弊社のお客様からも「一括でデータを反映したいんだけどどうすればいい?」という質問があった際に「ファイルから読み込む」をご紹介するのですが、中々普段使わないためか使い方を理解されていません。また、たまに使うのでファイル読込時にエラーが出てしまい、エラーメッセージを見てもよくわからない、といった事が発生しています。
そこで今回は、kintoneの 「ファイルから読み込む」 機能にフォーカスし、この機能を使う上で気をつけておきたい、認識しておいたほうがよいポイントを4つに絞ってご紹介します。
<補足>記事作成時点(2019/09時点)の情報を元に記載しています。
新規登録と更新は一緒にできない
用意するファイル内のデータとして
- アプリに未登録のデータ(新規登録用)
- アプリに登録済みのデータ(更新用)
を混在させて「ファイルから読み込む」を行うことはできません。新規登録用と更新用の両方のデータを混在させた状態で処理を行うと、ファイルから読み込みを行った際にエラーが発生します。
そのため、ファイル内には
- 新規登録用データのみ
- 更新用データのみ
のどちらかのファイルを用意する必要があります。
さらにもう一つの注意点として、ファイルからの読み込み時に「一括更新のキー」という欄がありますが、ここの設定も注意が必要です。
新規登録を行いたい場合は、次のように「一括更新のキー」は全てチェックを外したほうがいいです。
「一括更新のキー」にチェックを入れた状態で行ってもエラーとはなりませんが、新規登録なので一括更新のキーは無い、という意味合いで外すとよいと思います。
更新を行いたい場合は、次のように「一括更新のキー」はチェック入れます。
こうする事で、チェックが入っているフィールドの値を条件に登録済みのデータを更新します。逆に「一括更新のキー」にチェックを入れない状態でファイルを読み込んだ場合、
<アプリ内に「値の重複を禁止する」を設定したフィールドが無い場合>
同じデータのレコードが2行できる
<アプリ内に「値の重複を禁止する」を設定したフィールドがある場合>
既に登録済みのデータがある状態で同じデータを新規登録しようとするが、値が重複するためエラー
という結果になります。
特に登録済みのデータに対してファイルの内容で一括更新をしたい場合、この「一括更新のキー」のチェックを気をつける必要があります。
Excelの場合は一度に読み込めるデータは最大1000件まで
ファイルから一括で登録または更新できるので便利なのですが、Excelファイルの場合は1回のアップロードでは最大1000件まで可能という制約があります。1000件(行)を超えたExcelファイルを読み込みすると、エラーで取り込まれません。
この制約に伴い、アップロードするExcelファイルは1000件ごとに用意する必要があります。(CSVファイルの場合は10万件が上限です。)
例えば全部で3000行分のデータをExcelファイルで読み込みしたい場合、次のようにすると手間が少し軽減されます。(Excel→CSV変換してファイルをアップロードすれば下記の操作は不要です)
まず、エクセルファイルに
- シートA:1個目~1000個目のデータ
- シートB:1001個目~2000個目のデータ
- シートC:2001個目~3000個目のデータ
といったようにシートを分けてデータを用意します。シートの並び順は左から「シートA」「シートB」「シートC」の順とし、ファイルは開いたままにしておきます。
次に「ファイルから読み込む」の画面でエクセルファイルを選択し、「読み込む」ボタンをクリックします。
エクセルファイル内に複数のシートが存在する場合、一番左側のシートが読み込まれますので、この場合はシートAが読み込まれます。
次に、エクセルファイルで「シートB」を一番左に移動して保存し、先ほどと同様にファイルを読み込みます。
ファイル読込後は「シートC」を一番左に移動して保存後、同じようにファイルを読み込みます。
読み込むシートの位置を変えてファイルを保存→ファイルを読み込む、という操作をすることで、単純作業で1000件ごとにファイルからデータを取り込むことができます。
使ってみると分かるのですが一度のアップロードの上限が1000件って意外と少ないですよね。今後のkintoneの改善に期待したいところです。
※補足
Excelの場合は最大1000件ですが、CSVファイルならば最大10万件です。よって、データ量が多い場合は、ExcelをCSVファイルに変換して読み込んだほうが、上記のようなシートの切り替えをする必要がないため簡単です。
テーブルの情報を読み込めるのは新規登録時のみ
(2020年1月29日更新)
2020年2月版のアップデートに伴い、更新時もテーブル情報を読み込めるようになりました。そのため、以下については2020年1月以前の場合ということで記事を残しておきます。
「ファイルから読み込む」の機能ではテーブルの情報も登録する事ができますが、新規登録時のみという成約があります。つまり、登録済みのレコードに対してファイルからテーブルにデータを追加する、という事ができません。
そのため、登録済みのデータに対してファイルのデータをテーブルへ一括設定したい場合
- 登録済みのデータをファイルに出力する
- ファイルにテーブル用のデータを追加する
- 登録済みのデータを削除する
- ファイルをアップロードする
という作業が必要になります。登録済みのレコードを削除する必要があるため、削除してよいかは他アプリへの影響も考慮して、十分な検討が必要です。アプリ内に写真などのファイルデータを格納している場合、それらは「ファイルから読み込む」では登録できないため、別途再登録をする必要があります。
また、新規登録でテーブルにデータを登録するような場合、読み込ませるファイル上でのデータの作り方にも注意が必要です。例えば次のように、アプリ内に2つのテーブルが存在する場合のデータの作り方をご紹介します。
このようなアプリに対してテーブル1とテーブル2の両方に初期データをファイル読込から設定したいとします。
まずNGの例からですが、次のようなファイルを作ってアップロードするとエラーとなります。
<エラー内容>
GAIA_II04: アプリのテーブルにデータを読み込もうとしています。アプリのテーブルにデータを読み込む場合は、データの1列目にレコードの開始行を示す列が必要です。アプリのテーブルにデータを読み込まない場合は、アプリのテーブル内のフィールドに、読み込むファイルの列を指定しないでください。
エラーメッセージを見ると、テーブルにデータを読み込む場合、レコードの開始行を示す列が必要と書いてあります。レコードの開始行とは、どの行からどの行までが1レコード分かをわかるようにするためのものです。
そこで、次のようにA列に「レコードの開始行」を作り、開始行に*を入れたデータを作ってみました。以下だと2行目と4行目に開始位置を意味する*をつけていますので、2~3行目と4~5行目が1レコード分という扱いになります。
これを読み込ませるとどうなるかというと、エラーとなります。
<エラー内容>
GAIA_II02: ファイルの2行目に、複数のテーブルの値が含まれています。
このエラーメッセージだと複数のテーブルに対して読込が行えないような意味に読み取れますが、実際はテーブルの場合のデータ設定方法がダメだよ、という事を言っています。
正しくは次のようにファイルを作ります。
- *の行には、テーブル以外のフィールドへの値を指定する。テーブルのフィールドは空にする。
- テーブルのフィールドに設定する場合は、行を変えて値を設定する(テーブル内のフィールドにのみ値を設定する)
- アプリ内にテーブルが複数存在する場合、他テーブルとは行を変えてテーブル毎に設定する
このようにファイルを作る事で、テーブルに対してデータを読み込む事ができます。少しファイルの作り方が特殊なので、データを作る際はこの点の注意が必要になります。
ルックアップフィールドはコピー元が「値の重複を禁止する」となっていないと読み込めない
アプリ内にルックアップフィールドがあり、そのフィールドに対して一括でファイルから初期設定したい場合は注意が必要です。ルックアップフィールドについては、次のような仕様があります。
ルックアップフィールドの値は、コピー元のフィールドの値に重複がない場合のみ、一括で入力/更新できます。コピー元のフィールドの設定で「値の重複を禁止する」を選択しておく必要があります。
この説明だとイメージが付かないと思いますので、次のような取引先アプリと案件アプリの例で説明します。
取引先アプリは取引先を管理するアプリで、取引先名フィールドは文字列(1行)で作られています。案件アプリは案件を管理するアプリで、取引先名フィールドはルックアップ(取引先アプリの取引先名フィールドを参照)で作られています。
案件アプリに案件のデータを一括登録したいような場合、
- ルックアップのコピー元である「取引先マスタの取引先名フィールド」が「値の重複を禁止する」の設定
となっている場合は、案件アプリに取引先名を取り込むことができます。逆に、「取引先マスタの取引先名フィールド」が「値の重複を禁止する」となっていない場合、案件アプリで取引先名と案件名をファイルから読み込んだとしても、取引先名は空欄になります(読み込み設定ができないため)
これは、アップロード時の裏側の処理を考えれば「値の重複を禁止する」がなぜ必要なのか理解できます。
例えば上記例で「取引先マスタの取引先名フィールド」が「値の重複を禁止する」となっていない場合、取引先には
- 株式会社テスト会社(レコード番号:1)
- 株式会社テスト会社(レコード番号:2)
と同じ会社の名前を登録する事ができます。ファイルアップロード時には取引先名を元に取引先マスタのどのレコードなのかを自動判別しますが、上記のように2つ該当するものがあると、どちらも正解なので自動的には1つに絞り込めない事になります。そのため、「値の重複を禁止する」となっている必要があると考えられます。
ルックアップフィールドへの一括設定はわりと遭遇しますので、この点をおさえておきましょう。
まとめ
キントーンの「ファイルから読み込む」機能についての主なポイントを4つ後紹介しました。どれもこの機能を使う上で一度はハマるポイントですので、仕様を理解しておくとスムーズに進みます。