셀 내부에 텍스트가있을 때 테이블 셀의 정확한 높이를 얻는 방법

Aug 17 2020

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 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 Slides를 사용하면 다음과 같이됩니다.

노트 :

  • 샘플에 대한 간단한 샘플 스크립트입니다. 따라서 다른 샘플을 사용하는 경우 스크립트를 수정해야 할 수 있습니다. 조심하세요.
  • 이 경우 샘플에서 각 단락의 글꼴 크기가 같다고 가정합니다. 조심하세요.