单元格内的文本时如何获得 Table 单元格的正确高度
How to get the correct height of Table cell when text inside the cell
历史: -
解决方案运行完美,但是当我们更改任何文本的文本高度时我发现了一些问题,就像我对“Text 1”所做的那样,我更改了“ Text 1", 那么行高的结果就是0.0
Google Apps 脚本的限制:
取不到cell的高度,取不到cell的padding。
经过一些研究尝试将单元格的段落提取为文本。
使用我的和 Tanaike 修改更新了脚本:
var rowHeight = 0.0;
var tableCell = pageElements[index].asTable().getCell(ir, ic);
//Get cell color
let cellFill = tableCell.getFill().getSolidFill();
var cellParaText = tableCell.getText().getParagraphs();
cellParaText.forEach(function(item, index) {
var t = cellParaText[index].getRange();
//I tried to applied Tanaike's solution here
rowHeight = rowHeight + ( t.asString().split("\n").length - 1 ) * ( t.getTextStyle().getFontSize() / 72 * 96 )
//rowHeight = rowHeight + cellParaText[index].getRange().getTextStyle().getFontSize();
rowHeight = rowHeight + cellParaText[index].getRange().getParagraphStyle().getSpaceAbove()
rowHeight = rowHeight + cellParaText[index].getRange().getParagraphStyle().getSpaceBelow()
rowHeight = rowHeight + (cellParaText[index].getRange().getParagraphStyle().getLineSpacing()/100)
});
//Get cell text, text color and text background color
let cellText = tableCell.getText().asString()
//insert the RECTANGLE shape
let insertedShape = selection.getCurrentPage()
.insertShape(SlidesApp.ShapeType.RECTANGLE, cellLeft+5, cellTop+5, columnWidth, rowHeight);
完整脚本在这里https://pastebin.com/keXKHbhC
这是我在 GSlide 中的 Table - https://docs.google.com/presentation/d/10nupvk-2BZDSV6-gPn_n2LkrUtkCxot7qr_jcZGBHqw/edit#slide=id.p
问题仍然与形状高度等于 table 单元格相同,请参见图片
这个修改怎么样?
修改点:
- 当我检查
getSpaceAbove()
和getSpaceBelow()
时,似乎那些是0
。
- 我认为
getLineSpacing()
可能会被使用。
- 而且,我注意到了更重要的一点。比如有3段的时候,好像要用4段的空格。
当这个点数反映到你的https://pastebin.com/keXKHbhC的脚本中,就变成了下面这样
修改后的脚本:
发件人:
cellParaText.forEach(function(item, index) {
var t = cellParaText[index].getRange();
//i tried to applied Tanike's solution here
rowHeight = rowHeight + ( t.asString().split("\n").length - 1 ) * ( t.getTextStyle().getFontSize() / 72 * 96 )
//rowHeight = rowHeight + cellParaText[index].getRange().getTextStyle().getFontSize();
rowHeight = rowHeight + cellParaText[index].getRange().getParagraphStyle().getSpaceAbove()
rowHeight = rowHeight + cellParaText[index].getRange().getParagraphStyle().getSpaceBelow()
rowHeight = rowHeight + (cellParaText[index].getRange().getParagraphStyle().getLineSpacing()/100)
});
收件人:
cellParaText.forEach(function(item, index, a) {
var t = cellParaText[index].getRange();
var lineSpace = cellParaText[index].getRange().getParagraphStyle().getLineSpacing() / 100;
var fontSize = t.getTextStyle().getFontSize() / 72 * 96;
rowHeight += fontSize * (a.length > 1 ? lineSpace : 1);
if (index == a.length - 1) rowHeight += fontSize;
});
另外,请修改如下。
发件人:
insertedShape.getText()
.getParagraphStyle()
.setLineSpacing(cellParagraph.getLineSpacing()/100)
.setSpaceAbove(cellParagraph.getSpaceAbove())
.setSpaceBelow(cellParagraph.getSpaceBelow())
.setSpacingMode(cellParagraph.getSpacingMode())
.setParagraphAlignment(cellParagraph.getParagraphAlignment())
收件人:
insertedShape.getText()
.getParagraphStyle()
.setParagraphAlignment(cellParagraph.getParagraphAlignment())
结果:
当你的示例 Google Slides 与上面修改后的脚本一起使用时,它变成如下。
注:
- 这是您的示例的简单示例脚本。因此,当您使用其他示例时,可能需要修改脚本。请注意这一点。
- 在这种情况下,根据您的示例,它假定每个段落的字体大小相同。请注意这一点。
历史: -
解决方案运行完美,但是当我们更改任何文本的文本高度时我发现了一些问题,就像我对“Text 1”所做的那样,我更改了“ Text 1", 那么行高的结果就是0.0
Google Apps 脚本的限制: 取不到cell的高度,取不到cell的padding。
经过一些研究尝试将单元格的段落提取为文本。
使用我的和 Tanaike 修改更新了脚本:
var rowHeight = 0.0;
var tableCell = pageElements[index].asTable().getCell(ir, ic);
//Get cell color
let cellFill = tableCell.getFill().getSolidFill();
var cellParaText = tableCell.getText().getParagraphs();
cellParaText.forEach(function(item, index) {
var t = cellParaText[index].getRange();
//I tried to applied Tanaike's solution here
rowHeight = rowHeight + ( t.asString().split("\n").length - 1 ) * ( t.getTextStyle().getFontSize() / 72 * 96 )
//rowHeight = rowHeight + cellParaText[index].getRange().getTextStyle().getFontSize();
rowHeight = rowHeight + cellParaText[index].getRange().getParagraphStyle().getSpaceAbove()
rowHeight = rowHeight + cellParaText[index].getRange().getParagraphStyle().getSpaceBelow()
rowHeight = rowHeight + (cellParaText[index].getRange().getParagraphStyle().getLineSpacing()/100)
});
//Get cell text, text color and text background color
let cellText = tableCell.getText().asString()
//insert the RECTANGLE shape
let insertedShape = selection.getCurrentPage()
.insertShape(SlidesApp.ShapeType.RECTANGLE, cellLeft+5, cellTop+5, columnWidth, rowHeight);
完整脚本在这里https://pastebin.com/keXKHbhC
这是我在 GSlide 中的 Table - https://docs.google.com/presentation/d/10nupvk-2BZDSV6-gPn_n2LkrUtkCxot7qr_jcZGBHqw/edit#slide=id.p
问题仍然与形状高度等于 table 单元格相同,请参见图片
这个修改怎么样?
修改点:
- 当我检查
getSpaceAbove()
和getSpaceBelow()
时,似乎那些是0
。 - 我认为
getLineSpacing()
可能会被使用。 - 而且,我注意到了更重要的一点。比如有3段的时候,好像要用4段的空格。
当这个点数反映到你的https://pastebin.com/keXKHbhC的脚本中,就变成了下面这样
修改后的脚本:
发件人:
cellParaText.forEach(function(item, index) {
var t = cellParaText[index].getRange();
//i tried to applied Tanike's solution here
rowHeight = rowHeight + ( t.asString().split("\n").length - 1 ) * ( t.getTextStyle().getFontSize() / 72 * 96 )
//rowHeight = rowHeight + cellParaText[index].getRange().getTextStyle().getFontSize();
rowHeight = rowHeight + cellParaText[index].getRange().getParagraphStyle().getSpaceAbove()
rowHeight = rowHeight + cellParaText[index].getRange().getParagraphStyle().getSpaceBelow()
rowHeight = rowHeight + (cellParaText[index].getRange().getParagraphStyle().getLineSpacing()/100)
});
收件人:
cellParaText.forEach(function(item, index, a) {
var t = cellParaText[index].getRange();
var lineSpace = cellParaText[index].getRange().getParagraphStyle().getLineSpacing() / 100;
var fontSize = t.getTextStyle().getFontSize() / 72 * 96;
rowHeight += fontSize * (a.length > 1 ? lineSpace : 1);
if (index == a.length - 1) rowHeight += fontSize;
});
另外,请修改如下。
发件人:
insertedShape.getText()
.getParagraphStyle()
.setLineSpacing(cellParagraph.getLineSpacing()/100)
.setSpaceAbove(cellParagraph.getSpaceAbove())
.setSpaceBelow(cellParagraph.getSpaceBelow())
.setSpacingMode(cellParagraph.getSpacingMode())
.setParagraphAlignment(cellParagraph.getParagraphAlignment())
收件人:
insertedShape.getText()
.getParagraphStyle()
.setParagraphAlignment(cellParagraph.getParagraphAlignment())
结果:
当你的示例 Google Slides 与上面修改后的脚本一起使用时,它变成如下。
注:
- 这是您的示例的简单示例脚本。因此,当您使用其他示例时,可能需要修改脚本。请注意这一点。
- 在这种情况下,根据您的示例,它假定每个段落的字体大小相同。请注意这一点。