테이블을 사용한 작업

Google Docs API를 사용하면 표 콘텐츠를 수정할 수 있습니다. 수행할 수 있는 작업은 다음과 같습니다.

  • 행, 열 또는 전체 표를 삽입하고 삭제합니다.
  • 표 셀에 콘텐츠를 삽입합니다.
  • 표 셀에서 콘텐츠를 읽습니다.
  • 열 속성과 행 스타일을 수정합니다.

Google Docs의 표는 문서에서 StructuralElement 유형으로 표시됩니다. 각 에는 표 행 목록이 포함되며 각 행에는 표 셀 목록이 포함됩니다. 모든 구조적 요소와 마찬가지로 표에는 문서에서 표의 위치를 나타내는 시작 및 종료 색인이 있습니다. 인덱싱에 관한 자세한 내용은 구조를 참고하세요. 표 속성에는 열 너비, 패딩 등 다양한 스타일 요소가 포함됩니다.

다음 JSON 프래그먼트는 세부정보가 대부분 삭제된 간단한 2x2 표를 보여줍니다.

"table": {
    "columns": 2,
    "rows": 2,
    "tableRows": [
        { "tableCells": [
                {
                    "content": [ { "paragraph": { ...  }, } ],
                },
                {
                    "content": [ { "paragraph": { ... }, } ],
                }
            ],
        },
        {
            "tableCells": [
                {
                    "content": [ { "paragraph": { ... }, } ],
                },
                {
                    "content": [ { "paragraph": { ... }, } ],
                }
            ],
        }
    ]
}

표 삽입 및 삭제

문서에 새 표를 추가하려면 InsertTableRequest를 사용하세요. 표를 삽입할 때는 다음을 지정해야 합니다.

  • 표의 행과 열 측정기준입니다.
  • 새 테이블을 삽입할 위치입니다. 세그먼트 내의 색인일 수도 있고 세그먼트의 끝일 수도 있습니다. 두 이름 중 하나에는 지정된 탭의 ID가 포함되어야 합니다.

표를 삭제하는 명시적 메서드는 없습니다. 문서에서 표를 삭제하려면 다른 콘텐츠와 마찬가지로 처리합니다. DeleteContentRangeRequest를 사용하여 표 전체를 포함하는 범위를 지정합니다.

다음 예시에서는 빈 문서 끝에 3x3 테이블을 삽입합니다.

자바

// Insert a table at the end of the body.
// (An empty or unspecified segmentId field indicates the document's body.)

List<Request> requests = new ArrayList<>();
requests.add(
    new Request()
        .setInsertTable(
            new InsertTableRequest()
                .setEndOfSegmentLocation(
                    new EndOfSegmentLocation().setTabId(TAB_ID))
                .setRows(3)
                .setColumns(3)));

BatchUpdateDocumentRequest body =
    new BatchUpdateDocumentRequest().setRequests(requests);
BatchUpdateDocumentResponse response =
    docsService.documents().batchUpdate(DOCUMENT_ID, body).execute();

Python

# Insert a table at the end of the body.
# (An empty or unspecified segmentId field indicates the document's body.)

requests = [{
    'insertTable': {
        'rows': 3,
        'columns': 3,
        'endOfSegmentLocation': {
          'segmentId': '',
          'tabId': TAB_ID
        }
    },
}
]

result = service.documents().batchUpdate(documentId=DOCUMENT_ID, body={'requests': requests}).execute()

이 예시에서는 이전에 삽입된 테이블을 삭제하는 방법을 보여줍니다.

자바

// Delete a table that was inserted at the start of the body of the first tab.
// (The table is the second element in the body:
//  documentTab.getBody().getContent().get(2).)

Document document = docsService.documents().get(DOCUMENT_ID).setIncludeTabsContent(true).execute();
String tabId = document.getTabs()[0].getTabProperties().getTabId();
DocumentTab documentTab = document.getTabs()[0].getDocumentTab();
StructuralElement table = documentTab.getBody().getContent().get(2);

List<Request> requests = new ArrayList<>();
requests.add(
    new Request()
        .setDeleteContentRange(
            new DeleteContentRangeRequest()
                .setRange(
                    new Range()
                        .setStartIndex(table.getStartIndex())
                        .setEndIndex(table.getEndIndex())
                        .setTabId(tabId))));

BatchUpdateDocumentRequest body =
    new BatchUpdateDocumentRequest().setRequests(requests);
BatchUpdateDocumentResponse response =
    docsService.documents().batchUpdate(DOCUMENT_ID, body).execute();

Python

# Delete a table that was inserted at the start of the body of the first tab.
# (The table is the second element in the body: ['body']['content'][2].)

document = service.documents().get(documentId=DOCUMENT_ID, includeTabsContent=True).execute()
tab_id = document['tabs'][0]['tabProperties']['tabId']
document_tab = document['tabs'][0]['documentTab']
table = document_tab['body']['content'][2]

