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

באמצעות 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(<var>TAB_ID</var>))));

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

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

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

PHP

$requests = array();

$requests[] = new Google_Service_Docs_Request(array(
    'insertText' => array(
        'text' => $text1,
        'location' => array(
            'index' => 25,
            'tabId' => <var>TAB_ID</var>,
        ),
    ),
));

$requests[] = new Google_Service_Docs_Request(array(
    'insertText' => array(
        'text' => $text2,
        'location' => array(
            'index' => 50,
            'tabId' => <var>TAB_ID</var>,
        ),
    ),
));

$requests[] = new Google_Service_Docs_Request(array(
    'insertText' => array(
        'text' => $text3,
        'location' => array(
            'index' => 75,
            'tabId' => <var>TAB_ID</var>,
        ),
    ),
));

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

$response = $service->documents->batchUpdate($<var>DOCUMENT_ID</var>, $batchUpdateRequest);

Python

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

result = service.documents().batchUpdate(
    documentId=<var>DOCUMENT_ID</var>, 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(<var>TAB_ID</var>))
    ));

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

PHP

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

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

$response = $service->documents->batchUpdate(<var>DOCUMENT_ID</var>, $batchUpdateRequest);

Python

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

        }

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

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

העברת טקסט

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