2016-03-09 87 views
-1

我有一个功能,可以将一张纸复印到另一张纸上并对其进行格式化。我只是试图让列调整大小,但我得到Those columns are out of bounds错误。Google Apps脚本 - autoResizeColumn错误[越界]

function print_weekly_schedule(){ 

    // ************************ 
    // Sheet Variables Setup 
    // ************************ 
    var ss = SpreadsheetApp.getActiveSpreadsheet(); 
    var print = ss.getSheetByName("Print") 
    var schedule = ss.getSheetByName("Schedule") 

    // Create Weekly, Printable Schedule 
    print.clear({formatOnly:true}); 
    print.deleteColumns(2, print.getMaxColumns()-1); 
    print.deleteRows(2, print.getMaxRows()-1); 

    print.insertRows(1, 1); 

    schedule.getRange(8, 1, schedule.getMaxRows(), schedule.getMaxColumns()).copyTo(print.getRange(2, 1)); 

    for (var i=1; i < print.getLastColumn(); i++){ 
    print.autoResizeColumn(i); 
    } 

} 

一个非常类似的脚本工作在另一个功能,但我难住为什么这是行不通的。我试着Logger.log(print.getLastColumn)我找回所需的数字,23

当我调试这个脚本,它将停止在i=2

缺少什么我在这里?

+0

从哪一行触发?你确定它来自'autoResizeColumn'吗?我倾向于相信它来自'copyTo'行 – Adelin

+0

我不想回答我自己的问题,因为它没有贡献。 @Adelin是对的,这个问题是由'copyTo'造成的。我必须先创建行,然后复制,然后'autoResizeColumn'。之后一切都奏效了。 – Bardworx

回答

0

由于这是低票,我想解释。

schedule.getRange (8, 1, schedule.getMaxRows(), schedule.getMaxColumns()).copyTo(print.getRange(2, 1));

效果很好,它会适当地进行复制,但您将无法使用print.autoResizeColumn。调整列大小的唯一方法是如果先插入空列,然后复制数据并调整大小。

全面实施:

function print_weekly_schedule(){ 

    // ************************ 
    // Sheet Variables Setup 
    // ************************ 
    var ss = SpreadsheetApp.getActiveSpreadsheet(); 
    var print = ss.getSheetByName("Print"); 
    var schedule = ss.getSheetByName("Schedule"); 

    // Clear out content that is present 
    print.clear({formatOnly:true}); 
    print.deleteColumns(2, print.getMaxColumns()-1); 
    print.deleteRows(2, print.getMaxRows()-1); 

    // Insert new row and columns 
    print.insertRows(1, 1); 
    print.insertColumns(1, 22); 

    // Copy over content from previous tab 
    schedule.getRange(8, 1, schedule.getMaxRows(), schedule.getMaxColumns()).copyTo(print.getRange(1, 1), {contentOnly:true}); 

    // Resize Columns 
    for (var i=1; i < print.getLastColumn(); i++){ 
    print.autoResizeColumn(i); 
    } 

} 

希望这可以帮助别人。