google-apps-script - 谷歌文档脚本: appendText/insertText Formatting

标签 google-apps-script google-docs

如何对 Google 文档脚本使用 appendText()insertText() 并保持格式设置?

我想将附加字符串的中间部分 (group2) 设置为斜体,同时保留其他部分 (group1, group3)作为普通文本。例如:嗨我的名字是内特。

我可以输入“Hi”并附加“我的名字是”,并且格式正确。当我尝试追加(或插入)“Nate”时,“Nate”也以斜体显示。在运算符 +appendText()insertText() 之间,我运气不太好。

下面是脚本的相关部分。下面是整个事情。

如何将 3 个字符串附加在一起,并且只格式化中间部分?

注意:我注释掉了我尝试过的内容(Trial1Trial2 等)。我也开始HERE并将其用作指南。

感谢您提供的任何帮助!

相关部分:

  if (author1 != "") {

      var group1 = author1+author2+author3;
      var group2 = title2Italics+containerItalics;
      var group3 = contribution1+contribution2+contribution3+version+number+publisher+pubDate+location;

    //Only using the calculations below to determine the offset for insertText
      var group1Length = group1.length;
      var group2Length = group2.length;
      var offset = group1Length+group2Length
      Logger.log(group1Length);
      Logger.log(group2Length);
      Logger.log(offset);

  //Determines if italicizing is necessary
     if (group2.length > 0) {

      var addG1 = body.insertParagraph(0,group1)
      var addG2 = addG1.appendText(group2);
      var formatItalics = addG2.editAsText().setItalic(true);

      //var trial1 = addG2.editAsText().setItalic(true) + group3;       //does not return the contents of "group3"
      //var trial2 = formatItalics + group3;                            //does not return the contents of "group3"
      //var trial3 = formatItalics.insertText(offset,group3);           //Error: "Index (18) must be less than or equal to the content length (6)."
      //var trial4 = formatItalics.insertText(group2Length, group3);    //formats "group3" as well
      //var trial5 = formatItalics.appendText(group3);                  //formats "group3" as well

    }

    //If italicizing is NOT necessary
    else {

      var cite = body.insertParagraph(0,group1 + group3);

    } //ELSE STATEMENT ENDS HERE

  } //FIRST IF STATEMENT ENDS HERE

整个脚本:

function mlaBibTest() {

  // Sheet Information
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = SpreadsheetApp.setActiveSheet(ss.getSheetByName('test'));
  var startRow = 3;  
  var startCol = 21; 
  var numRows = sheet.getLastRow()-1;  
  var numCols = 14; 

  var dataRange = sheet.getRange(startRow, startCol, numRows, numCols);

// Document information
  var doc = DocumentApp.openById('13MlHq_uoO1rUF0RfdF_kBlLJjbGt4aDoOcSWef0V4zM');
  var body = doc.getBody();

  // Fetch values for each row in the SS Range.
  var cells = dataRange.getValues();

  for (var i = 0; i < cells.length; ++i) {

    var column = cells[i];
    var colU = column[0];
    var colV = column[1];           
    var colW = column[2];           
    var colX = column[3];           
    var colY = column[4];          
    var colZ = column[5];           
    var colAA = column[6];          
    var colAB = column[7];           
    var colAC = column[8];
    var colAD = column[9];
    var colAE = column[10];
    var colAF = column[11];
    var colAG = column[12];
    var colAH = column[13];


      var author1 = colU;
      var author2 = colV;
      var author3 = colW;
      var title1Quotes = colX;
      var title2Italics = colY;
      var containerItalics = colZ;
      var contribution1 = colAA;
      var contribution2 = colAB;
      var contribution3 = colAC;
      var version = colAD;
      var number = colAE;
      var publisher = colAF;
      var pubDate = colAG;
      var location = colAH;

  if (author1 != "") {

      var group1 = author1+author2+author3;
      var group2 = title2Italics+containerItalics;
      var group3 = contribution1+contribution2+contribution3+version+number+publisher+pubDate+location;

    //Only using the calculations below to determine the offset for insertText
      var group1Length = group1.length;
      var group2Length = group2.length;
      var offset = group1Length+group2Length
      Logger.log(group1Length);
      Logger.log(group2Length);
      Logger.log(offset);

  //Determines if italicizing is necessary
     if (group2.length > 0) {

      var addG1 = body.insertParagraph(0,group1)
      var addG2 = addG1.appendText(group2);
      var formatItalics = addG2.editAsText().setItalic(true);

      //var trial1 = addG2.editAsText().setItalic(true) + group3;       //does not return the contents of "group3"
      //var trial2 = formatItalics + group3;                            //does not return the contents of "group3"
      //var trial3 = formatItalics.insertText(offset,group3);           //Error: "Index (18) must be less than or equal to the content length (6)."
      //var trial4 = formatItalics.insertText(group2Length, group3);    //formats "group3" as well
      //var trial5 = formatItalics.appendText(group3);                  //formats "group3" as well

    }

    //If italicizing is NOT necessary
    else {

      var cite = body.insertParagraph(0,group1 + group3);

    } //ELSE STATEMENT ENDS HERE

  } //FIRST IF STATEMENT ENDS HERE

 } //FOR LOOP ENDS HERE

SpreadsheetApp.flush();

} // FUNCTION ENDS HERE

最佳答案

这是一个按照您的要求进行操作的简单示例。重要的是要记住,setItalics(true) 为所有新文本设置了一个持久设置,因此我们必须在之后将其设置回 false。

var doc = DocumentApp.getActiveDocument();
var body = doc.getBody();
var paragraph = body.insertParagraph(0, ""); //add paragparh at top of body.
var text1 = paragraph.appendText("Not Italics ");
var text2 = paragraph.appendText("Italics ");
text2.setItalic(true); //Everything after and including this will be italics
var text3 = paragraph.appendText("Not Italics");
text3.setItalic(false); //Everything after and including this will not be italics

>Not Italics Italics Not Italics

因此,如果您在构建段落时设置斜体,会更容易。

关于google-apps-script - 谷歌文档脚本: appendText/insertText Formatting,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48855672/

相关文章:

javascript - 在 Google Apps 脚本中返回具有合并列的某些行的范围

google-apps-script - 开发模式 - 其他用户制作的模板电子表格副本

google-docs - 编辑 google 表单源代码,同时将其保留在 google 环境中

google-sheets - 在 Google 电子表格中使用合并单元格执行查找

java - App Engine + Google 文档

google-docs - 如何获取谷歌文档的应用程序名称?

javascript - 使用 Google 云端硬盘图像替换 Google 文档表格单元格中的占位符文本标签

google-apps-script - Google 电子表格 - 如果有删除线则为行着色

regex - 如何在 Google Docs re2 表达式中筛选双引号?

javascript - Google Apps 脚本日历服务 : How to store and retrieve CalendarEvents using PropertiesService?