Giter VIP home page Giter VIP logo

importcsv's Introduction

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

importcsv's People

Stargazers

Atsushi Kaneko avatar  avatar okin avatar  avatar  avatar Ryuichi Suzuki avatar Taichi OKABE avatar Hideaki Tamai avatar Adan Kobayashi avatar mtdtks avatar ms32 avatar dA Fujisawa avatar H.Koshimizu avatar  avatar  avatar nuki_pon avatar uribow avatar

Watchers

ritsuca avatar ms32 avatar James Cloos avatar uribow avatar  avatar

importcsv's Issues

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.