次の7つの列を持つGoogleスプレッドシートがあります:1)部屋番号、2)ウェイター1の名前、3)ウェイター2の名前、4)ウェイター3の名前、5)ウェイター1の経験、6)ウェイター2の経験、7)ウェイター3 経験。スプレッドシートから、1) 部屋番号、2) ウェイターの名前、3) ウェイターの経験の 3 列だけのドキュメントまたは PDF を作成したいと考えています。つまり、3 人のウェイター全員のウェイター名とウェイターの経験が、部屋ごとに上下するようにする必要があります。データは現在、7 列ではなく 3 列のみで表示されています。これを行うための Google Apps スクリプトを作成するにはどうすればよいですか?
質問する
1386 次
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 に答える