单元格参考超出范围,谷歌表

时间:2016-01-20 01:33:25

标签: google-apps-script google-sheets

运行此工作表时出现此错误。

  

单元格引用超出范围(第81行,文件“genreportSE”)

我不知道为什么它说'超出范围'。

我试图使用'copyvalues'。我看到一个脚本,你不能真正“打印”一个范围,但你可以创建另一个电子表格,复制该范围,然后打印该表并删除它。

我该如何做到这一点?

function genreportSE() {                                                                          // This function let us read the value of a cell from a sheet and change the value of another cell in a different sheet
    var ss = SpreadsheetApp.getActive();                                                            //ss stands for spreadsheet, this is the active spreadsheet
    var clientsheet = ss.getSheetByName('Clientes SE');
    var gensheet = ss.getSheetByName('Generador SE');
    var clienttable = clientsheet.getDataRange();
    var numberofservices = clienttable.getNumRows();                                                //The number of services in the Clientes sheet
    var error1;
    var error2;
    var rangetocheck1;
    var rangetocheck2;
    var client;
    var clientname;
    var i=0;                           
    var reportswitherrors = [];                                                                     //Array for faulty reports
    var email ='jvaldez@galt.mx';
    var subject = "Reporte de producción y consumo - " + (new Date()).toString();
    var body = "TEXT" ;

    for (i=0;i<=2;i++){
        gensheet.getRange('B2').setValue(clientsheet.getRange(i+2,1).getValue());                     //This will change the cell "B2" in "Generador SE" to the current service number for the report generation

        Utilities.sleep(3000);                                                                        //A timer to let the importdata function get the data from the SE server in miliseconds

        client = gensheet.getRange('B4').getValue;
        clientname = String(client);
        rangetocheck1 = gensheet.getRange('B8:C14').getValues();                                      //Data range that could present calculation errors   ********
        rangetocheck2 = gensheet.getRange('H8:H14').getValues();                                      //Data range that could present calculation errors   ********

        if(String(rangetocheck1).indexOf('#N/A') == -1) {                                             //This checks if there are any errors in rangetocheck1
            error1 = false;
        } else {
            error1 = true;
        };

        if(String(rangetocheck2).indexOf('#N/A') == -1) {                                             //This checks if there are any errors in rangetocheck2
            error2 = false;
        } else{
            error2 = true;
        };

        if(error1||error2){
            reportswitherrors.push(clientsheet.getRange(i+2,1).getValue());                               //This appends the current service number to the faulty services array
        } else {
            // Convert individual worksheets to PDF
            var newSpreadsheet = SpreadsheetApp.create("Spreadsheet to export",15,60);
            newSpreadsheet.getSheetByName('Sheet1').activate();
            var newsheet = newSpreadsheet.getSheetByName('Sheet1');
            var genRange = gensheet.getRange('A1:H50').copyValuesToRange(newsheet,0,10,0,55)

            var pdf = DriveApp.getFileById(newSpreadsheet.getId()).getAs('application/pdf').getBytes();
            var attach = {fileName:'Weekly Status.pdf',content:pdf, mimeType:'application/pdf'};
            MailApp.sendEmail(email, subject, body, {attachments:[attach]});

            DriveApp.getFileById(newSpreadsheet.getId()).setTrashed(true);
        }
    };

    Logger.log(reportswitherrors);
}

1 个答案:

答案 0 :(得分:0)

看来你已经得到了你的排和列函数在函数调用之间翻转。 (因为谷歌决定与他们的顺序不一致......)

此行调用create(name, rows, columns)

var newSpreadsheet = SpreadsheetApp.create("Spreadsheet to export",15,60);

您已经创建了一个包含15行和60列的电子表格。

更进一步,可能在第81行copyValuesToRange(sheet, column, columnEnd, row, rowEnd)被调用:

var genRange = gensheet.getRange('A1:H50').copyValuesToRange(newsheet,0,10,0,55)