キンコミ kintone user community

みんなの投稿

2021/05/26 13:12

こんにちは。
いつも皆様の投稿を楽しく拝見しながら勉強させていただいております。

CSV出力に関して、もしアイデアがあったらお願いします。
利用ユーザーに、UTF-8形式でCSV出力してもらいたいのですが(SHIFT-JISだた外字文字化けがあるため)、何も選択せずデフォルト設定だとSHIFT-JISになっているので、間違えてそのまま出力してしまうことがありました。

一覧表示したものを、必ずUTF-8で出してもらうようにしたいのですが、設定で選択肢を絞り込む方法が見つからず、何かメッセージ等で促すか、またはプログラムを作りこむしかないのかなと思っています。

何か簡単にできるようなアイデアがありましたらご教授いただけますと幸いです。

4件のコメント (新着順)
Hazime
2021/05/29 02:42

鈴木拓さん

できましたーーー!!
こんなのはどうでしょうか?

  1. kintoneシステム管理を開く
  2. カスタマイズ→JavaScript/CSSでカスタマイズ を開く
  3. kintone全体のカスタマイズに以下のコードを書いたjsファイルをアップロードします。
let url = location.href;
let regex  = /exportRecord/;

if (regex.test(url)) {
  let elem = document.getElementById('export-submit-gaia');
  elem.addEventListener('click', (e) => {
    let moji_code = document.getElementById(':11').textContent;
    if(moji_code != 'Unicode(UTF-8)') {
      e.preventDefault();
      alert("文字コードはUnicode(UTF-8)を選択してください");
    }
  });
}

解説しますと…

  1. 今みている画面のURLを取得
  2. urlにexportRecordが含まれているか確認し、含まれているときだけ実行する。(書き出し画面のときだけ実行する)
  3. 書き出しボタンがおされたら…
  4. 文字コードの選択状態を取得
  5. UTF-8以外が選択されていたら、サブミットをキャンセル
  6. アラートを表示する

といったプログラムです。

動作検証は、さらっとしかしてないので、参考程度にしていただければと思います。


鈴木拓
2021/05/31 09:21

ありがとうございます。
アイデア、感動です。
特定アプリの場合のみ、動作をさせたかったので、次のように修正して、無事に実装できました!!
感謝いたします!

let url = location.href;
let regex = '/アプリコード/exportRecord';

if (url.indexOf(regex) > 0) {
let elem = document.getElementById('export-submit-gaia');
elem.addEventListener('click', (e) => {
let moji_code = document.getElementById(':11').textContent;
if(moji_code.indexOf('Unicode')==-1) {
e.preventDefault();
alert("文字コードはUnicode(UTF-8)を選択してください");
}
});
}

Hazime
2021/05/31 22:25

早速実践していただいてうれしいです!
ご自身の運用環境にもしっかり対応した形でコーディングされていて素晴らしいです!

今回トライする過程で、kintone 全体のカスタマイズを初めて知って僕自身も、大変勉強になりました!

鈴木拓
2021/06/03 13:35

追加情報のため返信します。
前回のコードだと、管理者でしか動作しないということが判明し、次の通りさらに改善しました。
SELECTBOXのIDが、管理者の場合と一般ユーザーの場合で異なることが判明したためです。
下記で実装しなおして動作を確認しました。
また、今回はダウンロード後にEXCELで加工することが必須となったので、
「Unicode(Excelで読み込めるUTF-8)」のみ選択できるように修正しました。

let url = location.href;
let regex = '/アプリコード/exportRecord';

if (url.indexOf(regex) > 0) {
let elem = document.getElementById('export-submit-gaia');
elem.addEventListener('click', (e) => {
let moji_code = "";
if ( document.getElementById(':11')) {
moji_code = document.getElementById(':11').textContent;
} else {
moji_code = document.getElementById(':x').textContent;
}
if(moji_code.indexOf('Unicode(Excel')==-1) {
e.preventDefault();
alert("文字コードは「Unicode(Excelで読み込めるUTF-8)」を選択してください");
}
});
}

Hazime
2021/05/27 23:18

鈴木拓さん

僕も以前、キンコミ内でCSV出力時の文字化け問題でみなさんと意見交換したことがあります!
その時は、コマンドラインで解決しました。

NSAS平野さん、西村さんもコメントされているように、RPA組み合わせるのは良いかもしれませんね!!実は、僕自身、最近RPAを業務でやりだしたんです笑

ちょっと思いついたのは、RPAに決まった時間でCSVファイルを保管しているフォルダを見に行かせて、UTF-8にエンコードさせるのはどうでしょうか?(ほんと、思いつきレベルです笑)

