Как получить правильную высоту ячейки таблицы, когда текст внутри ячейки
История: - Размер фигуры не равен размеру ячейки таблицы и помещается под текст внутри фигуры
Решение работало отлично, но я обнаружил некоторые проблемы, когда мы изменили высоту текста любого текста. Как я сделал с « Текст 1 », я изменил высоту « Текст 1 », тогда результат высоты строки будет 0,0

Ограничение скрипта Google Apps: мы не можем получить высоту ячейки, не можем получить заполнение ячейки.
После некоторых исследований попытался извлечь абзац из ячейки как текст.
Обновленный скрипт с модификацией my и 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 - https://docs.google.com/presentation/d/10nupvk-2BZDSV6-gPn_n2LkrUtkCxot7qr_jcZGBHqw/edit#slide=id.p
По-прежнему проблема такая же, когда высота формы равна ячейке таблицы, см. Изображение

Ответы
Как насчет этой модификации?
Пункты модификации:
- Когда я проверил
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 используется с измененным выше скриптом, он выглядит следующим образом.

Заметка:
- Это простой пример сценария для вашего образца. Поэтому, когда вы используете другой образец, сценарий может потребоваться изменить. Пожалуйста, будьте осторожны.
- В этом случае из вашего образца предполагается, что каждый абзац имеет одинаковый размер шрифта. Пожалуйста, будьте осторожны.