Google apps script 谷歌应用程序脚本(电子表格)-将数据整合到一张表格中
以下是设置Google apps script 谷歌应用程序脚本(电子表格)-将数据整合到一张表格中,google-apps-script,Google Apps Script,以下是设置 我们根据项目得分与所有员工进行竞赛。每个项目有两类员工(每类4名员工)和两个分数(每类员工一个分数)。 我需要获取员工的所有分数并将其输出到电子表格中 工作表说明 标记为“示例数据”的表是我们将从中提取数据的源 我们需要匹配编辑器和编辑器分数 我们需要匹配网站管理员和网站管理员的分数 标记为“示例输出”的工作表是我希望在另一个名为“竞赛结果”的电子表格中生成的工作表,其工作表名称来自源工作表(它们按日期范围命名)。 我们需要按类别对每个员工进行汇总 我们需要将单个员工的所有分数汇总到
我们根据项目得分与所有员工进行竞赛。每个项目有两类员工(每类4名员工)和两个分数(每类员工一个分数)。
我需要获取员工的所有分数并将其输出到电子表格中
工作表说明
标记为“示例数据”的表是我们将从中提取数据的源
function createScoreSheet() {
// Get Source spreadsheet
var source = SpreadsheetApp.getActive();
var sourceSheet = source.getActiveSheet();
var SourceActivate = sourceSheet.activate();
// Set Sheet Name
var sheetName = sourceSheet.getSheetName();
// Set Values to transpose and combine
var sourceEditor = sourceSheet.getRange("C1:C51");
var sourceWeb = sourceSheet.getRange("D1:D51");
var editorScores = sourceSheet.getRange("L1:L51");
var webScores = sourceSheet.getRange("K1:K51");
// Used to create a new spreadsheet
var sheetNameNew = sheetName + " Scores";
var createSheet = SpreadsheetApp.getActive().insertSheet(sheetNameNew,0);
var targetSheet = source.getSheetByName(sheetNameNew);
var totalScore = 1;
// s is the the counter we use to stick values into the rows
var s = 3;
// n is the the counter we use to stick values into the columns
var n = 1;
// loops through twice, once for the editor values, once for the webmaster
for (var j = 1; j<3; j++) {
if (j == 1) {
// grab values for the editors and copy to new sheet
sourceEditor.copyTo(targetSheet.getRange("A1"));
editorScores.copyTo(targetSheet.getRange("B1"));
// delete the header row then sort the column ASC by default
targetSheet.deleteRow(n);
targetSheet.sort(1);
// Find the last value to see how many scores we have
var lastRow = targetSheet.getLastRow();
}
if (j == 2) {
// grab values for the webmasters and copy to new sheet
sourceWeb.copyTo(targetSheet.getRange(n,1));
webScores.copyTo(targetSheet.getRange(n,2));
// delete the header row then sort the column ASC by default
targetSheet.deleteRow(n);
lastRow = targetSheet.getLastRow();
targetSheet.getRange(n,1,lastRow,2).sort(1);
lastRow = targetSheet.getLastRow();
}
// this loop will check to see if the value of the cell is equal to the next on the list and move the score
for (var i = 1; i<lastRow+1; i++) {
// Grab the name of the current row and the next
var firstName = targetSheet.getRange(n,1).getValue();
var nextName = targetSheet.getRange(n+1,1).getValue();
// Grab the scores
var oldScore = targetSheet.getRange(n+1,2);
var newScore = targetSheet.getRange(n,s);
// Loop to check to see if the firstname is blank and break to find the next value
if (firstName === "") {
break;
}
// checks to see if name is equal to the next then shifts then copies the score and adjust the horizontal position
if (firstName == nextName) {
totalScore = oldScore + newScore;
oldScore.copyTo(newScore);
s = s+1;
targetSheet.deleteRow(n+1);
}
// resets horizontal position for the score and increases the row
else {
s=3;
n=n+1;
}
}
// kills remaining rows
targetSheet.deleteRows(n,37);
}
}
函数createScoreSheet(){
//获取源电子表格
var source=SpreadsheetApp.getActive();
var sourceSheet=source.getActiveSheet();
var SourceActivate=sourceSheet.activate();
//设置图纸名称
var sheetName=sourceSheet.getSheetName();
//将值设置为转置和合并
var sourceEditor=sourceSheet.getRange(“C1:C51”);
var sourceWeb=sourceSheet.getRange(“D1:D51”);
var editorScores=sourceSheet.getRange(“L1:L51”);
var webcores=sourceSheet.getRange(“K1:K51”);
//用于创建新的电子表格
var sheetNameNew=sheetName+“分数”;
var createSheet=SpreadsheetApp.getActive().insertSheet(sheetNameNew,0);
var targetSheet=source.getSheetByName(sheetNameNew);
var totalScore=1;
//s是用于将值粘贴到行中的计数器
var s=3;
//n是用于将值粘贴到列中的计数器
var n=1;
//循环两次,一次用于编辑器值,一次用于网站管理员
对于(var j=1;j我会这样做:
如果要自动生成名称,请将其写入输出表A1:
=unique('Example Data'!B2:B)-此函数只生成A2-A5单元格的编辑器名称
现在将其写入B2单元:
=转置(filter('Example Data'!E:E,'Example Data'!B:B=A2))-此函数根据行开头的给定名称过滤编辑器点(在本例中为A2)。然后以水平形式转置结果。要获得其他行的结果,只需向下填充此公式
我想你可以找到剩下的。:)
希望有帮助。这确实有帮助,谢谢!