如何将列的大小从最小宽度调整为自动调整大小

时间:2019-03-26 14:48:50

标签: google-apps-script google-sheets width

我有一个包含许多工作表的电子表格。第一张纸有X列用过的列,其余的纸有Y列用过。我想做的是在给定宽度和自动调整宽度之间调整列的大小(如果较大)。

到目前为止,我有以下代码可以自动调整列的大小。

function resizeColumns() {
  SpreadsheetApp.flush();
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheets = ss.getSheets();

  var lastColumnMain = sheets[0].getLastColumn();
  var lastColumnUniversities = sheets[1].getLastColumn();

  for (var i = 0; i < sheets.length; i++) {
    var range;
    if (i == 0) {
      sheets[i].autoResizeColumns(1, lastColumnMain);
      range = sheets[i].getRange(1, 1, 1, lastColumnMain);
    } else {
      sheets[i].autoResizeColumns(1, lastColumnUniversities);
      range = sheets[i].getRange(1, 1, 1, lastColumnUniversities);
    }
    // Change width if less than 110 pixels
  }
}

我曾考虑过使用某种范围来获取列宽,然后在列宽太小的情况下从列宽更改,但是我缺乏远见,无法确切地知道如何做到这一点。

1 个答案:

答案 0 :(得分:0)

我也在寻找这个问题的答案,以下脚本是我目前正在使用的。 首先,我创建了一个虚拟表,其标题行与我运行的报告完全相同,并将列设置为我在每个报告中想要的宽度。然后运行以下命令以获取与其索引配对的每列的宽度并将值推送到数组中,并将它们也设置在标题上方的行中。

    function colWidth() {
       var WidthArry = [];
       var ss = SpreadsheetApp.getActiveSpreadsheet();
       var sheet = ss.getSheetByName('Setup'); //.getSheets()[0];
       var numColumns = 21; // sheet.getMaxColumns(); 
       var columnPosition, width;
       var i = 0;
         while (i < numColumns) {
           columnPosition = i + 1;
            Logger.log(columnPosition);
          width = sheet.getColumnWidth(columnPosition);
          //push position and width to array
           WidthArry.push([columnPosition, width]);
            //set width value in cell above header col see image
          sheet.getRange(1, columnPosition).setValue(width);
          Logger.log(columnPosition);
          i = i + 1;
        }
         Logger.log(WidthArry.toString());
        return WidthArry.toString();
         }//end function

返回以下内容,并在标题的每一列的第一个单元格中设置值。 set width value in cell above header cell Logger.log([1,218,2,100,3,100,4,40,5,502,6,100,7,76,8,100,9,72,10,100,11,75,12,100,13,71,14,70,15,100,16,100,17,100,18,26,19,20,20,105,21,15, []])

因为这个报告在列宽方面没有变化,我只是在函数调用中使用每一对来在数据解析到工作表后立即重置列。

    function SetWidth(e){
         var ss = SpreadsheetApp.getActiveSpreadsheet();
         var NwSht;
           Logger.log(e);
        if(!e){  return ss.toast("no event values");
          }else{
           NwSht = e;
            }
          var sheet = ss.getSheetByName(NwSht);
              sheet.setColumnWidth(1, 218);
              sheet.setColumnWidth(2, 100);
              sheet.setColumnWidth(3, 100);
              sheet.setColumnWidth(4, 40);
              sheet.setColumnWidth(5, 502);
              sheet.setColumnWidth(6, 100);
              sheet.setColumnWidth(7, 76);
              sheet.setColumnWidth(8, 100);
              sheet.setColumnWidth(9, 72);
              sheet.setColumnWidth(10, 100);
              sheet.setColumnWidth(11, 75);
              sheet.setColumnWidth(12, 100);
              sheet.setColumnWidth(13, 71);
              sheet.setColumnWidth(14, 70);
              sheet.setColumnWidth(15, 100);
              sheet.setColumnWidth(16, 100);
              sheet.setColumnWidth(17, 100); 
              sheet.setColumnWidth(18, 26);
              sheet.setColumnWidth(19, 20);
              sheet.setColumnWidth(20, 105);
              sheet.setColumnWidth(21, 15);
           //setup toast to notify the task completed
          ss.toast("Column Widths Resized");
        }//end function

我肯定有一种更优雅的方法可以做到这一点,但我想我会与其他正在寻找获取和设置列宽的方法的人分享。

相关问题