使用来自Google表格的数据提取从模板创建Google Doc文档

问题描述 投票:0回答:1

我想从电子表格的多个位置获取数据,然后发送数据以从模板创建文档。关于如何简化或缩短代码的任何建议?它会在多大程度上影响计算机的性能?我下面的信息只有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");

}
google-apps-script google-sheets-api google-docs-api
1个回答
0
投票

此代码需要电子表格上的工作表/标签,在某些地方我称为工作表“ 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);
}

我怀疑此代码不太可能在第一次运行,因为我没有数据可以对其进行测试。

© www.soinside.com 2019 - 2024. All rights reserved.