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

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

新規登録して質問してみよう
ただいま回答率
85.50%
Google Apps Script

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

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

1回答

707閲覧

GASで「関数 next が見つかりません。」のエラー

Khy

総合スコア118

Google Apps Script

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

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

1クリップ

投稿2019/05/09 03:37

現在Google Apps Scriptでスプレッドシートのアドオンを作ろうとしているのですが、以下のコードを実行した所「オブジェクト Marker で関数 next が見つかりません。」というエラーが出てしまいました。

アドオンで作りたい機能は以下の通りです。
①音楽のソフトから書き出したデータファイルを読み込む(.txt形式)
②それをドライブにアップロード
③そのファイルからデータを取り出し、シートにまとめる

このうち②まではきちんと動作しております。
また③については、アップロード機能を搭載する前は同じコードできちんと動作しておりました。

まだGASを勉強し始めたばかりなので至らぬ点も多いかと思いますが、お知恵をお貸しいただけると助かります。
よろしくお願い致します。

gs

1<!--コード.gs --> 2 3function onOpen(e) { 4 Logger.log("onOpen"); 5 SpreadsheetApp.getUi().createAddonMenu() 6 .addItem('Start', 'showSidebar') 7 .addToUi(); 8} 9 10function onInstall(e) { 11 Logger.log("onInstall"); 12 onOpen(e); 13} 14 15function showSidebar() { 16 Logger.log("showSidebar"); 17 var ui = HtmlService.createHtmlOutputFromFile('sidebar').setTitle('PT - CueSheet Maker'); 18 SpreadsheetApp.getUi().showSidebar(ui); 19} 20 21 22 23 24var fileId; 25var folderId = "12345678901234567890"; //フォルダID入れる 26var folder; 27 28function processForm(theForm) { 29 var fileBlob = theForm.myFile; 30 folder = DriveApp.getFolderById(folderId); 31 var doc = folder.createFile(fileBlob); 32 33 //アップロード完了htmlを作成し、ページ内に呼び出す準備をする 34 var template = HtmlService.createTemplateFromFile('Complete.html'); 35 36 //アップロード完了html内のタグに作成したURLをセット 37 template.fileUrl = doc.getUrl(); 38 fileId = doc.getId(); 39 40 //ページ内部にComplete.htmlの内容を呼び出す。 41 return template.evaluate().getContent(); 42} 43 44 45 46 47 48///////////////////////////////////////// 49///////////////////////////////////////// 50////////// シートに書き込む /////////// 51///////////////////////////////////////// 52///////////////////////////////////////// 53 54function makeCue(){ 55 56 ///////////////////////////////// 57 //データのフォーマット 58 ///////////////////////////////// 59 60 //.txtファイルのデータを改行で分割 61 var contents = DriveApp.getFolderById(folderId) 62 .next() 63 .getFilesById(fileId) 64 .next() 65 .getBlob() 66 .getDataAsString("UTF-8") 67 .split(/[\n]/); 68 //テキスト内の上12行を削除 69 contents.splice(0, 12); 70 71 for(var i = 0; i < contents.length-1; i++){ 72 //1行ずつ取り出し空白で区切る 73 var marker = contents[i]; 74 marker = marker.split(/\s+/); 75 } 76 77 ///////////////////////////////// 78 //以下データの書き込み 79 ///////////////////////////////// 80 var sheet = SpreadsheetApp.getActiveSheet(); 81 sheet.getDataRange().setHorizontalAlignment("center"); 82 83 //table of contents 84 sheet.getRange(1, 2).setValue('シーン'); 85 sheet.getRange(1, 3).setValue('in'); 86 sheet.getRange(1, 4).setValue('out'); 87 sheet.getRange(1, 6).setValue('inコメント'); 88 sheet.getRange(1, 7).setValue('outコメント'); 89 90 var title = []; 91 var inTime = []; 92 var outTime = []; 93 var inComment = []; 94 var outComment = []; 95 96 for(var i=0; i < contents.length-1; i++){ 97 if(i == 0 || i%2 == 0){ 98 //set 'in' data 99 title.push([contents[i][4].slice(0, -3)]); 100 inTime.push([contents[i][1].slice(0, -3)]); 101 inComment.push([contents[i][5]]); 102 }else{ 103 //set 'out' data 104 outTime.push([contents[i][1].slice(0, -3)]); 105 outComment.push([contents[i][5]]); 106 } 107 } 108 109 var len = (contents.length -1)/2; 110 111 for(var i=0; i < len; i++){ 112 sheet.getRange(2, 2, len, 1).setHorizontalAlignment("left"); 113 } 114 115 for(var i=0; i < len; i++){ 116 if(inComment[i] != '-'){ 117 sheet.getRange(i+2, 6).setHorizontalAlignment("left"); 118 } 119 } 120 121 for(var i=0; i < len; i++){ 122 if(outComment[i] != '-'){ 123 sheet.getRange(i+2, 7).setHorizontalAlignment("left"); 124 } 125 } 126 127 //write music number in sheet 128 for(var i=1; i <= len; i++){ 129 sheet.getRange(i+1, 1).setValue('M'+ i); 130 } 131 132 //write data in sheet 133 sheet.getRange(2, 2, len, 1).setValues(title); 134 sheet.getRange(2, 3, len, 1).setValues(inTime); 135 sheet.getRange(2, 4, len, 1).setValues(outTime); 136 sheet.getRange(2, 6, len, 1).setValues(inComment); 137 sheet.getRange(2, 7, len, 1).setValues(outComment); 138}

