Google 文档脚本:appendText/insertText 格式化

Google Docs Script: appendText/insertText Formatting

如何将 appendText()insertText() 用于 Google 文档脚本并保持格式?

我想将附加字符串的中间部分 (group2) 格式化为斜体,同时将其他部分 (group1group3) 保留为普通文本。例如:嗨 我叫 内特。

我可以引入 "Hi" 并附加“我的名字是 ”,它的格式正确。当我尝试附加(或插入)"Nate," "Nate" 时斜体显示为 well.Between 运算符 +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

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