วิธีรับความสูงที่ถูกต้องของเซลล์ตารางเมื่อข้อความภายในเซลล์

Aug 17 2020

ประวัติ: - ขนาดรูปร่างไม่เท่ากับขนาดเซลล์ตารางและพอดีกับข้อความภายในรูปร่าง

วิธีแก้ปัญหาทำงานได้อย่างสมบูรณ์ แต่ฉันพบปัญหาเมื่อเราจะเปลี่ยนความสูงของข้อความเช่นเดียวกับที่ฉันทำกับ " ข้อความ 1 " ฉันเปลี่ยนความสูงของ " ข้อความ 1 " จากนั้นผลลัพธ์ของความสูงของแถวจะเป็น 0.0

ข้อ จำกัด ของ Google Apps Script:เราไม่สามารถรับความสูงของเซลล์ไม่สามารถรับช่องว่างภายในเซลล์ได้

หลังจากงานวิจัยบางชิ้นพยายามแยกย่อหน้าของเซลล์เป็นข้อความ

อัปเดตสคริปต์ด้วยการปรับเปลี่ยนของฉันและ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);

สคริปต์ฉบับเต็มที่นี่ https://pastebin.com/keXKHbhC

นี่คือตารางของฉันใน GSlide - https://docs.google.com/presentation/d/10nupvk-2BZDSV6-gPn_n2LkrUtkCxot7qr_jcZGBHqw/edit#slide=id.p

ปัญหายังคงเหมือนเดิมโดยมีความสูงของรูปร่างเท่ากับเซลล์ตารางดูภาพ

คำตอบ

1 Tanaike Aug 17 2020 at 23:57

การปรับเปลี่ยนนี้เป็นอย่างไร?

จุดแก้ไข:

  • เมื่อผมตรวจสอบgetSpaceAbove()และมันก็ดูเหมือนว่าผู้ที่มีgetSpaceBelow()0
  • ผมคิดว่าgetLineSpacing()อาจจะใช้
  • และฉันสังเกตเห็นจุดสำคัญอีกประการหนึ่ง ตัวอย่างเช่นเมื่อมี 3 ย่อหน้าดูเหมือนว่าจำเป็นต้องใช้ช่องว่างของ 4 ย่อหน้า

เมื่อจุดนี้สะท้อนไปยังสคริปต์ของคุณ https://pastebin.com/keXKHbhCจะกลายเป็นดังนี้

สคริปต์ที่แก้ไข:

จาก:

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

และโปรดแก้ไขดังนี้

จาก:

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

ผลลัพธ์:

เมื่อตัวอย่าง Google สไลด์ของคุณถูกใช้กับสคริปต์ที่แก้ไขด้านบนจะเป็นดังนี้

บันทึก:

  • นี่คือสคริปต์ตัวอย่างง่ายๆสำหรับตัวอย่างของคุณ ดังนั้นเมื่อคุณใช้ตัวอย่างอื่นอาจต้องแก้ไขสคริปต์ โปรดระวังสิ่งนี้
  • ในกรณีนี้จากตัวอย่างของคุณสมมติว่าแต่ละย่อหน้ามีขนาดตัวอักษรเท่ากัน โปรดระวังสิ่งนี้