尝试插入与表格单元格大小相同的形状。
我使用 InsertShape()
创建了形状,并将行高(可能是单元格的高度)、列宽(可能是单元格的宽度)复制到形状中。
问题:
- 形状的大小不等于单元格的高度和宽度。
- 形状内的文本形状不正确,形状的文本应自动适合,而单元格的文本适合单元格内。
我无法说出 .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 中显示问题和预期结果
最佳答案
根据您的补充信息,我可以确认您的情况。当我看到它时,我注意到表格有一个单元格,并且表格大小是默认大小。在这种情况下,表格使用单元格的默认行高。单元格的高度由输入的文本自动设置。这样,行高仅为一行,即 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/