我使用expense report tutorial生成了大部分代码。
我改变的主要内容是代替费用报告ID作为行号,我把它变成了一个随机数(ll-nnnn)。我想使用报告ID作为费用报告表和费用审批表之间的标识符,因此我在报告表中添加了报告ID列。我希望脚本从批准表单中获取报告ID,并在报告表ID列中搜索包含该ID的行,然后输入它是否被批准或拒绝以及管理员在相应行中的任何评论。列M和N.在VBA中,我将使用的代码是和具有匹配条件的If语句。我是java脚本的新手,所以我不知道如何做到这一点。 ***我使用fooby提供的代码编辑了我的代码。当我运行它时,我收到错误“范围的坐标或尺寸无效。”在线:“poSheet.getRange(rowToUpdate,2,1,13).setValues(updateInfo);”任何建议将不胜感激!
var PO_SPREADSHEET_ID= "0At0Io3p64FeddFVCV2lJdEpLY09MYWNkVS05NDhzWkE";
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheets()[0];
var poSs = SpreadsheetApp.openById(PO_SPREADSHEET_ID);
var poSheet = poSs.getSheets()[0];
function updatePOSheet() {
// Get IDs from Approval Sheet
var row = sheet.getRange(2, 1, sheet.getLastRow()-1,sheet.getLastColumn()).getValues();
// Get IDs from Report Sheet, flatten it into a 1D array
var poId = poSheet.getRange(2,1,poSheet.getLastRow()-1,1).getValues().reduce(flatten_);
// For each row in the Approval Sheet update the coresponding report row
// reportIds is passed a "this" in the forEach function, see below
row.forEach(updateReportRow_,poId);
}
// Checks to see if the status of a row is either "Approved" or "Denied
// then updated the correct row in the reports sheet with manager's comments
function updateReportRow_(row) {
var id = row[2];
var status = row[3];
var comments = row[4];
// Get row in reports sheet from reportIds (it was passed as 'this')
var rowToUpdate = this.indexOf(id) + 1;
// Put info into spreadsheet friendly array
var updateInfo = [[status,comments]];
if (status == "Approved" || status == "Denied") {
poSheet.getRange(rowToUpdate, 2, 1, 13).setValues(updateInfo);
}
}
// Returns a piece of an array concatenated with the element on to it's right
// will make [[0],[1],[2]...]] into [0,1,2,...]
function flatten_(a,b) {
return a.concat(b);
}
答案 0 :(得分:1)
我一直使用这种技术,我试着在这里解释一下,但是进展不顺利。所以,我尽可能地整理了一个如何实现你想要的演示表。在我开始之前,这里是方法的一般要点和未注释的代码。
onFormSubmit()
触发器。reduce()
和一个名为flatten_(a,b)
的辅助函数关于演示表的一些注释:
以下是未注释的代码:
function updateReportRow(approvalInfo) {
var id = approvalInfo.namedValues.ID;
var status = approvalInfo.namedValues.Status;
var comments = approvalInfo.namedValues.Comments;
var reportSheet = SpreadsheetApp.openById("SheetID").getSheetByName("Report Sheet");
var reportIds = reportSheet.getRange(1,1,reportSheet.getLastRow(),1).getValues().reduce(flatten_);
var rowToUpdate = reportIds.indexOf(id.toString())+1;
if (rowToUpdate < 2) {
// Something went wrong...email someone!
} else {
if (status == "Approved") {
var updateInfo = [[status,comments,"STATE_APPROVED"]];
reportSheet.getRange(rowToUpdate, 5, 1, updateInfo[0].length).setValues(updateInfo);
} else if (status == "Denied") {
var updateInfo = [[status,comments,"STATE_DENIED"]];
reportSheet.getRange(rowToUpdate, 5, 1, updateInfo[0].length).setValues(updateInfo);
}
}
}
function flatten_(a,b) {
return a.concat(b);
}