O tamanho da forma não é igual ao tamanho da célula da tabela e cabe o texto dentro da forma

Aug 15 2020

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:

  1. o tamanho da forma não é igual ao tamanho da célula em altura e largura.
  2. 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

3 Tanaike Aug 16 2020 at 06:32

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 por 1.08, obtém-se a mesma altura. Mas esse fator é infundado. Por favor, tome cuidado com isso.