簡體   English   中英

如何將相同范圍從文件夾中的每個文件合並到母版紙上?

[英]How can I merge Same Range from each file in a folder onto a master sheet?

我以這種方式修改了代碼...它從所有工作表中收集數據,僅查找具有數據的行,但是現在我在每次通過時都修改范圍,使其等於行的行數時遇到問題具有值(通過(values [row] [0]!=”找到))。 我已經放了一個??? 在我要可變高度的地方。

function getAllData() {
var folder = DocsList.getFolderById("folderid");
var contents = folder.getFiles();
Logger.log("file length: " + contents.length);

var file;
var data;

var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Base")
sheet.clearContents();



var numOfFiles = contents.length;

for (var i = 0; i < numOfFiles; i++) {
file = contents[i];
Logger.log("count: "  + i);

var theFileType = file.getFileType();
Logger.log("theFileType: " + theFileType);

if (theFileType==DocsList.FileType.SPREADSHEET) {

  var sheet2 = SpreadsheetApp.open(file).getSheetByName("Sheet 1");
  var lastLine = sheet2.getLastRow();
var values = sheet2.getRange('A3:J').getValues();
var formulas = sheet2.getRange('A3:J').getFormulas();

    var data = [];

      for(var row = 0 ; row < (values).length ; row++){

 var lastrow = sheet.getLastRow()+1;
if (values[row][0] != '')  {

for(var col = 0 ; col < formulas[row].length ; col++){
    if(formulas[row][col] != '')
      {values[row][col] = formulas[row][col]};


  data.push(values[row]);}
  if(data.length > 0)
  sheet.getRange(lastrow, 1, ???, data[0].length).setValues(data);

  } 
}

  };
}}

您正在使用getValue()而不是getValues() (結尾處帶有字母“ s”)

var onecell = posheet.getRange('B4').getValue();

該文檔指出:

getValue()-返回范圍中左上角單元格的值。

getRange()的參數有點棘手,沒有很好的文檔說明。
例如:

getRange(2, 3, 6, 4)

從C2到G8的范圍。 弄清楚。 第一個數字是數字2,用於行2。第二個數字是3,用於第三列(C)。 第三個和第四個數字相對於前兩個數字。

另外,您使用的是: appendRow([array]) ,該數組使用數組作為參數。 因此,您必須確保數據為數組形式,或使用其他形式。

這是getValues的鏈接:

Google文檔-getValues

示例是以下代碼:

 // The code below will get the values for the range C2:G8
 // in the active spreadsheet.  Note that this will be a javascript array.
 var values = SpreadsheetApp.getActiveSheet().getRange(2, 3, 6, 4).getValues();
 Logger.log(values[0][0]);

這是似乎有效的代碼:

function getAllData() {
  var folder = DocsList.getFolderById("Your file ID");
  var contents = folder.getFiles();
  Logger.log("file length: " + contents.length);

  var file;
  var data;

  var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet1")
  sheet.clearContents();

  sheet.appendRow(["Value from Sheet One", "Range of values from Sheet Two"]);

  var numOfFiles = contents.length;

  for (var i = 0; i < numOfFiles; i++) {
    file = contents[i];
    Logger.log("count: "  + i);

    //Reset to null on every iteration 
    var onecell = null;
    var theRange = null;

    var theFileType = file.getFileType();
    Logger.log("theFileType: " + theFileType);

    if (theFileType==DocsList.FileType.SPREADSHEET) {
      var sheet1 = SpreadsheetApp.open(file).getSheetByName("Sheet1");
      var sheet2 = SpreadsheetApp.open(file).getSheetByName("Sheet2");

     // The code below will get the values for the range A3:A9
     // in the active spreadsheet.  Note that this will be a javascript array.

      onecell = sheet1.getRange('B4').getValue();
      theRange = sheet2.getRange(1,3,1,6).getValues();

      Logger.log('onecell: ' + onecell);
      Logger.log('onecell[0][0]: ' + onecell[0][0]);

      Logger.log('theRange: ' + theRange)
      Logger.log('theRange[0][0]: ' + theRange[0][0])

      var multipleValues = [theRange[0][0], theRange[0][1], theRange[0][2], theRange[0][3], theRange[0][4]];
      Logger.log('multipleValues: ' + multipleValues);

      sheet.appendRow([onecell, "'" + multipleValues]);
    };
  }
}

在第一列中,它僅向工作表單元格輸入一個值。 在第二列中,該單元格從該行獲取多個值。 換句話說,將整個行中的值相加,並合並並放入一個單元格中。 我認為這就是您想要的代碼。

如果您嘗試將數組放入電子表格單元格中,而不是將值數組顯示為文本,它會顯示類似對象的內容。 因此,我在值前面加上了引號,因此單元格格式將默認為文本。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM