形状大小不等于表格单元格大小,并且使文本适合形状 示例修改:

问题描述

试图插入一个等于表格单元格大小的形状。

我使用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列的表,显然它将只有一个单元格。 选择表,然后通过从“测试方式”菜单中单击“创建形状”来运行脚本。

图像以快速查看方式显示问题和预期结果

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时,将获得相同的高度。但这是没有根据的。请注意这一点。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...