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

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

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

הוספת טקסט

כדי להוסיף טקסט למסמך, משתמשים ב-method 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))));

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

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

        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,
        ),
    ),
    'insertText' => array(
        'text' => $text2,
        'location' => array(
            'index' => 50,
        ),
    ),
    'insertText' => array(
        'text' => $text3,
        'location' => array(
            'index' => 75,
        ),
    ),
));

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

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

Python

    requests = [
         {
            'insertText': {
                'location': {
                    'index': 25,
                },
                'text': text1
            }
        },
                 {
            'insertText': {
                'location': {
                    'index': 50,
                },
                'text': text2
            }
        },
                 {
            'insertText': {
                'location': {
                    'index': 75,
                },
                '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))
            ));

        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
        ),
    ),
));

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

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

Python

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

            }

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

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

הזזת הטקסט

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