Tablolarla çalışma

Bu belgede, Google Dokümanlar API'sinde tablolarla nasıl çalışılacağı açıklanmaktadır.

Docs API, tablo içeriklerini düzenlemenize olanak tanır. Gerçekleştirebileceğiniz işlemler şunlardır:

  • Satır, sütun veya tabloların tamamını ekleme ve silme
  • Tablo hücrelerine içerik ekleme
  • Tablo hücrelerindeki içeriği okuma.
  • Sütun özelliklerini ve satırların stilini değiştirme

Google Dokümanlar'daki tablolar, dokümanda bir tür StructuralElement olarak gösterilir. Her Table, TableRow nesnelerinin listesini içerir. Her satırda TableCell nesnelerinin listesi bulunur. Tüm yapısal öğelerde olduğu gibi, tabloda da tablonun bir dokümandaki konumunu gösteren başlangıç ve bitiş dizinleri bulunur. Tablo özellikleri, sütun genişlikleri ve dolgu gibi birçok stil öğesini içerir.

Example table

Aşağıdaki JSON parçası, ayrıntıların çoğu kaldırılmış 2x2'lik bir tabloyu göstermektedir:

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

Aşağıdaki tabloda, tablonun S dizininden başladığı ve tüm hücrelerin boş olduğu (her biri yalnızca uzunluğu 1 olan tek bir yeni satır karakteri \n içerir) varsayılarak 2x2 boyutundaki bir tablodaki her yapısal öğenin dizin kaymaları gösterilmektedir:

Öğe Yol Başlangıç dizini Bitiş dizini
Tablo / S S + 12
    TableRow 0 /rows[0] S + 1 S + 6
        TableCell (0,0) /rows[0]/cells[0] S + 2 S + 4
            Paragraf /rows[0]/cells[0]/p[0] S + 3 S + 4
        TableCell (0,1) /rows[0]/cells[1] S + 4 S + 6
            Paragraf /rows[0]/cells[1]/p[0] S + 5 S + 6
    TableRow 1 /rows[1] S + 6 S + 11
        TableCell (1,0) /rows[1]/cells[0] S + 7 S + 9
            Paragraf /rows[1]/cells[0]/p[0] S + 8 S + 9
        TableCell (1,1) /rows[1]/cells[1] S + 9 S + 11
            Paragraf /rows[1]/cells[1]/p[0] S + 10 S + 11

Tablo ekleme ve silme

Bir belgeye tablo eklemek için InsertTableRequest simgesini kullanın. Tablo eklerken aşağıdakileri belirtmeniz gerekir:

  • Tablonun satır ve sütun boyutları.
  • Tablonun ekleneceği yer: Bu, bir segment içindeki bir dizin (ör. gövde, başlık veya altbilgi) ya da bir segmentin sonu olabilir. İkisinden biri, belirtilen sekmenin kimliğini içermelidir.

Gövdenin sonuna bir tablo eklemek için EndOfSegmentLocation nesnesini belirtin ve segmentId öğesini boş bırakın.

Tabloları silmek için açık bir yöntem yoktur. Bir belgeyi tablodan silmek için diğer içeriklerde olduğu gibi DeleteContentRangeRequest simgesini kullanın ve tablonun tamamını kapsayan bir range belirtin.

Aşağıdaki kod örneğinde, boş bir belgenin sonuna 3x3 boyutunda bir tablonun nasıl ekleneceği gösterilmektedir:

Java

// 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(<var>TAB_ID</var>))
                .setRows(3)
                .setColumns(3)));

BatchUpdateDocumentRequest body =
    new BatchUpdateDocumentRequest().setRequests(requests);
BatchUpdateDocumentResponse response =
    docsService.documents().batchUpdate(<var>DOCUMENT_ID</var>, 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': <var>TAB_ID</var>
        }
    },
}
]

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

Aşağıdaki kod örneğinde, başlangıç ve bitiş dizinleri belirtilerek tablonun nasıl silineceği gösterilmektedir. Bu örnekte, bu dizinlerin doküman içeriğinden nasıl alınacağı gösterilmektedir.

Java

