La dimensione della forma non è uguale alla dimensione della cella della tabella e adatta il testo all'interno della forma

Aug 15 2020

Cercando di inserire una forma uguale alla dimensione della cella della tabella.

Ho creato la forma usando InsertShape()e copiato l'altezza della riga (possibilmente l'altezza della cella), la larghezza della colonna (possibilmente la larghezza della cella) nella forma.

Problema:

  1. la dimensione della forma non è uguale alla dimensione della cella in altezza e larghezza.
  2. Il testo all'interno della forma sta andando fuori forma, il testo della forma dovrebbe essere adattato automaticamente, mentre il testo della cella si adatta alla cella.

Non posso dire come .getRow().getMinimumHeight()funziona.

Lunghezza del testo non fissa. Potrebbe essere come un lungo paragrafo.

Limitazione di Google Apps Script:

Cella della tabella: Google Apps Script non è in grado di ottenere la larghezza e l'altezza di ogni cella

Script di 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);

Qui puoi vedere la demo https://docs.google.com/presentation/d/10nupvk-2BZDSV6-gPn_n2LkrUtkCxot7qr_jcZGBHqw/edit?usp=sharing

Script completo: https://pastebin.com/CrV3qHwG

Replica problema Incolla sopra menzionatohttps://pastebin.com/CrV3qHwGscript in Google Script Editor, aggiungi una tabella con 1 riga e 1 colonna, ovviamente sarà solo una cella. Selezionare la tabella e quindi eseguire lo script facendo clic su "Crea forma" dal menu "Prova così".

L'immagine mostra il problema e il risultato previsto in una visualizzazione rapida

Risposte

3 Tanaike Aug 16 2020 at 06:32

Dalle tue informazioni aggiuntive, potrei confermare la tua situazione. Quando l'ho visto, ho notato che la tabella ha una cella e la dimensione della tabella è la dimensione predefinita. In questo caso, la tabella utilizza l'altezza di riga predefinita della cella. E l'altezza della cella viene impostata automaticamente dai testi immessi. Con ciò, l'altezza della riga è solo una riga che è l'altezza di 381000 EMU (30 pixel). A proposito di questa situazione, ho confermato che gli stessi risultati sono stati ottenuti sia dal servizio Slides che dall'API di Slides. Quindi sembra che questa sia la specifica corrente.

Quando si desidera recuperare l'altezza effettiva, nella fase corrente, penso che sia necessario impostare l'altezza tramite manuale o script e recuperare l'altezza. In questo modo, la tabella è l'altezza della riga effettiva.

Oppure, sebbene questo non sia completamente lo stesso con l'altezza della riga della tabella predefinita inclusi i testi, penso che l'altezza della riga possa essere calcolata anche utilizzando le interruzioni di riga e la dimensione del carattere. In questa risposta, presento lo script di esempio per questo modificando il tuo script.

Modifica del campione:

Per dare l'altezza, come modifica di esempio, vorrei proporre il seguente script. Quando lo script viene modificato, diventa il seguente.

A partire dal:
var rowHeight = pageElements[0].asTable().getRow(0).getMinimumHeight();
Per:
var t = pageElements[0].asTable().getRow(0).getCell(0).getText();
var rowHeight = (t.asString().split("\n").length - 1) * (t.getTextStyle().getFontSize() / 72 * 96);
  • In questa modifica, l'altezza della riga viene calcolata utilizzando le interruzioni di riga e la dimensione del carattere.
    • t.asString().split("\n").length - 1 è il numero di interruzioni di riga.
    • t.getTextStyle().getFontSize() / 72 * 96è il valore in pixel della dimensione del carattere. Sembra che in Presentazioni Google venga utilizzato 96 DPI.
    • Ma, sfortunatamente, nella fase corrente, il risultato non è completamente lo stesso con l'altezza della riga della tabella predefinita.
    • In questo caso, rowHeightmoltiplicato per 1.08, si ottiene la stessa altezza. Ma questo fattore è infondato. Per favore, stai attento.