2013-09-27 254 views
0

我有一个谷歌电子表格,它有以下7列:1)房间号码,2)服务员1名称,3)服务员2名称,4)服务员3名称, 5)服务员1经验,6)服务员2经验,7)服务员3经验。我想用电子表格创建一个文档或pdf,只有3列:1)房间号码,2)服务员姓名,3)服务员经验。也就是说,每个房间的服务员的名字和服务员的经历应该都是三个服务员之一。数据现在只用3列而不是7列出。任何线索我如何编写一个谷歌应用脚​​本来做到这一点?从谷歌电子表格提取部分数据到谷歌文档

回答

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); 
} 
+0

哔哔,非常感谢你!你变得如此简单! – user1327454

相关问题