requests = [{
    'deleteContentRange': {
      'range': {
        'segmentId': '',
        'startIndex': table['startIndex'],
        'endIndex':   table['endIndex'],
        'tabId': tab_id
      }
    },
}
]

result = service.documents().batchUpdate(documentId=DOCUMENT_ID, body={'requests': requests}).execute()

시작 및 종료 색인을 지정하여 일반 콘텐츠로 테이블을 삭제하므로 이러한 색인을 어딘가에서 가져와야 합니다. 이 예에서는 문서 콘텐츠에서 이러한 색인을 추출하는 한 가지 방법을 보여줍니다.

행 삽입 및 삭제

문서에 이미 표가 포함되어 있는 경우 Google Docs API를 사용해 표 행을 삽입하고 삭제할 수 있습니다. InsertTableRowRequest를 사용하여 지정된 표 셀 위 또는 아래에 행을 삽입하고 DeleteTableRowRequest를 사용하여 지정된 셀 위치에 걸쳐 있는 행을 삭제합니다.

다음 예시에서는 표의 첫 번째 표 셀에 텍스트를 삽입하고 표 행을 추가합니다.

자바

List<Request> requests = new ArrayList<>();
requests.add(new Request().setInsertText(new InsertTextRequest()
        .setText("Hello")
        .setLocation(new Location().setIndex(5).setTabId(TAB_ID))));
requests.add(new Request().setInsertTableRow(new InsertTableRowRequest()
        .setTableCellLocation(new TableCellLocation()
                .setTableStartLocation(new Location()
                        .setIndex(2).setTabId(TAB_ID))
                .setRowIndex(1)
                .setColumnIndex(1))
        .setInsertBelow(true)));

BatchUpdateDocumentRequest body =
    new BatchUpdateDocumentRequest().setRequests(requests);
BatchUpdateDocumentResponse response = docsService.documents()
        .batchUpdate(DOCUMENT_ID, body).execute();

Python

requests = [{
      'insertText': {
        'location': {
          'index': 5,
          'tabId': TAB_ID
        },
        'text': 'Hello'
    }
  },
  {
    'insertTableRow': {
        'tableCellLocation': {
            'tableStartLocation': {
                'index': 2,
                'tabId': TAB_ID
            },
            'rowIndex': 1,
            'columnIndex': 1
        },
        'insertBelow': 'true'
    }
  }
]

result = service.documents().batchUpdate(documentId=DOCUMENT_ID, body={'requests': requests}).execute()

열 삽입 및 삭제

기존 테이블에 열을 삽입하려면 InsertTableColumnRequest를 사용합니다. 다음을 지정해야 합니다.

  • 새 열을 삽입할 셀입니다.
  • 새 열을 삽입할 쪽 (왼쪽 또는 오른쪽)입니다.

다음 예시는 앞에서 본 2x2 테이블에 열을 삽입하는 방법을 보여줍니다.

자바

List<Request> requests = new ArrayList<>();
requests.add(
    new Request()
        .setInsertTableColumn(
            new InsertTableColumnRequest()
                .setTableCellLocation(
                    new TableCellLocation()
                        .setTableStartLocation(
                            new Location().setIndex(2).setTabId(TAB_ID))
                        .setRowIndex(0)
                        .setColumnIndex(0))
                .setInsertRight(true)));

BatchUpdateDocumentRequest body =
    new BatchUpdateDocumentRequest().setRequests(requests);
BatchUpdateDocumentResponse response =
    docsService.documents().batchUpdate(DOCUMENT_ID, body).execute();

Python

requests = [{
    'insertTableColumn': {
      'tableCellLocation': {
        'tableStartLocation': {
          'segmentId': '',
          'index': 2,
          'tabId': TAB_ID
        },
        'rowIndex': 0,
        'columnIndex': 0
      },
      'insertRight': True
    },
}
]

result = service.documents().batchUpdate(documentId=DOCUMENT_ID, body={'requests': requests}).execute()

열을 삭제하려면 DeleteTableColumnRequest를 사용합니다. 열을 삽입할 때와 마찬가지로 대상 열 내의 셀 위치를 지정합니다.

표 셀에서 콘텐츠 읽기

표 셀에는 구조적 요소 목록이 포함됩니다. 이러한 각 구조적 요소는 텍스트가 포함된 단락이거나 다른 유형의 구조(다른 표 포함)일 수 있습니다. 표 콘텐츠를 읽으려면 텍스트 추출에 표시된 대로 각 요소를 재귀적으로 검사하면 됩니다.

표 셀에 콘텐츠 삽입

