如何解决形状大小不等于表格单元格大小,并且使文本适合形状 示例修改:
试图插入一个等于表格单元格大小的形状。
我使用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列的表,显然它将只有一个单元格。 选择表,然后通过从“测试方式”菜单中单击“创建形状”来运行脚本。
解决方法
根据您的其他信息,我可以确认您的情况。当我看到它时,我注意到表有一个单元格,并且表大小是默认大小。在这种情况下,表格使用单元格的默认行高。单元格的高度由输入的文本自动设置。这样,行高仅为一行,即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
时,将获得相同的高度。但这是没有根据的。请注意这一点。
-
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。