ユーザーは一覧画面でレコードを絞り込んでCSV出力するとのことでした。この絞り込みに規則性があるのであれば、この操作自体をコマンドライン化したり、RPAのシナリオにしたりしたらユーザーも楽かなと思いましたが、絞り込みが不規則で人がやったほうが確実なのであれば、ここは人にまかせて、システム的には、人がダウンロードしたファイルを決まった時間に強制的にエンコードしてしまうのもありかなと思いました。


Hazime
2021/05/27 23:43

追記)
僕は、職場で使っているRPAは、WinActorなのですが、確認したらエンコードのライブラリがありました。
https://winactor.biz/sweet/2020/08/24_2989.html

★WindowsのタスクスケジューラでRPA実行の時間指定しておく

RPAのシナリオ

  1. 指定フォルダ(処理前用フォルダ)内のファイルをすべて取得
  2. ファイルをすべてエンコードする
  3. エンコード済みファイルを処理済みフォルダへ移動させる(処理前用フォルダは空にする)

といった感じでいけば、コードを書かずに自動化できるかなぁ と想像してみました。

鈴木拓
2021/05/28 14:28

ありがとうございます。
RPA、勉強させていただきますm(_ _)m
リストの絞り込みに規則性はないので、本当は出力作業だけを自動化したいなと思っていますが、自分のデスクトップ環境にあわせて作成したRPAが他のユーザーのPCでうまく動くかどうか、まだまだ勉強が足りません(汗)
いったんSHIFT-JISで出力して文字化けしてしまっているものをUTF-8に変換する場合は、SHIFT-JISで出した時点で外字が文字化けしてしまっているので難しそうです。
課題は外字の文字化けなので、SHIFT-JISで出す前に外字チェックをするという発想もあるのかなとふと思ったりしています。

鈴木拓さん

そうですね。たしかに一覧の「CSVファイルに書き出す」は、文字コードのデフォルト値が、日本語 (Shift JIS) となってますね。
Unicode (UTF-8) へ毎回手作業で変換する運用であれば、一定の作業ミスは発生する可能性がありますね。

プログラムを作りこむという手法がありなら、NSAS平野さんにご紹介いただいたcli-kintoneでコマンドライン化するのもひとつの方法ですね(NSAS平野さんご紹介ありがとうございます)。

もし必要であればバッチファイル化すると、他処理系へデータ取り込みまで自動化できますね。以下noteでは、実際にUTF-8で出力したCSVファイルをExcelに取り込んでいます。

kintoneのデータからPythonでExcelファイルを作る
https://note.com/46u/n/naf297df5168e

また確かにRPAで画面操作を自動化し出力形式をUnicode (UTF-8)へ変更後書き出し。そんなこともできるかもしれません。
今なら、Windows10なら無料で使えるRPA、Power Automate Desktop がありますしね。

Power Automate Desktop をやってみました。
https://note.com/46u/n/n7b9c0dabd806

参考になればうれしいです!


鈴木拓
2021/05/27 09:06

ありがとうございます。
KINTONEで絞り込んだものをCSV出力したいというニーズなので、Power Automate Desktopはよさそうですね。
ちょうど先日テスト的にデスクトップにインストールしたものの、まだほとんど触っていませんでしたが、勉強してみようという意欲がわきました!
大変参考になります。

無料で使えるRPA、Power Automate Desktop試してみました。
データ抽出後のCSV出力ですので

①抽出一覧表示画面で
②RPAプログラム起動し(操作をRPAに設定しました)
③指定フォルダへCSV出力確認

なかなか、評価しようと思いながらできなかったのですが
勉強兼ねて2時間かかりましたが・・・

NSAS平野さん

さすがですねー!2時間でそこまでできるとは。私はもっとかかります。^^;
機能は限られているとはいえ、必要十分のRPAが無料でここまで使えるのはすごいです!
kintoneとの相性もよそさうですし、活用していきましょう!!

鈴木拓さん
kintoneのライセンスがスタンダードコースをご利用の場合は
キンコミで投稿のありました下記ではいかがでしょうか?
■CLi-kintone kintoneコマンドラインツール
https://kincom.cybozu.co.jp/chats/ee0rrfmnrzyngz2i
エンコードは既定値:UTF-8
データ絞り込みの設定も可能ですね。

■RPAツール利用するという方法もあるかと思います。
 RPAに関してはキンコミのブックバーのコミュニティから検索でいろいろ情報が検索できるかと
 思います。


鈴木拓
2021/05/27 09:10

ありがとうございます。
システムに詳しくないユーザーが画面上で色々な条件で絞り込んでからCSV出力したいというニーズだと、Cli-kintoneを使ってもらうのはハードルが高いでしょうか。
そうなると、CSV出力の部分にRPAを使う、またはjavascriptで機能を作るという方法になるのかなと想像しています。
RPAの組み合わせは他のことにも使えそうなので早速調べてみます!