前提・実現したいこと
Google App Script を使ってCSV取り込み処理を作成しています。
あるシステムから吐き出されるCSVファイルの取り込みで不要な項目もたくさん存在しているので
必要な項目のみを取り込めるようにしたいと考えています。
CSVファイルは、1行目が項目名で2行目以降がデータになっています。
項目名は、日本語でCSVの文字コードはShift-JISです。
該当システムの仕様変更によるCSVファイルのレイアウト変更に対応したいので
読み込んだデータの1行目の項目名をindexOfを使ってデータの成型を行っています。
発生している問題・エラーメッセージ
CSVファイルの項目名の中に「-」(調音府?)が含まれているものがたくさんあり
それらがindexOfでうまく扱えず、取り込みを行ったデータが「undefined」になります。
該当のソースコード
抜粋で申し訳ありませんが以下のようなコードになります。
実際のコードでは、項目が130個くらいありますので
必要な部分のみ抜粋しております。
GoogleAppScript
1 2function importCSV() { 3 var html = HtmlService.createHtmlOutputFromFile("importDialog"); 4 SpreadsheetApp.getUi().showModalDialog(html,"test"); 5} 6 7function test(formOjbect){ 8// フォームで指定したテキストファイルを読み込む 9var fileBlob = formObject.myFile; 10 11// テキストとして取得(Windowsの場合、文字コードに Shift_JIS を指定) 12var csvText = fileBlob.getDataAsString("Shift_JIS"); 13 14var csvValues = Utilities.parseCsv(csvText); 15 16var insertValues = new Array(); //新規追加データ格納用配列 17for(var i=1; i<csvValues.length; i++){ 18 insertValues.push([ 19 csvValues[i][csvValues[0].indexOf("氏名(漢字)")], //[基本情報]氏名(漢字) 20 csvValues[i][csvValues[0].indexOf("氏名(カナ)")], //[基本情報]氏名(カナ) 21 csvValues[i][csvValues[0].indexOf("性別")], //[基本情報]性別 22 csvValues[i][csvValues[0].indexOf("本人-配偶者あり")], //[給与関係]配偶者あり 23 csvValues[i][csvValues[0].indexOf("本人-一般障害者")], //[給与関係]本人-一般障害者 24 csvValues[i][csvValues[0].indexOf("本人-特別障害者")], //[給与関係]本人-特別障害者 25 csvValues[i][csvValues[0].indexOf("本人-老年者")] //[給与関係]本人-老年者 26 ]); 27} 28 29sheet.getRange(sheet.getLastRow()+1,1,insertValues.length, insertValues[0].length).setValues(insertValues); 30}
補足情報(FW/ツールのバージョンなど)
V8ランタイムを使用するとうまく動かないです。
調べた限りでは・・parseCsvのバグ?らしいです。
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/03/15 03:34
2021/03/15 13:35