Google文档脚本:appendText / insertText格式

时间:2018-02-18 19:25:12

标签: google-apps-script google-docs

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

我想用斜体格式化附加字符串的中间部分(group2),而将其他部分(group1group3)保留为普通文本。例如:您好我的名字是 Nate。

我可以输入“嗨”并附加“我的名字是”并且格式正确。当我尝试追加(或插入)“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

1 个答案:

答案 0 :(得分:1)

这是做你问的一个简单的例子。重要的是要记住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
  

&gt;非斜体斜体非斜体

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