แทรก ลบ และย้ายข้อความ

Google เอกสาร API ช่วยให้คุณแทรกหรือลบข้อความในเอกสารได้ การย้ายข้อความจะเกี่ยวข้องกับการดำเนินการทั้ง 2 อย่าง ซึ่งนำหน้าด้วย get ของเนื้อหา

คุณสามารถแทรกหรือลบข้อความในส่วนใดก็ได้ของเอกสาร (เนื้อหา ส่วนหัว ส่วนท้าย หรือเชิงอรรถ)

แทรกข้อความ

หากต้องการแทรกข้อความลงในเอกสาร ให้ใช้เมธอด documents.batchUpdate และใส่ InsertTextRequest ที่มีข้อความและตำแหน่งเป็นเพย์โหลด

ตัวอย่างโค้ดต่อไปนี้แสดงวิธีแทรกชุดสตริงข้อความที่ตำแหน่งดัชนีที่ระบุในเนื้อหาของเอกสาร ตัวอย่างนี้ใช้ออฟเซ็ตเป้าหมาย 3 รายการ (25, 50 และ 75) และแทรกสตริงที่มีอักขระ 10 ตัวในแต่ละตำแหน่ง

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
  • การแทรกครั้งที่ 2 จะเพิ่มอักขระ 10 ตัวที่ออฟเซ็ต 50+10=60
  • การแทรกครั้งที่ 3 จะเพิ่มอักขระ 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()

ลดความซับซ้อนของกรณีต่างๆ โดยการเขียนย้อนหลัง เช่นเดียวกับการแทรก การลบข้อความจะเป็นการปรับเปลี่ยนดัชนีของข้อความทั้งหมด "ด้านล่าง" ในเซกเมนต์ ขอย้ำอีกครั้งว่าการเขียนย้อนหลังจะช่วยให้การจัดการดัชนีง่ายขึ้น

ย้ายข้อความ

หากต้องการย้ายข้อความ ให้ลบข้อความในตำแหน่งหนึ่ง แล้วนำไปแทรกที่อื่น การลบเนื้อหาไม่ได้เป็นการทำสำเนาเนื้อหาดังกล่าว (ไม่มีแนวคิดที่เทียบเท่ากันเกี่ยวกับคลิปบอร์ด) คุณจึงต้องดึงเนื้อหาของช่วงก่อนเพื่อนำไปใช้ในคำขอข้อความแทรก