1

フォルダ内のファイル数を数えるgoogleスクリプトを作成しようとしていますが、この数値を変数のサイズを定義するために使用できますアレイ。配列のサイズをフォルダ内のファイル数と同じに設定する

  1. IDフォルダ
  2. フォルダ内のファイルが
  3. セットカウンタは= FILECOUNT
  4. 使用カウンタは、配列サイズを定義するために取得

私の試み:私は

function setarraytofilecount() { 
var dealspsfolderid = "ID goes here"; 
var dealspsfolder = DriveApp.getFolderById(dealspsfolderid); 
var ssfiles = dealspsfolder.getFiles(); 

var count, file; 

count = 0; 

while (ssfiles.hasNext()) { 
count++; 
file = ssfiles.next(); 
} 

var nesteddata = new Array(count); 

filの数に等しいサイズの配列を作成することを期待する私はこれが起こっているとは思わない。

スクリプトは実行されますが、これ以降は単純化のために省略しています。私は、問題は、私は新しいArray()で変数のカウントを使用することはできませんかもしれないと思う、それは正しいですか?ここで


は、全体のスクリプトです:

function autoUpdateFiles() { 

// set the folder to pull files from 
var dealspsfolderid = "removed"; 
var dealspsfolder = DriveApp.getFolderById(dealspsfolderid); 
var ssfiles = dealspsfolder.getFiles(); 
var trackerurl = "removed"; 
var sstoupdate = SpreadsheetApp.openByUrl(trackerurl); 

// set the sheet to update 
var sheettoupdate = sstoupdate.getSheetByName('AutoTracker'); 

// indicates current deal row 
var rowcounter = 0; 

// get number of files in the folder which we can use to define array size 
var count,file;//Define variables without assigning a value 
count = 0; 
while (ssfiles.hasNext()) { 
count++; 
file = ssfiles.next(); 
} 

// nested array of row data arrays. i.e. each index is an array of a row 
var nesteddata = new Array(); 
nesteddata.length = count; 
for(i = 0; i < nesteddata.length; i++){ 
    nesteddata[i] = new Array(158); 
} 

// nested array of row data arrays. i.e. each index is an array of a row 
var URLarray = new Array(); 
URLarray.length = count; 
for(i = 0; i < URLarray.length; i++){ 
URLarray[i] = new Array(1); 
} 

// iterate through each file 
while (ssfiles.hasNext()) { 

// pull the next file 
var file = ssfiles.next(); 

// get the url  
Logger.log(file.getUrl()); 

// activate the sheet 
var spreadsheet = SpreadsheetApp.open(file); 
var activesheet = spreadsheet.getSheets()[0].activate(); 

// pull values from the files 
// ranges are ROW, COLUMN 
var URL = file.getUrl(); 
var colC = activesheet.getRange(3, 3, 158 ,3).getValues();   

// transition the vertical multidimensional array returned into flat array for a row 
for(var i = 0; i < colC.length; i++){ 
    nesteddata[rowcounter][i]=colC[i][0]; 
    } 

for(var i = 0; i < URLarray.length; i++){ 
    URLarray[rowcounter]= [URL];  
    } 
rowcounter ++; 
} 

// write out to the sheet 
sheettoupdate.getRange(2,1,nesteddata.length,1).setValues(URLarray); 
sheettoupdate.getRange(2,2,nesteddata.length,158).setValues(nesteddata); 
+0

なぜあなたは "信じない" を持つと、その中の要素の数を持っているのだろうか?エラーメッセージが表示されますか? –

+0

[配列サイズはどのようにJavascriptで動作するのですか?](https://stackoverflow.com/questions/6232151/how-do-array-sizes-work-in-javascript) –

+0

エラーメッセージは表示されませんが、私は書いています入れ子にされた配列から値を取り出し、それが書かれているすべてが「見つからない」ので、次元が入力されていないと思います。 –

答えて

0

あなたは、配列の要素数を設定するlengthプロパティを使用することができます。

var nesteddata = new Array(); 

nesteddata.length = count; 
Logger.log(nesteddata); 
Logger.log(nesteddata.length); 

配列は次のようになります。

[null、null、null、null、null、null、null、null、null、null、null、null、 NULL、NULL、NULL、NULL、NULL、NULL、NULL]

これは、すべての要素がnull

+0

これはうまくいくように思えますが、今私も同様の問題があります。カウント変数の長さを使って、書き出す範囲を定義する必要があります:sheettoupdate.getRange(2,2,110,158).setValues(nesteddata); –

+0

110の代わりにnesteddata.lengthを使用しましたが、動作するようです。スクリプトは実行されますが、データは取得されません。しかし、配列の次元は正しい(ファイルの数に等しい)。しかし配列は "NOT_FOUND"で埋められています。 –

+0

私は、ループが実行していない間、おそらく2番目のwhileループが実行されていない間に2と関係があると推測していますか? –

関連する問題