Comment obtenir la hauteur correcte de la cellule du tableau lorsque le texte à l'intérieur de la cellule

Aug 17 2020

Historique: - La taille de la forme n'est pas égale à la taille de la cellule du tableau et ajuste le texte à l'intérieur de la forme

La solution fonctionnait parfaitement, mais j'ai trouvé des problèmes lorsque nous changions la hauteur du texte de n'importe quel texte Comme je l'ai fait avec " Texte 1 ", j'ai changé la hauteur de " Texte 1 ", le résultat de la hauteur de ligne sera de 0,0

Limitation du script Google Apps: nous ne pouvons pas obtenir la hauteur de la cellule, nous ne pouvons pas obtenir le remplissage de la cellule.

Après quelques recherches, j'ai essayé d'extraire le paragraphe de la cellule sous forme de texte.

Script mis à jour avec ma modification et 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);

Script complet ici https://pastebin.com/keXKHbhC

Voici ma table dans GSlide - https://docs.google.com/presentation/d/10nupvk-2BZDSV6-gPn_n2LkrUtkCxot7qr_jcZGBHqw/edit#slide=id.p

Le problème est toujours le même avec la hauteur de la forme égale à la cellule du tableau, voir l'image

Réponses

1 Tanaike Aug 17 2020 at 23:57

Et cette modification?

Points de modification:

  • Quand j'ai vérifié getSpaceAbove()et getSpaceBelow(), il semble que ce soit le cas 0.
  • Je pense que cela getLineSpacing()pourrait être utilisé.
  • Et j'ai remarqué un autre point important. Par exemple, lorsqu'il y a 3 paragraphes, il semble qu'il soit nécessaire d'utiliser les espaces de 4 paragraphes.

Lorsque ces points sont reflétés dans votre script de https://pastebin.com/keXKHbhC, cela devient comme suit.

Script modifié:

De:

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;
});

Et aussi, veuillez modifier comme suit.

De:

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())

Résultat:

Lorsque votre exemple de diapositives Google est utilisé avec le script modifié ci-dessus, il se présente comme suit.

Remarque:

  • Ceci est un simple exemple de script pour votre exemple. Ainsi, lorsque vous utilisez un autre exemple, le script peut devoir être modifié. Veuillez faire attention à cela.
  • Dans ce cas, à partir de votre exemple, il suppose que chaque paragraphe a la même taille de police. Veuillez faire attention à cela.