如何在Google文档脚本中加粗一行?

时间:2014-11-26 20:23:35

标签: javascript google-apps-script google-docs-api google-spreadsheet-api

我正在编写一个脚本来解析Google表格,并在Doc上很好地格式化单元格。我希望第1列的单元格数据始终为粗体,第6列的单元格数据始终为斜体。问题是,在向文档正文附加一个段落后,属性更改将应用​​于整个文档。有没有办法在将单元数据附加到文档主体之前加粗/斜体化单元数据?

function readRows() {
  var sheet = SpreadsheetApp.getActiveSheet();
  var rows = sheet.getDataRange();
  var numRows = rows.getNumRows();
  var numCols = rows.getNumColumns();
  var values = rows.getValues();

  var doc = DocumentApp.create("Smogon Formatted");
  var docBody = doc.getBody();

  for (var i = 2; i <= numRows; i++) {

    for (var j = 1; j <= numCols; j++){

        var cellData = rows.getCell(i, j).getValue()

        // Format data based on column
        if (j == 1) {
          docBody.appendParagraph(cellData).editAsText().setBold(true);
        } else if (j == 2 || j == 3) { 
          var imgFormula = rows.getCell(i, j).getFormula();
          var imgUrl = getImageUrl(imgFormula);
          docBody.appendParagraph("[img]" + imgUrl + "[/img]");
        } else if (j == 6) { 
          docBody.appendParagraph(cellData).editAsText().setItalic(true);
        } else { 
          docBody.appendParagraph(cellData);
        }
    }
  }
};

编辑:尝试#2,使用setAttributes方法

function readRows() {
  var sheet = SpreadsheetApp.getActiveSheet();
  var rows = sheet.getDataRange();
  var numRows = rows.getNumRows();
  var numCols = rows.getNumColumns();
  var values = rows.getValues();

  var doc = DocumentApp.create("Smogon Formatted");
  var docBody = doc.getBody();

  for (var i = 2; i <= numRows; i++) {

    for (var j = 1; j <= numCols; j++){

        var cellData = rows.getCell(i, j).getValue()

        // Format data based on column
        if (j == 1) {
          docBody.appendParagraph(cellData).setAttributes(style1);
        } else if (j == 2 || j == 3) { 
          var imgFormula = rows.getCell(i, j).getFormula();
          var imgUrl = getImageUrl(imgFormula);
          docBody.appendParagraph("[img]" + imgUrl + "[/img]");
        } else if (j == 6) { 
          docBody.appendParagraph(cellData).setAttributes(style2);
        } else { 
          docBody.appendParagraph(cellData);
        }
    }
  }
};

// Style definitions as global variables
var style1= {};
style1[DocumentApp.Attribute.BOLD] = true;
var style2= {};
style2[DocumentApp.Attribute.ITALIC] = true;

1 个答案:

答案 0 :(得分:2)

如果您使用样式属性,您可以非常轻松地为每个段落指定样式,您实际上可以为任何文档元素执行...

这是一个显示其工作原理的基本示例代码:
doc here

function exportToDoc(){
  var doc = DocumentApp.openById('16i----L53WTDpzuLyhqQQ_E');// or create a new doc (but not while you test it :-)
  var body = doc.getBody();
  var sheet = SpreadsheetApp.getActiveSheet();
  var values = sheet.getDataRange().getValues();
  for (var i in values){
    var rowData = values[i].join(' + ');
    if (i == 1) {
      body.appendParagraph(rowData).setAttributes(style2);
    } else if (i == 2 ) { 
      body.appendParagraph(rowData).setAttributes(style1)
    }
  }
  doc.saveAndClose();
}

// Style definitions as global variables
  var style1 = {};// style example 1
  style1[DocumentApp.Attribute.FONT_SIZE] = 10;
  style1[DocumentApp.Attribute.FONT_FAMILY] = DocumentApp.FontFamily.CONSOLAS;
  style1[DocumentApp.Attribute.FOREGROUND_COLOR] = "#444400";
  var style2 = {};// style example 2
  style2[DocumentApp.Attribute.FONT_SIZE] = 16;
  style2[DocumentApp.Attribute.FONT_FAMILY] =DocumentApp.FontFamily.ARIAL_NARROW;
  style2[DocumentApp.Attribute.FOREGROUND_COLOR] = "#005500";
//

示例随机数据结果:

enter image description here