הוספה, מחיקה והעברה של טקסט

באמצעות Google Docs API אפשר להוסיף או למחוק טקסט במסמך. העברת טקסט כוללת את שתי הפעולות האלה, ולפניהן get של התוכן.

אפשר להוסיף או למחוק טקסט בכל אחד מהקטעים (גוף, כותרת עליונה, כותרת תחתונה או הערת שוליים) של כרטיסיית מסמך.

הוספת טקסט

כדי להוסיף טקסט למסמך, משתמשים בשיטה documents.batchUpdate וכוללים InsertTextRequest עם הטקסט והמיקום כמטען ייעודי (payload).

בדוגמה הבאה של קוד אפשר לראות איך להוסיף סדרה של מחרוזות טקסט במיקומי אינדקס ספציפיים בגוף המסמך. בדוגמה נעשה שימוש בשלושה היסטים של יעד (25,‏ 50 ו-75) ומוסיפים מחרוזת של עשרה תווים בכל מיקום.

Java

List<Request> requests = new ArrayList<>();
requests.add(new Request().setInsertText(new InsertTextRequest()
        .setText(text1)
        .setLocation(new Location().setIndex(25).setTabId(TAB_ID))));

requests.add(new Request().setInsertText(new InsertTextRequest()
        .setText(text2)
        .setLocation(new Location().setIndex(50).setTabId(TAB_ID))));

requests.add(new Request().setInsertText(new InsertTextRequest()
        .setText(text3)
        .setLocation(new Location().setIndex(75).setTabId(TAB_ID))));

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

PHP

$requests = array();
$requests[] = new Google_Service_Docs_Request(array(
    'insertText' => array(
        'text' => $text1,
        'location' => array(
            'index' => 25,
            'tabId' => TAB_ID,
        ),
    ),
    'insertText' => array(
        'text' => $text2,
        'location' => array(
            'index' => 50,
            'tabId' => TAB_ID,
        ),
    ),
    'insertText' => array(
        'text' => $text3,
        'location' => array(
            'index' => 75,
            'tabId' => TAB_ID,
        ),
    ),
));

$batchUpdateRequest = new Google_Service_Docs_BatchUpdateDocumentRequest(array(
    'requests' => $requests
));

$response = $service->documents->batchUpdate($documentId, $batchUpdateRequest);

Python

requests = [
        {
        'insertText': {
            'location': {
                'index': 25,
                'tabId': TAB_ID
            },
            'text': text1
        }
    },
                {
        'insertText': {
            'location': {
                'index': 50,
                'tabId': TAB_ID
            },
            'text': text2
        }
    },
                {
        'insertText': {
            'location': {
                'index': 75,
                'tabId': TAB_ID
            },
            'text': text3
        }
    },
]

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

כל הוספה מגדילה את כל האינדקסים עם המספרים הגבוהים יותר בגודל הטקסט שנוסף. בדוגמה, התוצאה של שינויי האינדקס האלה מחושבת מראש כדי שההוספות הבאות יתבצעו בהיסט החדש והמתוקן. לכן, כדי להוסיף את התוכן במרווחי הזמן המקוריים של 25, 50 ו-75, מדדי ההוספה בפועל הם:

  • ההוספה הראשונה מוסיפה 10 תווים בהיסט 25.
  • ההוספה השנייה מוסיפה 10 תווים בהיסט 50+10=60.
  • ההוספה השלישית מוסיפה 10 תווים בהיסט 75+10+10=95.

מחיקת הטקסט

כדי למחוק טקסט ממסמך, קודם צריך ליצור Range שמגדיר את טווח הטקסט למחיקה. לאחר מכן משתמשים בשיטה documents.batchUpdate ומוסיפים DeleteContentRangeRequest.

בדוגמה הבאה של קוד אפשר לראות איך מוחקים את הטקסט בין אינדקס 10 לאינדקס 24 בגוף המסמך.

Java

List<Request> requests = new ArrayList<>();
requests.add(new Request().setDeleteContentRange(
        new DeleteContentRangeRequest()
                .setRange(new Range()
                        .setStartIndex(10)
                        .setEndIndex(24)
                        .setTabId(TAB_ID))
    ));

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

PHP

$requests = array();
$requests[] = new Google_Service_Docs_Request(array(
    'deleteContentRange' => array(
        'range' => array(
            'startIndex' => 10,
            'endIndex' => 24,
            'tabId' => TAB_ID
        ),
    ),
));

$batchUpdateRequest = new Google_Service_Docs_BatchUpdateDocumentRequest(array(
    'requests' => $requests
));

$response = $service->documents->batchUpdate($documentId, $batchUpdateRequest);

Python

requests = [
    {
        'deleteContentRange': {
            'range': {
                'startIndex': 10,
                'endIndex': 24,
                'tabId': TAB_ID
            }

        }

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

כדאי לכתוב הפוך כדי לפשט את העניינים. בדומה להוספות, מחיקת טקסט משנה את האינדקסים של כל הטקסט 'מתחת' בפלח. שוב, כתיבה הפוכה יכולה לפשט את הטיפול באינדקסים.

העברת טקסט

כדי להעביר טקסט, מוחקים אותו במיקום אחד ואז מוסיפים אותו במקום אחר. מחיקת תוכן לא מאפשרת לקבל עותק שלו (אין מושג מקביל של לוח), ולכן צריך לחלץ את התוכן של הטווח קודם כדי שאפשר יהיה להשתמש בו בבקשה להוספת טקסט.