我想从电子表格的多个位置获取数据,然后发送数据以从模板创建文档。关于如何简化或缩短代码的任何建议?它会在多大程度上影响计算机的性能?我下面的信息只有30%,如果我要完成代码,它将非常长。
function CreateReport1G() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var ReportSheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet(); //Get Sheet Report
var ReportFolder = DriveApp.getFolderById('1XUE25cLJf0BYSknujYlAHJt0dYvAp2yL');
var oneGradeId = '1J2-Ct9jrfFwfFrJ8apJycm487eNYOFCZvjUX5cBDHDM';
var C1GD1 = ReportSheet.getRange('D1').getValue();
var C1GD5 = ReportSheet.getRange('D5').getValue();
var C1GD8 = ReportSheet.getRange('D8').getValue();
var C1GD7 = ReportSheet.getRange('D7').getValue();
var date = ReportSheet.getRange('D6').getValue();
var C1GD6 = Utilities.formatDate(date, ss.getSpreadsheetTimeZone(), "d MMM YYYY");
var C1GD2 = ReportSheet.getRange('D2').getValue();
var C1GD9 = ReportSheet.getRange('D9').getValue();
var C1GD10 = ReportSheet.getRange('D10').getValue();
var C1GD11 = ReportSheet.getRange('D11').getValue();
var C1GD14 = ReportSheet.getRange('D14').getValue();
var C1GD15 = ReportSheet.getRange('D15').getValue();
var C1GD16 = ReportSheet.getRange('D16').getValue();
var C1GD17 = ReportSheet.getRange('D17').getValue();
var C1GD18 = ReportSheet.getRange('D18').getValue();
var C1GD20 = ReportSheet.getRange('D20').getValue();
var C1GD21 = ReportSheet.getRange('D21').getValue();
var C1GD22 = ReportSheet.getRange('D22').getValue();
var C1GD23 = ReportSheet.getRange('D23').getValue();
var C1GD24 = ReportSheet.getRange('D24').getValue();
var C1GD29 = Utilities.formatDate(ReportSheet.getRange('D29').getValue(), ss.getSpreadsheetTimeZone(), "HH:MM");
var C1GF29 = Utilities.formatDate(ReportSheet.getRange('F29').getValue(), ss.getSpreadsheetTimeZone(), "d MMM YYYY");
var C1GD30 = Utilities.formatDate(ReportSheet.getRange('D30').getValue(), ss.getSpreadsheetTimeZone(), "HH:MM");
var C1GF30 = Utilities.formatDate(ReportSheet.getRange('F30').getValue(), ss.getSpreadsheetTimeZone(), "d MMM YYYY");
var C1GD31 = Utilities.formatDate(ReportSheet.getRange('D31').getValue(), ss.getSpreadsheetTimeZone(), "HH:MM");
var C1GF31 = Utilities.formatDate(ReportSheet.getRange('F31').getValue(), ss.getSpreadsheetTimeZone(), "d MMM YYYY");
var C1GD32 = Utilities.formatDate(ReportSheet.getRange('D32').getValue(), ss.getSpreadsheetTimeZone(), "HH:MM");
var C1GF32 = Utilities.formatDate(ReportSheet.getRange('F32').getValue(), ss.getSpreadsheetTimeZone(), "d MMM YYYY");
var C1GD33 = Utilities.formatDate(ReportSheet.getRange('D33').getValue(), ss.getSpreadsheetTimeZone(), "HH:MM");
var C1GF33 = Utilities.formatDate(ReportSheet.getRange('F33').getValue(), ss.getSpreadsheetTimeZone(), "d MMM YYYY");
var C1GD34 = Utilities.formatDate(ReportSheet.getRange('D34').getValue(), ss.getSpreadsheetTimeZone(), "HH:MM");
var C1GF34 = Utilities.formatDate(ReportSheet.getRange('F34').getValue(), ss.getSpreadsheetTimeZone(), "d MMM YYYY");
var C1GD35 = Utilities.formatDate(ReportSheet.getRange('D35').getValue(), ss.getSpreadsheetTimeZone(), "HH:MM");
var C1GF35 = Utilities.formatDate(ReportSheet.getRange('F35').getValue(), ss.getSpreadsheetTimeZone(), "d MMM YYYY");
var C1GD36 = Utilities.formatDate(ReportSheet.getRange('D36').getValue(), ss.getSpreadsheetTimeZone(), "HH:MM");
var C1GF36 = Utilities.formatDate(ReportSheet.getRange('F36').getValue(), ss.getSpreadsheetTimeZone(), "d MMM YYYY");
var C1GD37 = Utilities.formatDate(ReportSheet.getRange('D37').getValue(), ss.getSpreadsheetTimeZone(), "HH:MM");
var C1GF37 = Utilities.formatDate(ReportSheet.getRange('F37').getValue(), ss.getSpreadsheetTimeZone(), "d MMM YYYY");
var C1GD38 = Utilities.formatDate(ReportSheet.getRange('D38').getValue(), ss.getSpreadsheetTimeZone(), "HH:MM");
var C1GF38 = Utilities.formatDate(ReportSheet.getRange('F38').getValue(), ss.getSpreadsheetTimeZone(), "d MMM YYYY");
var C1GD39 = Utilities.formatDate(ReportSheet.getRange('D39').getValue(), ss.getSpreadsheetTimeZone(), "HH:MM");
var C1GF39 = Utilities.formatDate(ReportSheet.getRange('F39').getValue(), ss.getSpreadsheetTimeZone(), "d MMM YYYY");
var C1GD40 = Utilities.formatDate(ReportSheet.getRange('D40').getValue(), ss.getSpreadsheetTimeZone(), "HH:MM");
var C1GF40 = Utilities.formatDate(ReportSheet.getRange('F40').getValue(), ss.getSpreadsheetTimeZone(), "d MMM YYYY");
var documentId = DriveApp.getFileById(oneGradeId).makeCopy(ReportFolder).getId();
DriveApp.getFileById(documentId).setName('Summary Report - Job ' + C1GD1);
var body = DocumentApp.openById(documentId).getBody();
body.replaceText('1GD05', C1GD5);
body.replaceText('1GD08', C1GD8);
body.replaceText('1GD07', C1GD7);
body.replaceText('1GD01', C1GD1);
body.replaceText('1GD06', C1GD6);
body.replaceText('1GD02', C1GD2);
body.replaceText('1GD02', C1GD2);
body.replaceText('1GD09', C1GD9);
body.replaceText('1GD10', C1GD10);
body.replaceText('1GD11', C1GD11);
body.replaceText('1GD14', C1GD14);
body.replaceText('1GD15', C1GD15);
body.replaceText('1GD16', C1GD16);
body.replaceText('1GD17', C1GD17);
body.replaceText('1GD18', C1GD18);
body.replaceText('1GD20', C1GD20);
body.replaceText('1GD21', C1GD21);
body.replaceText('1GD22', C1GD22);
body.replaceText('1GD23', C1GD23);
body.replaceText('1GD24', C1GD24);
body.replaceText('1GD29', C1GD29);
body.replaceText('1GF29', C1GF29);
body.replaceText('1GD30', C1GD30);
body.replaceText('1GF30', C1GF30);
body.replaceText('1GD31', C1GD31);
body.replaceText('1GF31', C1GF31);
body.replaceText('1GD32', C1GD32);
body.replaceText('1GF32', C1GF32);
body.replaceText('1GD33', C1GD33);
body.replaceText('1GF33', C1GF33);
body.replaceText('1GD34', C1GD34);
body.replaceText('1GF34', C1GF34);
body.replaceText('1GD35', C1GD35);
body.replaceText('1GF35', C1GF35);
body.replaceText('1GD36', C1GD36);
body.replaceText('1GF36', C1GF36);
body.replaceText('1GD37', C1GD37);
body.replaceText('1GF37', C1GF37);
body.replaceText('1GD38', C1GD38);
body.replaceText('1GF38', C1GF38);
body.replaceText('1GD39', C1GD39);
body.replaceText('1GF39', C1GF39);
body.replaceText('1GD40', C1GD40);
body.replaceText('1GF40', C1GF40);
ss.toast("Report has been complied");
}
此代码需要电子表格上的工作表/标签,在某些地方我称为工作表“ ReportGenerator”,这是其副本的公共链接:ReportGenerator
这将需要能够访问上面的电子表格。如果更改任何标题标题,则必须在代码中进行相应的更改。这可能是个坏消息,但好消息是可以移动专栏。
function CreateReport1G0() {
var ss = SpreadsheetApp.getActive();
var ReportSheet = ss.getActiveSheet(); //Get Sheet Report
var ReportFolder = DriveApp.getFolderById('1XUE25cLJf0BYSknujYlAHJt0dYvAp2yL');
var oneGradeId = '1J2-Ct9jrfFwfFrJ8apJycm487eNYOFCZvjUX5cBDHDM';
var ReportGeneratorSheet=ss.getSheetByName('ReportGenerator')
var rg=ReportGeneratorSheet.getDataRange();
var vA=rg.getValues();
var hA=vA[0];
var hObj={};
var hObj={};
var reportObj={};
var replaceObj={};
DriveApp.getFileById(documentId).setName('Summary Report - Job ' + C1GD1);
var body = DocumentApp.openById(documentId).getBody();
hA.forEach(function(name,i){hObj[name]=i;});
vA.forEach(function(r,i){
switch (r[hObj.Action]) {
case 'getValue':
body.replaceText(r[hObj.DocCode],r[hObj.cidx]);
break;
case 'formatDate':
body.replaceText(r[hObj.DocCode],Utilities.formatDate(new Date(r[hObj.cidx]),ss.getSpreadsheetTimeZone(),"d MMM YYYY"));
break;
}
})
}
A,B和G列中的信息实际上来自您。下面的函数计算row,col,ridx和cidx,然后在上面的函数中使用它们替换文档中的数据。
function calculateRowColAndIndices() {
var ss=SpreadsheetApp.getActive();
var sh=ss.getSheetByName("ReportGenerator");
var hA=sh.getRange(1,1,1,sh.getLastColumn()).getValues()[0];
var hObj={};
hA.forEach(function(name,i){
hObj[name]=i;
});
var rg=sh.getRange(2,1,sh.getLastRow()-1,sh.getLastColumn());
var vA=rg.getValues();
vA.forEach(function(r,i){
r[hObj.col]=sh.getRange(r[hObj.A1Not]).getColumn();
r[hObj.row]=sh.getRange(r[hObj.A1Not]).getRow();
r[hObj.cidx]=Number(r[hObj.col])-1;
r[hObj.ridx]=Number(r[hObj.row])-1;
})
rg.setValues(vA);
}
我怀疑此代码不太可能在第一次运行,因为我没有数据可以对其进行测试。