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

برنامج نصي لقراءة المحتوى وتعديله وتنسيقه في "مستندات Google" باستخدام ميزات إضافية

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

هذه خدمة متقدّمة يجب تفعيلها قبل الاستخدام. اتّبِع دليل البدء السريع للحصول على تعليمات مفصّلة حول كيفية البدء.

مراجع

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

للإبلاغ عن المشاكل والعثور على دعم آخر، يُرجى الاطّلاع على دليل دعم 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;
    }
  }
}

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

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

عند استخدام خدمة &quot;مستندات Google&quot; المتقدّمة، ادمِج طلبات متعددة في مصفوفة بدلاً من استدعاء 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);