O tamanho da forma não é igual ao tamanho da célula da tabela e cabe o texto dentro da forma
Tentando inserir uma forma igual ao tamanho da célula da tabela.
Eu criei a forma usando InsertShape()
e copiei a altura da linha (possivelmente a altura da célula) e a largura da coluna (possivelmente a largura da célula) para a forma.
Problema:
- o tamanho da forma não é igual ao tamanho da célula em altura e largura.
- O texto dentro da forma está ficando fora de forma, o texto da forma deve ser ajustado automaticamente, enquanto o texto da célula se ajusta dentro da célula.
Não sei dizer como .getRow().getMinimumHeight()
funciona.
Comprimento do texto não fixo. Pode ser como um longo parágrafo.
Limitação do Script do Google Apps:
Célula da tabela - o Google Apps Script não consegue obter a largura e a altura de cada célula
Script do 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);
Aqui você pode ver a demonstração https://docs.google.com/presentation/d/10nupvk-2BZDSV6-gPn_n2LkrUtkCxot7qr_jcZGBHqw/edit?usp=sharing
Script completo: https://pastebin.com/CrV3qHwG
Replicate Issue Paste acima mencionadohttps://pastebin.com/CrV3qHwGscript no Google Script Editor, adicione uma tabela com 1 linha e 1 coluna, obviamente será apenas uma célula. Selecione a tabela e execute o script clicando em "Criar forma" no menu "Testar".
A imagem mostra o problema e o resultado esperado em visualização rápida
Respostas
Com suas informações adicionais, pude confirmar sua situação. Quando eu vi, pude perceber que a tabela tem uma célula e o tamanho da tabela é o tamanho padrão. Nesse caso, a tabela usa a altura de linha padrão da célula. E a altura da célula é definida automaticamente pelos textos inseridos. Com isso, a altura da linha é apenas uma linha, que é a altura de 381000 EMU (30 pixels). Sobre essa situação, confirmei que os mesmos resultados foram obtidos no serviço do Slides e na API do Slides. Portanto, parece que esta é a especificação atual.
Quando você deseja recuperar a altura real, no estágio atual, acho que é necessário definir a altura manualmente ou script e recuperar a altura. Por isso, a tabela é a altura real da linha.
Ou, embora não seja totalmente igual à altura da linha da tabela padrão incluindo os textos, acho que a altura da linha também pode ser calculada usando as quebras de linha e o tamanho da fonte. Nesta resposta, apresento o script de exemplo para isso, modificando seu script.
Modificação da amostra:
Para dar a altura, como uma modificação de amostra, gostaria de propor o seguinte script. Quando seu script é modificado, ele se torna o seguinte.
De:var rowHeight = pageElements[0].asTable().getRow(0).getMinimumHeight();
Para:
var t = pageElements[0].asTable().getRow(0).getCell(0).getText();
var rowHeight = (t.asString().split("\n").length - 1) * (t.getTextStyle().getFontSize() / 72 * 96);
- Nesta modificação, a altura da linha é calculada usando as quebras de linha e o tamanho da fonte.
t.asString().split("\n").length - 1
é o número de quebras de linha.t.getTextStyle().getFontSize() / 72 * 96
é o valor do pixel do tamanho da fonte. Parece que no Google Slides, 96 DPI é usado.- Mas, infelizmente, no estágio atual, o resultado não é completamente o mesmo com a altura da linha da tabela padrão.
- Nesse caso, quando
rowHeight
é multiplicado por1.08
, obtém-se a mesma altura. Mas esse fator é infundado. Por favor, tome cuidado com isso.