셀 내부에 텍스트가있을 때 테이블 셀의 정확한 높이를 얻는 방법
History : - 도형 크기가 표 셀 크기와 같지 않고 도형 내부에 텍스트를 맞 춥니 다.
솔루션은 완벽하게 작동했지만, 우리가 같이 나는 "함께했던 모든 텍스트의 텍스트 높이를 변경 할 때 내가 몇 가지 문제를 발견 텍스트 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
이 수정은 어떻습니까?
수정 지점 :
- 내가 선택하면
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 Slides를 사용하면 다음과 같이됩니다.
노트 :
- 샘플에 대한 간단한 샘플 스크립트입니다. 따라서 다른 샘플을 사용하는 경우 스크립트를 수정해야 할 수 있습니다. 조심하세요.
- 이 경우 샘플에서 각 단락의 글꼴 크기가 같다고 가정합니다. 조심하세요.