خدمة المستندات المتقدّمة

تتيح لك خدمة "مستندات Google" المتقدّمة استخدام Google Docs API في "برمجة تطبيقات Google". تمامًا مثل خدمة "مستندات Google" المضمّنة في Apps Script، تتيح واجهة برمجة التطبيقات هذه للبرامج النصية قراءة المحتوى وتعديله وتنسيقه في "مستندات Google". في معظم الحالات، يكون استخدام الخدمة المضمّنة أسهل، ولكن هذه الخدمة المتقدّمة توفّر بعض الميزات الإضافية.

مراجع

للحصول على معلومات مفصّلة حول هذه الخدمة، يُرجى الاطّلاع على المستندات المرجعية الخاصة بواجهة برمجة التطبيقات Docs API. مثل جميع الخدمات المتقدّمة في "برمجة التطبيقات"، تستخدم خدمة "مستندات Google" المتقدّمة الكائنات والطرق والمعلَمات نفسها التي تستخدمها واجهة برمجة التطبيقات العامة. لمزيد من المعلومات، اطّلِع على كيفية تحديد تواقيع الطرق.

للإبلاغ عن مشاكل والعثور على معلومات دعم أخرى، يُرجى الاطّلاع على دليل دعم Docs API.

نموذج التعليمات البرمجية

يستخدم نموذج الرمز البرمجي أدناه الإصدار 1 من واجهة برمجة التطبيقات.

إنشاء مستند

ينشئ هذا النموذج مستندًا جديدًا.

advanced/docs.gs
/**
 * Create a new document.
 * @see https://developers.google.com/docs/api/reference/rest/v1/documents/create
 * @return {string} documentId
 */
function createDocument() {
  // Create document with title
  const document = Docs.Documents.create({ title: "My New Document" });
  console.log(`Created document with ID: ${document.documentId}`);
  return document.documentId;
}

البحث عن النص واستبداله

يعثر هذا النموذج على أزواج من النصوص ويستبدلها في جميع علامات التبويب في المستند. يمكن أن يكون ذلك مفيدًا عند استبدال العناصر النائبة في نسخة من مستند نموذج بقيم من قاعدة بيانات.

advanced/docs.gs
/**
 * Performs "replace all".
 * @param {string} documentId The document to perform the replace text operations on.
 * @param {Object} findTextToReplacementMap A map from the "find text" to the "replace text".
 * @return {Object} replies
 * @see https://developers.google.com/docs/api/reference/rest/v1/documents/batchUpdate
 */
function findAndReplace(documentId, findTextToReplacementMap) {
  const requests = [];
  for (const findText in findTextToReplacementMap) {
    const replaceText = findTextToReplacementMap[findText];

    // Replace all text across all tabs.
    const replaceAllTextRequest = {
      replaceAllText: {
        containsText: {
          text: findText,
          matchCase: true,
        },
        replaceText: replaceText,
      },
    };

    // Replace all text across specific tabs.
    const _replaceAllTextWithTabsCriteria = {
      replaceAllText: {
        ...replaceAllTextRequest.replaceAllText,
        tabsCriteria: {
          tabIds: [TAB_ID_1, TAB_ID_2, TAB_ID_3],
        },
      },
    };
    requests.push(replaceAllTextRequest);
  }
  const response = Docs.Documents.batchUpdate(
    { requests: requests },
    documentId,
  );
  const replies = response.replies;
  for (const [index] of replies.entries()) {
    const numReplacements =
      replies[index].replaceAllText.occurrencesChanged || 0;
    console.log(
      "Request %s performed %s replacements.",
      index,
      numReplacements,
    );
  }
  return replies;
}

إدراج نص وتنسيقه

يدرج هذا المثال نصًا جديدًا في بداية علامة التبويب الأولى في المستند ويضبط نمطه باستخدام خط وحجم محدّدين. يُرجى العِلم أنّه عليك تجميع عمليات متعددة في طلب batchUpdate واحد كلما أمكن ذلك لتحقيق الكفاءة.

advanced/docs.gs
/**
 * Insert text at the beginning of the first tab in the document and then style
 * the inserted text.
 * @param {string} documentId The document the text is inserted into.
 * @param {string} text The text to insert into the document.
 * @return {Object} replies
 * @see https://developers.google.com/docs/api/reference/rest/v1/documents/batchUpdate
 */
function insertAndStyleText(documentId, text) {
  const requests = [
    {
      insertText: {
        location: {
          index: 1,
          // A tab can be specified using its ID. When omitted, the request is
          // applied to the first tab.
          // tabId: TAB_ID
        },
        text: text,
      },
    },
    {
      updateTextStyle: {
        range: {
          startIndex: 1,
          endIndex: text.length + 1,
        },
        textStyle: {
          fontSize: {
            magnitude: 12,
            unit: "PT",
          },
          weightedFontFamily: {
            fontFamily: "Calibri",
          },
        },
        fields: "weightedFontFamily, fontSize",
      },
    },
  ];
  const response = Docs.Documents.batchUpdate(
    { requests: requests },
    documentId,
  );
  return response.replies;
}

قراءة الفقرة الأولى

يسجّل هذا النموذج نص الفقرة الأولى من علامة التبويب الأولى في المستند. بسبب الطبيعة المنظَّمة للفقرات في واجهة برمجة التطبيقات Docs API، يتضمّن ذلك دمج نص عناصر فرعية متعددة.

advanced/docs.gs
/**
 * Read the first paragraph of the first tab in a document.
 * @param {string} documentId The ID of the document to read.
 * @return {Object} paragraphText
 * @see https://developers.google.com/docs/api/reference/rest/v1/documents/get
 */
function readFirstParagraph(documentId) {
  // Get the document using document ID
  const document = Docs.Documents.get(documentId, {
    includeTabsContent: true,
  });
  const firstTab = document.tabs[0];
  const bodyElements = firstTab.documentTab.body.content;
  for (let i = 0; i < bodyElements.length; i++) {
    const structuralElement = bodyElements[i];
    // Print the first paragraph text present in document
    if (structuralElement.paragraph) {
      const paragraphElements = structuralElement.paragraph.elements;
      let paragraphText = "";

      for (let j = 0; j < paragraphElements.length; j++) {
        const paragraphElement = paragraphElements[j];
        if (paragraphElement.textRun !== null) {
          paragraphText += paragraphElement.textRun.content;
        }
      }
      console.log(paragraphText);
      return paragraphText;
    }
  }
}

أفضل الممارسات

التعديلات المجمّعة

عند استخدام خدمة Docs المتقدّمة، ادمِج طلبات متعددة في مصفوفة بدلاً من استدعاء batchUpdate في حلقة.

لا: استدعِ الدالة batchUpdate في حلقة.

var textToReplace = ['foo', 'bar'];
for (var i = 0; i < textToReplace.length; i++) {
  Docs.Documents.batchUpdate({
    requests: [{
      replaceAllText: ...
    }]
  }, docId);
}

Do: استدعاء batchUpdate مع مصفوفة من التعديلات.

var requests = [];
var textToReplace = ['foo', 'bar'];
for (var i = 0; i < textToReplace.length; i++) {
  requests.push({ replaceAllText: ... });
}

Docs.Documents.batchUpdate({
  requests: requests
}, docId);