0

我有一个谷歌电子表格,其中包含以下 7 列:1)房间号,2)服务员 1 姓名,3)服务员 2 姓名,4)服务员 3 姓名,5)服务员 1 经验,6)服务员 2 经验,7)服务员3 经验。我想从只有 3 列的电子表格创建一个文档或 pdf:1) 房间号,2) 服务员姓名,3) 服务员体验。也就是说,应该以这样一种方式,即所有 3 名服务员的服务员姓名和服务员体验对于每个房间来说都是一个低于另一个的。数据现在仅显示在 3 列而不是 7 列中。任何线索我如何编写谷歌应用程序脚本来执行此操作?

4

1 回答 1

1

你小时候玩过积木吗?在这段代码中你应该做同样的事情:提取单元格数据并按照你想要的方式重新组合它......

几个for loops很容易完成这项工作,下面的代码显示了一种方法,它在原始电子表格中创建了一个新工作表,并在表格中显示了一个新文档。

您必须添加一些格式改进以使其看起来更好,但数据就在那里,这是您问题的重点。

function myFunction() {
  var sh = SpreadsheetApp.getActiveSpreadsheet();
  var ss = sh.getActiveSheet();
  var inputRange = ss.getRange(1,1,ss.getLastRow(),7);
  var data = inputRange.getValues();
  Logger.log(data);
  var newData = [];
  newData.push(['Room Number','Waiter Name','Waiter experience']);
  for(var n=1;n<data.length;++n){
    for(var c=0;c<7;c=c+2){
      var row = [];
      if(c==0){row.push(data[n][0]) ; c++}else{row.push(' ')};
      row.push(data[n][c]);
      row.push(data[n][c+1]);
      newData.push(row);
      Logger.log(row);
    }
  }
  Logger.log(newData);
  sh.insertSheet().getRange(1,1,newData.length,newData[0].length).setValues(newData);
  var doc = DocumentApp.create('New Waiter list').getBody().appendTable(newData);
}

编辑:这里是如何处理文档表的格式 - 我只是不能使水平对齐工作....不知道为什么

function reformatTable() {
  var sh = SpreadsheetApp.getActiveSpreadsheet();
  var ss = sh.getSheets()[0];// here I chose to always get the first sheet in the spreadsheet
  var inputRange = ss.getRange(1,1,ss.getLastRow(),7);
  var data = inputRange.getValues();
  var newData = [];
  newData.push(['Room Number','Waiter Name','Waiter experience']);
  for(var n=1;n<data.length;++n){ // skip headers by starting at 1
    for(var c=0;c<7;c=c+2){
      var row = [];
      if(c==0){row.push(data[n][0]) ; c++}else{row.push('')};
      row.push(data[n][c])
      row.push(data[n][c+1]);
      newData.push(row);
    }
  }
  sh.insertSheet().getRange(1,1,newData.length,newData[0].length).setValues(newData);
  var doc = DocumentApp.create('New Waiter list'); // create document
  var table = doc.getBody().appendTable(newData); // create table in a separate process so I can set the style below
  var style = {};
  style[DocumentApp.Attribute.HORIZONTAL_ALIGNMENT] = DocumentApp.HorizontalAlignment.CENTER; // this one has no effect
  style[DocumentApp.Attribute.FONT_FAMILY] = DocumentApp.FontFamily.ARIAL;
  style[DocumentApp.Attribute.FONT_SIZE] = 10;
  style[DocumentApp.Attribute.FOREGROUND_COLOR] = '#0000ff';
  style[DocumentApp.Attribute.BORDER_COLOR] = '#dddddd' ;
  table.setAttributes(style);
} 
于 2013-09-27T08:13:27.020 回答