Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google apps script 谷歌表单舍弃文本以适应脚本_Google Apps Script_Google Sheets_Google Sheets Macros - Fatal编程技术网

Google apps script 谷歌表单舍弃文本以适应脚本

Google apps script 谷歌表单舍弃文本以适应脚本,google-apps-script,google-sheets,google-sheets-macros,Google Apps Script,Google Sheets,Google Sheets Macros,我正试图让文本自动调整大小,以适应谷歌表单的单元格。我将手机的宽度设置为特定的大小,还有电子邮件和工作头衔之类的东西,这些东西可能会很长 我知道Google Sheets本机不支持收缩文本以适应为什么!!!!!!与Excel类似,但我是否可以运行一个脚本来实现同样的目标?问题和解决方法: 不幸的是,在当前阶段,没有自动调整字体大小以适应电子表格服务中的单元格宽度的方法。因此,在这种情况下,需要考虑解决方法。但不能直接使用以像素为单位计算文本长度的方向。因为作为一个测试用例,当我比较从字体大小计算

我正试图让文本自动调整大小,以适应谷歌表单的单元格。我将手机的宽度设置为特定的大小,还有电子邮件和工作头衔之类的东西,这些东西可能会很长

我知道Google Sheets本机不支持收缩文本以适应为什么!!!!!!与Excel类似,但我是否可以运行一个脚本来实现同样的目标?

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

检索单元格宽度。 使用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是正确的

注: 在本例中,setFontSizesize的字体大小为整数。这样,文本长度可能不完全相同,因为字体大小必须是整数类型。所以请小心这个。 参考资料: 问题和解决方法: 不幸的是,在当前阶段,没有自动调整字体大小以适应电子表格服务中的单元格宽度的方法。因此,在这种情况下,需要考虑解决方法。但不能直接使用以像素为单位计算文本长度的方向。因为作为一个测试用例,当我比较从字体大小计算的文本长度像素和单元格宽度像素时,它们是不同的。因此,在这个回答中,我想提出一个使用其他方向的解决方法。此解决方案的基本流程如下所示

检索单元格宽度。 使用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是正确的

注: 在本例中,setFontSizesize的字体大小为整数。这样,文本长度可能不完全相同,因为字体大小必须是整数类型。所以请小心这个。 参考资料:
这很好,但我如何做到这一点而不改变行高或使任何文本变大?@Adam Ogden感谢您的回答。我不得不为我糟糕的英语水平道歉。在这种情况下,请以const-toLarge=false;的形式运行脚本@亚当·奥格登:我的回答告诉你结果了吗?你能告诉我这件事吗?这对我的学习也很有用。如果这样做有效,其他与你有相同问题的人也可以将你的问题作为可以解决的问题。如果你对我的回答还有疑问,我道歉。那时候,我可以问一下你目前的情况吗?我想学习解决您的问题。我不知道如何在电子表格中运行脚本。有用:快速使用此代码:工具->脚本编辑器->将上面的内容粘贴到code.gs中
. 将脚本工作表底部的常量更改为工作表,将targetRange更改为单元格,然后运行。谷歌将警告你,他们尚未验证该项目。这个脚本不考虑单元格高度,只考虑宽度。这会让ToLarge在你身上失败。我建议您将字体设置为有效的最大单元格高度,然后在不增大字体的情况下运行。这很好,但如何在不改变行高或使任何文本变大的情况下执行此操作?@Adam Ogden感谢您的回复。我不得不为我糟糕的英语水平道歉。在这种情况下,请以const-toLarge=false;的形式运行脚本@亚当·奥格登:我的回答告诉你结果了吗?你能告诉我这件事吗?这对我的学习也很有用。如果这样做有效,其他与你有相同问题的人也可以将你的问题作为可以解决的问题。如果你对我的回答还有疑问,我道歉。那时候,我可以问一下你目前的情况吗?我想学习解决您的问题。我不知道如何在电子表格中运行脚本。有用:快速使用此代码:工具->脚本编辑器->将上面的内容粘贴到code.gs中。将脚本工作表底部的常量更改为工作表,将targetRange更改为单元格,然后运行。谷歌将警告你,他们尚未验证该项目。这个脚本不考虑单元格高度,只考虑宽度。这会让ToLarge在你身上失败。我建议将字体设置为最大有效单元格高度,然后在不增大字体的情况下运行。