วิธีรับความสูงที่ถูกต้องของเซลล์ตารางเมื่อข้อความภายในเซลล์
ประวัติ: - ขนาดรูปร่างไม่เท่ากับขนาดเซลล์ตารางและพอดีกับข้อความภายในรูปร่าง
วิธีแก้ปัญหาทำงานได้อย่างสมบูรณ์ แต่ฉันพบปัญหาเมื่อเราจะเปลี่ยนความสูงของข้อความเช่นเดียวกับที่ฉันทำกับ " ข้อความ 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
ปัญหายังคงเหมือนเดิมโดยมีความสูงของรูปร่างเท่ากับเซลล์ตารางดูภาพ

คำตอบ
การปรับเปลี่ยนนี้เป็นอย่างไร?
จุดแก้ไข:
- เมื่อผมตรวจสอบ
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 สไลด์ของคุณถูกใช้กับสคริปต์ที่แก้ไขด้านบนจะเป็นดังนี้

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