Cara mendapatkan ketinggian sel Tabel yang benar saat teks di dalam sel

Aug 17 2020

Sejarah: - Ukuran bentuk tidak sama dengan ukuran sel tabel dan pas dengan teks di dalam bentuk

Solusi bekerja dengan sempurna, tetapi saya menemukan beberapa masalah ketika kami akan mengubah tinggi teks dari teks apa pun. Seperti yang saya lakukan dengan " Teks 1 ", saya mengubah tinggi " Teks 1 ", maka hasil tinggi baris akan menjadi 0,0

Batasan Skrip Google Apps: Kami tidak bisa mendapatkan tinggi sel, tidak bisa mendapatkan bantalan sel.

Setelah beberapa penelitian mencoba mengekstrak paragraf sel sebagai teks.

Skrip yang diperbarui dengan modifikasi saya dan 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);

Skrip lengkap di sini https://pastebin.com/keXKHbhC

Ini Tabel saya di GSlide - https://docs.google.com/presentation/d/10nupvk-2BZDSV6-gPn_n2LkrUtkCxot7qr_jcZGBHqw/edit#slide=id.p

Masalahnya masih sama dengan tinggi bentuk yang sama dengan sel tabel, Lihat gambar

Jawaban

1 Tanaike Aug 17 2020 at 23:57

Bagaimana dengan modifikasi ini?

Poin modifikasi:

  • Ketika saya memeriksa getSpaceAbove()dan getSpaceBelow(), tampaknya itu 0.
  • Saya pikir itu getLineSpacing()mungkin digunakan.
  • Dan, saya memperhatikan satu hal penting lagi. Misalnya bila terdapat 3 paragraf, sepertinya harus menggunakan spasi dari 4 paragraf.

Saat poin ini direfleksikan ke naskah Anda https://pastebin.com/keXKHbhC, menjadi sebagai berikut.

Skrip yang dimodifikasi:

Dari:

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)

});

Untuk:

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

Dan juga, harap modifikasi sebagai berikut.

Dari:

insertedShape.getText()
            .getParagraphStyle()
            .setLineSpacing(cellParagraph.getLineSpacing()/100)
            .setSpaceAbove(cellParagraph.getSpaceAbove())
            .setSpaceBelow(cellParagraph.getSpaceBelow())
            .setSpacingMode(cellParagraph.getSpacingMode())
            .setParagraphAlignment(cellParagraph.getParagraphAlignment())

Untuk:

insertedShape.getText()
            .getParagraphStyle()
            .setParagraphAlignment(cellParagraph.getParagraphAlignment())

Hasil:

Ketika sampel Google Slides Anda digunakan dengan skrip yang dimodifikasi di atas, itu menjadi sebagai berikut.

catatan:

  • Ini adalah contoh skrip sederhana untuk sampel Anda. Jadi saat Anda menggunakan contoh lain, skrip mungkin perlu dimodifikasi. Harap berhati-hati ini.
  • Dalam kasus ini, dari sampel Anda, diasumsikan bahwa setiap paragraf memiliki ukuran font yang sama. Harap berhati-hati ini.