All Projects → prog-mitsu → importCsv

prog-mitsu / importCsv

Licence: other
ローカルのCSVファイルを、google spreadsheetの特定のシートにインポートする(google apps script)

Programming Languages

Gosu
25 projects

importCsv

=========

ローカルのCSVファイルを、google spreadsheetの特定のシートにインポートします(google apps script)

はじめに

google apps scriptの情報はそもそも少ないと思っていますが、その中でも
ローカルのCSVファイルを読み込んで、シートに書き込む事例はかなり少なかったのでまとめてみました。
(googleドライブ上のCSVファイルをインポートする例はまぁまぁあるんですけどね)

各種事例の中でネックだったのは、SJISのCSVがNGだった事と、大きなサイズのCSVファイルだと遅すぎて
実用性の面で難ありだったことです。
ですので、これらを解決しました。

CSVファイルの文字コードについて

巷にあるgoogle apps scriptでCSVインポートする例は、CSVファイルがsjisだと文字化けするorフリーズしちゃいました。

読み込んだテキストをsplitする前に、文字コード変換したり色々考えましたが、
よくよくAPIのドキュメントとにらめっこすると、
Class Blob - Google Apps Script - Google Developers :
https://developers.google.com/apps-script/reference/base/blob#getDataAsString()
あれ、getDataAsString() charset引数受け付けてるやん。
ということで、"Shift_JIS" 渡すだけでスンナリ通りました。(引数無しだとutf-8)

setValueによるセル書き込みが超遅いことについて


getRange() → setValue()で1セルずつ書き込むと、メチャクチャ遅いです。
大きなCSVファイルだと、1ファイルをインポートするのに10分以上かかることもザラでした。
でも、setValues()でまとめて書き込むと劇的に速くなります。

しかし、setValues()には色々クセがあって結構扱いがメンドウなんです。
あらかじめシートのサイズをデータの行列サイズよりも広げておかないと落ちるとか、
書き込みセル数が251?以上だと落ちるとか。 詳しくは参考ページへ。

ということで、そういった制限を考慮しながら1行ずつsetValues()する事で高速書き込み。

ソース抜粋

全ソースはgithub https://github.com/prog-mitsu/importCsv に上げてありますので、
ご興味ある方は持って行って下さい。

最後に

ローカルファイル選択アップロード
SJIS対応
高速書き込み
が実現できたので、滅EXCEL、google spreadsheet推進への野望が一歩前進しました。

参考ページ

Google Apps Script ってすごいね : http://moblogger.r-stone.net/blogs/9016404448327222924/posts/1382923398397652155

守破離でいこう!! : http://ishikawa.r-stone.net/

[GoogleAppsScript]setValuesではまったところ : minoawのブログ : http://blog.livedoor.jp/minoaw/archives/1523932.html

[GAS][スプレッドシート]処理速度を向上するには : 逆引きGoogle Apps Script : http://www.bmoo.net/archives/2012/04/313959.html

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].