質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

Q&A

解決済

2回答

7053閲覧

googleスプレッドシートにローカルCSVファイルを書き込みたい

yskt

総合スコア16

CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

0グッド

0クリップ

投稿2018/04/12 09:31

編集2018/04/12 09:33

前提・実現したいこと

googleスプレッドシートにローカルCSVファイルを書き込みたい
ローカルCSVのファイルパス、ファイル名は変わらないため
理想はボタン押下で自動的にCSVファイルがそのままスプレッドシートに書き込まれることです。
しかし、調べてみるとそれは厳しそうで、
ダイアログボックスを表示させ、都度ファイルを指定する方法で今は大丈夫です。

やってみたこと

下記URL内のコードを参考にし、丸まるコピーしたところ動き、
http://googleappsscript.hatenablog.com/entry/2017/08/30/120000
ほぼほぼOKだったのですが、
書き込まれた際に、カンマ区切りで文字が区切られず
A列にすべて入ってしまいます。

どうにかして直そうと自分で試行錯誤してみたものが
下記のコードのfor文の個所になります。

コーディングの知識には乏しいため、
どなたかご教示いただければ幸いです。

該当のソースコード

function writeSheet(formObject) {

// フォームで指定したテキストファイルを読み込む
var fileBlob = formObject.myFile;

// テキストとして取得(Windowsの場合、文字コードに Shift_JIS を指定)
var text = fileBlob.getDataAsString("sjis");

// 改行コードで分割し配列に格納する
var textLines = text.split(/[\s]+/);

// 書き込むシートを取得
var sheet = SpreadsheetApp.getActiveSheet();

// テキストファイルをシートに展開する
for (var i = 0; i < textLines.length; i++) {         
var textSplit = textLines.split(',');

for (var j = 0; j < tsxtSplit.length; j++) {        

sheet.getRange(i + 1, j + 1).setValue(textsplit[j]);
}

// 処理終了のメッセージボックスを出力
Browser.msgBox("ローカルファイルを読み込みました");
}

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

理想はボタン押下で自動的にCSVファイルがそのままスプレッドシートに書き込まれることです。

しかし、調べてみるとそれは厳しそうで、

ファイルパスとファイル名が固定なら、ドライブファイルストリーム(←旧Driveアプリに相当)との連携になりますが、比較的容易に実装できますよ。

わざわざアップロード用のフォーム(HTML)を用意する必要もないです。

提示されたコードの修正や間違いの指摘ではなく、別解の提案(理想イメージの実装)となりますが、参考になれば幸いです。

投稿2018/04/13 14:33

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yskt

2018/04/16 00:24

ご回答ありがとうございます。 別解のご提案感謝いたします。 やはり、ドライブファイルストリームが一番容易なのですね。 参考にいたします!
guest

0

ベストアンサー

修正するとすれば以下のような感じでしょうね。

javascript

1/*省略*/ 2// テキストファイルをシートに展開する 3for (var i = 0; i < textLines.length; i++) {          4 var textSplit = textLines[i].split(',');// i番目の要素を配列へ 5 // textsplit → textSplit 6 sheet.getRange(i + 1, 1, 1, textSplit.length).setValues([textSplit]);// 1行分を展開(二次元配列) 7} 8// 処理終了のメッセージボックスを出力 9Browser.msgBox("ローカルファイルを読み込みました");// for文中にあると毎回ダイアログが表示される

提示されたコードに準じていますので、1行ごとに展開するようにしています。
処理負荷軽減と高速化のためにはtextLinesmap()で二次元配列にした上で、setValues()で一括展開すべきですね。

以上、動作確認等はしておりませんので、参考まで。

投稿2018/04/17 07:02

編集2018/04/17 08:05
退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yskt

2018/04/17 07:38

丁寧にご回答ありがとうございます。 修正いただいたコードは特にエラーは発生しなかったのですが、 読み込みがされなくなりました・・ しかし、理解ができました! 1行ごとに展開ですとパフォーマンスが悪いのですね。 ご提示いただいた一括展開の方法調べてやってみます! もし、、もしお時間があればそちらのコードも教えていただきたいです。
退会済みユーザー

退会済みユーザー

2018/04/17 08:03

あ、失礼いたしました。 コード中の変数で大文字となるべき部分が小文字のままでした。 修正しておきますね。
yskt

2018/04/17 10:03

修正ありがとうございます! 無事、動作確認できました。 本当に感謝いたします。
退会済みユーザー

退会済みユーザー

2018/04/17 13:15

何よりです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問