【问题标题】:How do I bold one line in a Google Docs Script?如何在 Google Docs Script 中加粗一行?
【发布时间】:2023-03-28 19:03:01
【问题描述】:

我正在编写一个脚本来解析 Google Sheet 并在 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;

【问题讨论】:

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


    【解决方案1】:

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

    这是一个基本的示例代码来展示它是如何工作的:
    (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";
    //
    

    示例随机数据结果:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-12-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多