html

1<!--sidebar.html--> 2 3<!DOCTYPE html> 4<html> 5 <head> 6 <base target="_top"> 7 <link rel="stylesheet" href="https://ssl.gstatic.com/docs/script/css/add-ons1.css"> 8 <script> 9 //アップロードボタンクリック時のイベント 10 function updateOutput(resultHtml) { 11 //この関数が呼びだされる時点で、アップロード中・・・・ は完了しているので非表示に変更 12 toggle_visibility('inProgress'); 13 14 //引数の resultHtml には、processForm(this.parentNode) の戻り値がセットされる。 15 var outputDiv = document.getElementById('output'); 16 outputDiv.innerHTML = resultHtml; 17 } 18 //idタグ内の表示非表示の切り替え 19 function toggle_visibility(id) { 20 var e = document.getElementById(id); 21 if(e.style.display == 'block') 22 e.style.display = 'none'; 23 else 24 e.style.display = 'block'; 25 } 26 27 // Prevent forms from submitting. 28 function preventFormSubmit() { 29 var forms = document.querySelectorAll('form'); 30 for (var i = 0; i < forms.length; i++) { 31 forms[i].addEventListener('submit', function(event) { 32 event.preventDefault(); 33 }); 34 } 35 } 36 window.addEventListener('load', preventFormSubmit); 37 </script> 38 39 40 </head> 41 <body> 42 43 <h1>アップローダー</h1> 44 45 <div id="formDiv"> 46 <!-- Form div will be hidden after form submission --> 47 <form id="myForm"> 48 49 <div> 50 <label>①ファイルを選択</label><br/> 51 <input name="myFile" type="file" /> 52 </div><br/> 53 54 <!--<div class="block" id="button-bar">--> 55 <label>②アップロード</label><br/> 56 <input type="button" value="アップロード" 57 onclick="toggle_visibility('inProgress'); 58 google.script.run 59 .withSuccessHandler(updateOutput) 60 .processForm(this.parentNode)" /><br/> 61 62 <div id="inProgress" style="display: none;">アップロード中・・・・</div><br/> 63 <div id="output"></div> 64 65 <div class="block" id="button-bar"> 66 <label>③シートを作成</label><br/> 67 <input type="submit" class="blue" id="make-cue" value="シートを作成" onclick="preventFormSubmit()"> 68 </div> 69 70 </form> 71 </div> 72 <script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script> 73 <script> 74 /** 75 * idがmake-cueのボタンを押したらコード.gsの関数を実行 76 */ 77 $(function() { 78 $('#make-cue').click(makeCue); 79 }); 80 81 function makeCue() { 82 this.disabled = true; 83 84 $('#error').remove(); 85 var fileName = $('#fileName').val(); 86 google.script.run 87 .withSuccessHandler( 88 function(element) { 89 //$('#idHelloMsg').val(retrunMsg); 90 element.disabled = false; 91 }) 92 .withFailureHandler( 93 function(msg, element) { 94 showError(msg, $('#button-bar')); 95 element.disabled = false; 96 }) 97 .withUserObject(this) 98 .makeCue(); 99 } 100 101 function showError(msg, element) { 102 var div = $('<div id="error" class="error">' + msg + '</div>'); 103 $(element).after(div); 104 } 105 </script> 106 </body> 107</html>

html

1<!--Complete.html--> 2 3<div> 4 <h2>アップロード完了</h2> 5 <!--File URL: <?= fileUrl ?><br/>--> 6</div>

ちなみに.txtのファイル内容は以下のようになっております。

txt

1セッション名: tst 2サンプルレート: 48000.000000 3ビットデプス: 24ビット 4セッションスタートのタイムコード: 00:59:50:00 5タイムコードフォーマット: 29.97フレーム 6オーディオトラック数: 4 7オーディオ クリップの数: 14 8オーディオファイル数: 12 9 10 11マーカー リスト 12# ロケーション タイム リファレンス 単位 名前 コメント 137 01:01:09:12 3816000 サンプル イントロ_in 1416 01:01:36:26 5136000 サンプル イントロ_out 158 01:05:28:04 16248000 サンプル A_in 1617 01:06:59:09 20628000 サンプル A_out 171 01:13:22:20 39048000 サンプル B_in 1818 01:13:49:12 40332000 サンプル B_out 1931 01:15:43:08 45804000 サンプル C_in 209 01:16:42:16 48650880 サンプル C_out 2132 01:21:09:02 61456800 サンプル エンディング_in 2210 01:21:45:03 63189120 サンプル エンディング_out 23

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

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

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

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

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

guest

回答1

0

とりあえず

javascript

1 var contents = DriveApp.getFolderById(folderId) 2 .next() 3// .getFilesById(fileId) //sはないはず 4 .getFileById(fileId) 5// .next() //1個になってるのでnextはないはず 6 .getBlob() 7 .getDataAsString("UTF-8") 8 .split(/[\n]/);

のようにを直してはどうでしょうか。

投稿2019/05/09 05:10

papinianus

総合スコア12705

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問