如何将列从最小宽度调整为自动调整大小
How to resize columns from minimum width to auto resize
我有一个包含多个 sheet 的点差sheet。第一个 sheet 有 X 个使用过的列,其余 sheet 个有 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
}
}
我考虑过使用范围以某种方式获取列宽,然后在列宽太小的情况下进行更改,但我缺乏远见,无法确切地了解如何做到这一点。
我也在寻找这个问题的答案,下面的脚本是我目前正在使用的。
首先,我创建了一个虚拟 sheet,其中有一个 header 行,与我 运行 的报告完全相同,并将列设置为我在每个报告中想要的宽度。然后 运行 以下内容获取每列的宽度与其索引配对并将值推送到数组,并将它们也设置在 header 上方的行中。
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
其中 returns 以下以及在我的 header 的每一列的第一个单元格中设置值。 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, []])
因为此报告不会改变列宽,所以我只是在函数调用中使用每一对来在数据解析为 sheet.
后立即重置列
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
我很肯定有一种更优雅的方法可以做到这一点,但我想我会与其他正在寻找获取和设置列宽方法的人分享。
我有一个包含多个 sheet 的点差sheet。第一个 sheet 有 X 个使用过的列,其余 sheet 个有 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
}
}
我考虑过使用范围以某种方式获取列宽,然后在列宽太小的情况下进行更改,但我缺乏远见,无法确切地了解如何做到这一点。
我也在寻找这个问题的答案,下面的脚本是我目前正在使用的。 首先,我创建了一个虚拟 sheet,其中有一个 header 行,与我 运行 的报告完全相同,并将列设置为我在每个报告中想要的宽度。然后 运行 以下内容获取每列的宽度与其索引配对并将值推送到数组,并将它们也设置在 header 上方的行中。
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
其中 returns 以下以及在我的 header 的每一列的第一个单元格中设置值。 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, []])
因为此报告不会改变列宽,所以我只是在函数调用中使用每一对来在数据解析为 sheet.
后立即重置列 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
我很肯定有一种更优雅的方法可以做到这一点,但我想我会与其他正在寻找获取和设置列宽方法的人分享。