// 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(<var>DOCUMENT_ID</var>).setIncludeTabsContent(true).execute();
String tabId = document.getTabs().get(0).getTabProperties().getTabId();
DocumentTab documentTab = document.getTabs().get(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(<var>DOCUMENT_ID</var>, 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=<var>DOCUMENT_ID</var>, body={'requests': requests}).execute()

Satır ekleme ve silme

Dokümanınızda zaten bir tablo varsa Dokümanlar API'si, tablo satırları eklemenize ve silmenize olanak tanır. Belirtilen bir tablo hücresinin öncesine veya sonrasına satır eklemek için InsertTableRowRequest, belirtilen hücre konumunu kapsayan bir satırı kaldırmak için DeleteTableRowRequest simgesini kullanın.

Aşağıdaki kod örneğinde, mevcut bir tablonun ilk hücresine metin ekleme ve tablo satırı ekleme işlemi gösterilmektedir:

Java

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

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

Python

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

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

Sütun ekleme ve silme

Mevcut bir tabloya sütun eklemek için InsertTableColumnRequest simgesini kullanın. Aşağıdakileri belirtmeniz gerekir:

  • Yeni bir sütunun eklenmesini istediğiniz hücrenin yanındaki bir hücre.
  • Yeni sütunun hangi tarafa (sol veya sağ) ekleneceği.

Aşağıdaki kod örneğinde, daha önce gösterilen örnek 2x2 tablosuna nasıl sütun ekleneceği gösterilmektedir:

Java

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

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

Python

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

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

Bir sütunu silmek için DeleteTableColumnRequest simgesini kullanın. Sütun eklemek için hedef sütundaki hücre konumunu daha önce gösterildiği gibi belirtmeniz gerekir.

Tablo hücrelerindeki içeriği okuma

Bir tablo hücresi, StructuralElement nesnelerinin listesini içerir. Bu yapısal öğelerin her biri metin içeren bir paragraf veya başka bir yapı türü (ör. başka bir tablo) olabilir. Tablo içeriklerini okumak için Extract the text from a document with Docs API (Docs API ile dokümandaki metni ayıklama) kod örneğinde gösterildiği gibi her öğeyi yinelemeli olarak inceleyebilirsiniz.

Tablo hücrelerine içerik ekleme

Tablo hücresine yazmak için güncellemek istediğiniz hücrenin location değerine ayarlanmış bir InsertTextRequest kullanın. Tablo dizinleri, güncellenen metni hesaba katacak şekilde ayarlanır. Aynı durum, DeleteContentRangeRequest ile hücre metnini silmek için de geçerlidir.

Aşağıdaki kod örneğinde, tablo hücresine nasıl yazılacağı gösterilmektedir:

Java

List<Request> requests = new ArrayList<>();
requests.add(new Request().setInsertText(new InsertTextRequest()
        .setText("Hello")
        .setLocation(new Location().setIndex(5).setTabId(<var>TAB_ID</var>))));

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

Python

requests = [{
    'insertText': {
      'location': {
        'index': 5,
        'tabId': <var>TAB_ID</var>
      },
      'text': 'Hello'
    }
}]

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

Sütun özelliklerini değiştirme

UpdateTableColumnPropertiesRequest simgesi, bir tablodaki bir veya daha fazla sütunun özelliklerini değiştirmenize olanak tanır.

Tablonun başlangıç dizinini bir TableColumnProperties nesnesiyle birlikte sağlamanız gerekir. Yalnızca seçili sütunları değiştirmek için isteğe sütun numaralarının listesini ekleyin. Tablodaki tüm sütunları değiştirmek için boş bir liste sağlayın.

Aşağıdaki kod örneğinde, bir tablonun sütun genişliklerinin nasıl güncelleneceği gösterilmektedir. Örnekte, önce tüm sütunlar 100 pt genişliğe, ardından ilk sütunun genişliği 200 pt'ye ayarlanmaktadır:

Java

List<Request> requests = new ArrayList<>();
requests.add(
    new Request()
        .setUpdateTableColumnProperties(
            new UpdateTableColumnPropertiesRequest()
                .setTableStartLocation(
                    new Location()
                        .setIndex(2)
                        .setTabId(<var>TAB_ID</var>))
                .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(<var>TAB_ID</var>))
                .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(<var>DOCUMENT_ID</var>, body).execute();

Python

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

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

Satır stillerini değiştirme

UpdateTableRowStyleRequest ile bir tablodaki satırlardan birinin veya daha fazlasının stilini değiştirebilirsiniz.

Tablonun başlangıç dizinini ve bir TableRowStyle nesnesini sağlamanız gerekir. Yalnızca seçili satırları değiştirmek için isteğe satır numaralarının listesini ekleyin. Tablodaki tüm satırları değiştirmek için boş bir liste sağlayın.

Aşağıdaki kod örneğinde, bir tablodaki üçüncü satırın minimum yüksekliğinin nasıl ayarlanacağı gösterilmektedir:

Java

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(<var>TAB_ID</var>))
                .setRowIndices(rowIndices)
                .setTableRowStyle(
                    new TableRowStyle()
                        .setMinRowHeight(
                            new Dimension().setMagnitude(18d).setUnit("PT")))
                .setFields("*")));

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

Python

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

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