표 셀에 쓰려면 업데이트할 셀 내의 색인에 InsertTextRequest를 사용합니다. 업데이트된 텍스트를 고려하여 표 색인이 조정됩니다. DeleteContentRangeRequest를 사용하여 셀 텍스트를 삭제하는 경우에도 동일하게 적용됩니다.

열 속성 수정

UpdateTableColumnPropertiesRequest를 사용하면 테이블에 있는 하나 이상의 열의 속성을 수정할 수 있습니다.

TableColumnProperties 객체와 함께 테이블의 시작 색인을 제공해야 합니다. 선택한 열만 수정하려면 요청에 열 번호 목록을 포함하고, 테이블의 모든 열을 수정하려면 빈 목록을 제공합니다.

다음 예시에서는 테이블의 열 너비를 업데이트하여 모든 열을 100pt 너비로 설정한 다음 첫 번째 열의 너비를 200pt로 설정합니다.

자바

List<Request> requests = new ArrayList<>();
requests.add(
    new Request()
        .setUpdateTableColumnProperties(
            new UpdateTableColumnPropertiesRequest()
                .setTableStartLocation(
                    new Location()
                        .setIndex(2)
                        .setTabId(TAB_ID))
                .setColumnIndices(null)
                .setTableColumnProperties(
                    new TableColumnProperties()
                        .setWidthType("FIXED_WIDTH")
                        .setWidth(
                            new Dimension().setMagnitude(100d).setUnit("PT")))
                .setFields("*")));

List<Integer> columnIndices = new ArrayList<>();
columnIndices.add(0);
requests.add(
    new Request()
        .setUpdateTableColumnProperties(
            new UpdateTableColumnPropertiesRequest()
                .setTableStartLocation(
                    new Location()
                        .setIndex(2)
                        .setTabId(TAB_ID))
                .setColumnIndices(columnIndices)
                .setTableColumnProperties(
                    new TableColumnProperties()
                        .setWidthType("FIXED_WIDTH")
                        .setWidth(
                            new Dimension().setMagnitude(200d).setUnit("PT")))
                .setFields("*")));

BatchUpdateDocumentRequest body =
    new BatchUpdateDocumentRequest().setRequests(requests);
BatchUpdateDocumentResponse response =
    docsService.documents().batchUpdate(DOCUMENT_ID, body).execute();

Python

requests = [{
  'updateTableColumnProperties': {
    'tableStartLocation': {'index': 2, 'tabId': TAB_ID},
    'columnIndices': [],
    'tableColumnProperties': {
      'widthType': 'FIXED_WIDTH',
      'width': {
        'magnitude': 100,
        'unit': 'PT'
      }
    },
    'fields': '*'
  },
  'updateTableColumnProperties': {
    'tableStartLocation': {'index': 2, 'tabId': TAB_ID},
    'columnIndices': [0],
    'tableColumnProperties': {
      'widthType': 'FIXED_WIDTH',
      'width': {
        'magnitude': 200,
        'unit': 'PT'
      }
    },
    'fields': '*'
  },
}
]

result = service.documents().batchUpdate(documentId=DOCUMENT_ID, body={'requests': requests}).execute()

행 스타일 수정

UpdateTableRowsStyleRequest를 사용하면 테이블에 있는 하나 이상의 행의 스타일을 수정할 수 있습니다.

TableRowStyle 객체와 함께 표의 시작 색인을 제공해야 합니다. 선택한 행만 수정하려면 요청에 행 번호 목록을 포함하고, 테이블의 모든 행을 수정하려면 빈 목록을 제공합니다.

다음 예시에서는 테이블의 3번째 행의 최소 높이를 설정합니다.

자바

List<Integer> rowIndices = new ArrayList<>();
rowIndices.add(3);

List<Request> requests = new ArrayList<>();
requests.add(
    new Request()
        .setUpdateTableRowStyle(
            new UpdateTableRowStyleRequest()
                .setTableStartLocation(
                    new Location()
                        .setIndex(2)
                        .setTabId(TAB_ID))
                .setRowIndices(rowIndices)
                .setTableRowStyle(
                    new TableRowStyle()
                        .setMinRowHeight(
                            new Dimension().setMagnitude(18d).setUnit("PT")))
                .setFields("*")));

BatchUpdateDocumentRequest body =
    new BatchUpdateDocumentRequest().setRequests(requests);
BatchUpdateDocumentResponse response =
    docsService.documents().batchUpdate(DOCUMENT_ID, body).execute();

Python

requests = [{
    'updateTableRowStyle': {
        'tableStartLocation': {'index': 2, 'tabId': TAB_ID},
        'rowIndices': [3],
        'tableRowStyle': {
            'minRowHeight': {
              'magnitude': 18,
              'unit': 'PT'
            }
        },
        'fields': '*'
    },
}
]

result = service.documents().batchUpdate(documentId=DOCUMENT_ID, body={'requests': requests}).execute()