谷歌表格推卸文本以适应脚本

Ada*_*den 1 google-sheets google-apps-script google-sheets-macros

我正在尝试使用 Google 表格让文本自动调整大小以适应其单元格。我将单元格宽度设置为特定大小,并且电子邮件和职位等内容可能会变得很长。

我知道 Google 表格本身并不像 Excel 那样支持缩小文本以适应(为什么!!!!!!),但是有没有我可以运行的脚本可以实现同样的目的?

Tan*_*ike 5

问题和解决方法:

不幸的是,在当前阶段,没有方法可以自动调整字体大小以适应电子表格服务中的单元格宽度。所以在这种情况下,需要考虑解决方法。但是不能直接使用以像素为单位计算文本长度的方向。因为作为一个测试用例,当我比较根据字体大小和单元格宽度(像素)计算的文本长度(像素)时,它们是不同的。通过这个,在这个答案中,我想提出一个使用其他方向的解决方法。此变通方法的基本流程如下。

  1. 检索单元格宽度。
  2. 使用 自动调整单元格宽度autoResizeColumn
  3. 计算单元格的原始宽度和调整后的宽度的比率。
  4. 使用比例更改字体大小。

通过此流程,可以自动调整适合单元格宽度的文本长度。使用此流程时,示例脚本如下。

示例脚本:

请复制并粘贴以下脚本并设置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);
}
Run Code Online (Sandbox Code Playgroud)
  • 在此示例脚本中,创建了一个临时表,并使用临时表计算单元格的原始宽度和调整后宽度的比率。
  • toLarge是 时true,当文本长度小于单元格宽度时,文本的字体变大。通过这种方式,文本长度与单元格宽度相匹配。当toLarge为 时false,当文本长度小于单元格宽度时,文本字体大小不变。

结果:

在本演示中,单元格“A1:A6”中的文本长度通过更改字体大小与单元格宽度匹配。在这种情况下,toLargetrue

在此处输入图片说明

笔记:

  • 在这种情况下,字体大小为setFontSize(size)“整数”。这样,文本长度可能不完全相同,因为字体大小需要为整数类型。所以请注意这一点。

参考: