【发布时间】:2020-07-02 22:14:44
【问题描述】:
我正在尝试使用 Google 表格让文本自动调整大小以适合其单元格。我将单元格宽度设置为特定大小,并且电子邮件和职位等内容可能会变得很长。
我知道 Google 表格本身并不支持像 Excel 那样缩小文本以适应(为什么!!!!!!),但是有没有我可以运行的脚本来实现相同的目标?
【问题讨论】:
标签: google-apps-script google-sheets google-sheets-macros
我正在尝试使用 Google 表格让文本自动调整大小以适合其单元格。我将单元格宽度设置为特定大小,并且电子邮件和职位等内容可能会变得很长。
我知道 Google 表格本身并不支持像 Excel 那样缩小文本以适应(为什么!!!!!!),但是有没有我可以运行的脚本来实现相同的目标?
【问题讨论】:
标签: google-apps-script google-sheets google-sheets-macros
不幸的是,在当前阶段,电子表格服务中没有自动调整字体大小以适应单元格宽度的方法。因此,在这种情况下,需要考虑解决方法。但是不能直接使用以像素为单位计算文本长度的方向。因为作为一个测试用例,当我比较从字体大小和单元格宽度(像素)计算的文本长度(像素)时,它们是不同的。通过这个,在这个答案中,我想提出一个使用其他方向的解决方法。此解决方法的基本流程如下。
autoResizeColumn自动调整单元格宽度。通过这种流程,可以自动调整适合单元格宽度的文本长度。使用此流程时,示例脚本如下。
请复制并粘贴以下脚本并设置targetRange。并运行脚本。
function myFunction() {
const autoResizeFont = (range, toLarge) => {
const sheet = range.getSheet();
const ss = sheet.getParent();
const startColumn = range.getColumn();
const endColumn = range.getColumn() + range.getNumColumns();
const startRow = range.getRow();
const endRow = range.getRow() + range.getNumRows();
const columnObj = [];
for (let c = startColumn; c < endColumn; c++) {
columnObj.push({
column: c,
width: sheet.getColumnWidth(c)
});
}
const tempSheet = ss.insertSheet("tempForAutoresizeFont");
sheet.activate();
const tempRange = tempSheet.getRange("A1");
for (let r = startRow; r < endRow; r++) {
for (let c = 0; c < columnObj.length; c++) {
const srcRange = sheet.getRange(r, columnObj[c].column);
tempSheet.setColumnWidth(1, columnObj[c].width);
srcRange.copyTo(tempRange);
tempSheet.autoResizeColumn(1);
const resizedWidth = tempSheet.getColumnWidth(1);
tempSheet.setColumnWidth(1, columnObj[c].width);
const ratio = columnObj[c].width / resizedWidth;
if (ratio > 1 && !toLarge) continue;
const fontSize = srcRange.getFontSize();
srcRange.setFontSize(Math.ceil(fontSize * ratio));
}
}
ss.deleteSheet(tempSheet);
}
const ss = SpreadsheetApp.getActiveSpreadsheet();
const sheet = ss.getSheetByName("Sheet1");
const targetRange = "A1:A6";
const toLarge = true;
autoResizeFont(sheet.getRange(targetRange), toLarge);
}
toLarge为true时,当文本长度小于单元格宽度时,文本的字体变大。这样,文本长度与单元格宽度匹配。当toLarge为false时,当文本长度小于单元格宽度时,文本字体大小不变。在此演示中,单元格“A1:A6”中的文本长度通过更改字体大小与单元格宽度匹配。在这种情况下,toLarge 是 true。
setFontSize(size) 的字体大小为“整数”。这样,文本长度可能不完全相同,因为字体大小需要是整数类型。所以请注意这一点。【讨论】:
const toLarge = false; 运行脚本。