我有一个谷歌电子表格,其中包含以下7列:1)房间号,2)服务员1名,3)服务员2名,4)服务员3名,5)服务员1经验,6)服务员2经验, 7)服务员3经验。我想从电子表格中创建一个只有3列的文档或pdf:1)房间号,2)服务员姓名,3)服务员经验。也就是说,它应该是这样的:每个房间的所有3个服务员的服务员姓名和服务员经历是一个在另一个之下。现在数据只显示在3列而不是7列。任何线索如何编写谷歌应用程序脚本来执行此操作?
答案 0 :(得分: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);
}