Tablolarla çalışma

Google Docs API, tablo içeriklerini düzenlemenize olanak tanır. Gerçekleştirebileceğiniz işlemler arasında şunlar yer alır:

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

Google Dokümanlar'daki tablolar, dokümanda bir StructuralElement türü olarak temsil edilir. Her tablo, her satırın tablo hücreleri listesini içerdiği tablo satırlarının bir listesini içerir. Tüm yapısal öğelerde olduğu gibi, tablonun belgedeki konumunu belirten başlangıç ve bitiş dizinleri vardır. Dizine ekleme hakkında daha fazla bilgi için yapıya bakın. Tablo özellikleri, sütun genişlikleri ve dolgu gibi birçok stil öğesi içerir.

Aşağıdaki JSON parçası, ayrıntıların çoğunun kaldırıldığı basit bir 2x2 tablo göstermektedir:

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

Tablo ekleme ve silme

Bir dokümana yeni tablo eklemek için InsertTableRequest'i kullanın. Tablo eklerken aşağıdakileri belirtmeniz gerekir:

  • Satır ve sütunlardaki tablo boyutları.
  • Yeni tablonun ekleneceği konum: Bu, bir segment içindeki bir dizin veya bir segmentin sonu olabilir.

Tabloları silmenin açık bir yöntemi yoktur. Bir dokümandan tabloyu silmek için, tabloyu diğer herhangi bir içerikle aynı şekilde ele alın: Tüm tabloyu kapsayan bir aralık belirterek DeleteContentRangeRequest işlevini kullanın.

Aşağıdaki örnekte, boş bir dokümanın sonuna 3x3 boyutunda bir tablo eklenmiştir:

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())
                .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': ''
          }
      },
  }
  ]

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

Aşağıdaki karşılık gelen örnekte, daha önce eklenen tablonun nasıl silineceği gösterilmektedir:

Java

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

Document document = docsService.documents().get(DOCUMENT_ID).execute();
StructuralElement table = document.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()))));

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.
  # (The table is the second element in the body: ['body']['content'][2].)

  document = service.documents().get(documentId=DOCUMENT_ID).execute()
  table = document['body']['content'][2]

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

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

Başlangıç ve bitiş dizinlerini belirterek bir tabloyu normal içerik olarak sildiğinizden, bu dizinleri bir yerden almanız gerekir. Örnekte, bu dizinleri belge içeriğinden çıkarmanın bir yolu gösterilmektedir.

Satır ekleme ve silme

Dokümanınız zaten bir tablo içeriyorsa Google Docs API, tablo satırlarını eklemenize ve silmenize olanak tanır. Belirli bir tablo hücresinin üstüne veya altına satır eklemek için InsertTableRowRequest işlevini, belirtilen hücre konumunu kapsayan bir satırı kaldırmak için DeleteTableRowRequest'i kullanın.

Aşağıdaki örnekte bir tablonun ilk tablo hücresine metin ve bir tablo satırı eklenmiştir.

Java

List<Request> requests = new ArrayList<>();
requests.add(new Request().setInsertText(new InsertTextRequest()
        .setText("Hello")
        .setLocation(new Location().setIndex(5))));
requests.add(new Request().setInsertTableRow(new InsertTableRowRequest()
        .setTableCellLocation(new TableCellLocation()
                .setTableStartLocation(new Location()
                        .setIndex(2))
                .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
          },
          'text': 'Hello'
      }
    },
    {
      'insertTableRow': {
          'tableCellLocation': {
              'tableStartLocation': {
                      'index': 2
              },
              'rowIndex': 1,
              'columnIndex': 1
          },
          'insertBelow': 'true'
      }
    }
  ]

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

Sütun ekleme ve silme

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

  • Yanına yeni bir sütun eklenmesini istediğiniz hücre.
  • Yeni sütunun hangi tarafta (sol veya sağ) ekleneceği.

Aşağıdaki örnekte, daha önce gösterilen 2x2 tabloya nasıl sütun ekleyebileceğiniz gösterilmektedir:

Java

List<Request> requests = new ArrayList<>();
requests.add(
    new Request()
        .setInsertTableColumn(
            new InsertTableColumnRequest()
                .setTableCellLocation(
                    new TableCellLocation()
                        .setTableStartLocation(
                            new Location().setIndex(2))
                        .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
          },
          'rowIndex': 0,
          'columnIndex': 0
        },
        'insertRight': True
      },
  }
  ]

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

Bir sütunu silmek için DeleteTableColumnRequest'i kullanın. Daha önce sütun eklemek için gösterildiği gibi, hedef sütundaki hücre konumunu belirtirsiniz.

Tablo hücrelerindeki içeriği okuma

Tablo hücresi yapısal öğelerin bir listesini içerir. Bu yapısal öğelerin her biri, metin içeren bir paragraf veya başka bir yapı türü, hatta başka bir tablo olabilir. Tablo içeriklerini okumak için Metni Ayıklama bölümünde gösterildiği gibi her öğeyi tekrarlı olarak inceleyebilirsiniz.

Tablo hücrelerine içerik ekleme

Bir tablo hücresine yazmak için, güncellemek istediğiniz hücredeki bir dizine InsertTextRequest işlevini kullanın. Tablo dizinleri, güncellenen metni hesaba katar. Aynı durum DeleteContentRangeRequest ile hücre metni silmek için de geçerlidir.

Sütun özelliklerini değiştirme

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

TableColumnProperties nesnesiyle birlikte tablonun başlangıç dizinini 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 örnekte bir tablonun sütun genişlikleri güncellenerek tüm sütunlar 100 pt genişliğinde, ardından ilk sütunun genişliği 200 pt:

Java

List<Request> requests = new ArrayList<>();
requests.add(
    new Request()
        .setUpdateTableColumnProperties(
            new UpdateTableColumnPropertiesRequest()
                .setTableStartLocation(new Location().setIndex(2))
                .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))
                .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},
      'columnIndices': [],
      'tableColumnProperties': {
        'widthType': 'FIXED_WIDTH',
        'width': {
          'magnitude': 100,
          'unit': 'PT'
        }
      },
      'fields': '*'
    },
    'updateTableColumnProperties': {
      'tableStartLocation': {'index': 2},
      'columnIndices': [0],
      'tableColumnProperties': {
        'widthType': 'FIXED_WIDTH',
        'width': {
          'magnitude': 200,
          'unit': 'PT'
        }
      },
      'fields': '*'
    },
  }
  ]

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

Satır stillerini değiştirme

UpdateTableRowsStyleRequest, bir tablodaki bir veya daha fazla satırın stilini değiştirmenize olanak tanır.

Bir TableRowStyle nesnesiyle birlikte tablonun başlangıç dizinini 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 örnekte, bir tablonun 3. satırının minimum yüksekliği ayarlanmaktadır:

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))
                .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},
          'rowIndices': [3],
          'tableRowStyle': {
              'minRowHeight': {
                'magnitude': 18,
                'unit': 'PT'
              }
          },
          'fields': '*'
      },
  }
  ]

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