javascript - 形状大小不等于表格单元格大小并适合形状内的文本

标签 javascript google-apps-script shapes google-slides

尝试插入与表格单元格大小相同的形状。

我使用 InsertShape() 创建了形状,并将行高(可能是单元格的高度)、列宽(可能是单元格的宽度)复制到形状中。

问题:

  1. 形状的大小不等于单元格的高度和宽度。
  2. 形状内的文本形状不正确,形状的文本应自动适合,而单元格的文本适合单元格内。

我无法说出 .getRow().getMinimumHeight() 的工作原理。

文本长度不固定。它可能像一个很长的段落。

Google Apps 脚本的限制:

表格单元格 - Google Apps 脚本无法获取每个单元格的宽度和高度

Google Apps 脚本:

let activePresentation = SlidesApp.getActivePresentation()
let selection = activePresentation.getSelection()
let pageElements = selection.getPageElementRange().getPageElements()

//get table Left, table Top of each table under the pageElement object
var tableLeft = pageElements[0].asTable().getLeft(),
    tableTop = pageElements[0].asTable().getTop();

var cellTop = tableTop;       //cell top possible equal to table top   
var cellLeft = tableLeft;    //cell top possible equal to table Left 

//get the row height and column width
var rowHeight = pageElements[0].asTable().getRow(0).getMinimumHeight();
var columnWidth = pageElements[0].asTable().getColumn(0).getWidth();

//get the internal text of cell
var cellText = pageElements[0].asTable().getCell(0, 0).getText().asString()

//insert shape equal to the table cell size
var shape_t = selection.getCurrentPage()
                   .insertShape(SlidesApp.ShapeType.RECTANGLE, 
                                         cellLeft+200, 
                                         cellTop, 
                                         columnWidth, 
                                         rowHeight);

//set the cell text insde the Shape 
shape_t.getText().setText(cellText);

在这里您可以看到演示https://docs.google.com/presentation/d/10nupvk-2BZDSV6-gPn_n2LkrUtkCxot7qr_jcZGBHqw/edit?usp=sharing

完整脚本: https://pastebin.com/CrV3qHwG

复制问题 粘贴上面提到的https://pastebin.com/CrV3qHwG Google 脚本编辑器中的脚本, 添加一个 1 行 1 列的表格,显然它只有一个单元格。 选择表,然后通过单击“Test So”菜单中的“Create Shape”来运行脚本。

图像在快速 View 中显示问题和预期结果

Image shows problem and expected result in quick view

最佳答案

根据您的补充信息,我可以确认您的情况。当我看到它时,我注意到表格有一个单元格,并且表格大小是默认大小。在这种情况下,表格使用单元格的默认行高。单元格的高度由输入的文本自动设置。这样,行高仅为一行,即 381000 EMU(30 个像素)的高度。对于这种情况,我确认从 Slides 服务和 Slides API 都获得了相同的结果。所以看来这就是当前的规范。

当你想要检索实际高度时,在现阶段,我认为需要通过手动或脚本设置高度并检索高度。这样,表格就是实际的行高。

或者,虽然这与包括文本在内的默认表格的行高不完全相同,但我认为也可以使用换行符和字体大小来计算行高。在此答案中,我通过修改您的脚本来介绍示例脚本。

示例修改:

为了给出高度,作为示例修改,我想提出以下脚本。当你的脚本修改后,就会变成如下所示。

从:
var rowHeight = pageElements[0].asTable().getRow(0).getMinimumHeight();
到:
var t = pageElements[0].asTable().getRow(0).getCell(0).getText();
var rowHeight = (t.asString().split("\n").length - 1) * (t.getTextStyle().getFontSize() / 72 * 96);
  • 在此修改中,行高是使用换行符和字体大小计算的。
    • t.asString().split("\n").length - 1 是换行符的数量。
    • t.getTextStyle().getFontSize()/72 * 96 是字体大小的像素值。 Google 幻灯片中似乎使用了 96 DPI。
    • 但不幸的是,在现阶段,结果与默认的表格行高并不完全相同。
    • 在本例中,当 rowHeight 乘以 1.08 时,会获得相同的高度。但这个因素是没有根据的。请小心这一点。

关于javascript - 形状大小不等于表格单元格大小并适合形状内的文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63428548/

相关文章:

javascript - 执行元素属性中定义的回调

python - 删除数组的维度?

java - 使用 relocate 在 javafx 中移动形状后获取元素坐标

javascript - 使用 jQuery 选择仅在鼠标悬停时存在的 DIV

javascript - 我的随机报价生成器按钮不显示报价。 (不适用于 CodePen 或 Sublime,仅适用于 Stack Overflow)

Javascript:setTimeout 中没有发生 DOM 事件

google-apps-script - 处理 UrlFetchApp.fetch() 中的 404 错误

javascript - 我试图在大范围的特定单元格中挑选出所有带有 '1' 的行,是否有更有效的方法来做到这一点?

node.js - 如何等待谷歌电子表格调用并将其设置在 for 循环内

java - 从起点和终点延长线