使用应用程序脚本对Google文档中的表格行进行编号

Number table rows in Google Doc using Apps Script

本文关键字:表格 编号 文档 应用程序 脚本 Google      更新时间:2023-09-26

我正在编写一个脚本,该脚本接受文本并将每个段落放在一个编号的表格单元格中。我遇到了一个问题,脚本将每个换行符都算作一个段落,这意味着我的表要么有空单元格,要么编号错误。

以下是工作脚本(减去行编号):

function formatArticle() {
  var doc = DocumentApp.getActiveDocument()
  var body = doc.getBody(); 
  // Get the paragraphs
  var paras = body.getParagraphs();
  // Add a table to fill in with copied content
  var addTable = body.appendTable();
  for (var i=0;i<paras.length;++i) {
    // If the paragraph is text, add a table row and insert the content.
    if(i % 2 == 0) {
      var tr = addTable.appendTableRow();
      var text = paras[i].getText();
      // Number the table rows as they're added in a cell to the left.
      for(var j=0;j<2;j++) {
        if(j == 0) {
          var td = tr.appendTableCell(i);
          } else {
            var td = tr.appendTableCell(text);
          }
        }
      }
    // Shrink left column.
    addTable.setColumnWidth(0, 65);
    // Delete the original text from the document.
    paras[i].removeFromParent();
  }
}

这里有一个演示谷歌文档,如果有帮助的话,您可以在不设置新文档的情况下查看文本格式。

逻辑

您应该做的是迭代每个段落,并检查该段落是否包含文本。如果是,则添加一行并将文本放入其中,否则跳过该段并跳到下一段。

实施

function formatArticle(){ 
    var doc = DocumentApp.getActiveDocument()
    var body = doc.getBody(); 
    // Get the paragraphs
    var paras = body.getParagraphs();
    var addTable = body.appendTable();
    //paragraph index 
    var pIndex = 0;
    for(var i = 0 ; i < paras.length ; i++){
        var para = paras[i];
        var paraStr = para.editAsText().getText();
        // if there is string content in paragraph
        if(paraStr.length){
            var tr = addTable.appendTableRow();
            var td1 = tr.appendTableCell(pIndex);
            var td2 = tr.appendTableCell(paraStr);
            pIndex ++;
        }
        para.removeFromParent();
    }
    // Shrink left column.
    addTable.setColumnWidth(0, 65);
}

在这里,您从段落var paraStr = para.editAsText().getText();中获取字符串,并检查内容是否存在if(paraStr.length)。如果是,则创建一行,在其中插入段落索引和段落文本。

试试这个:tr.appendTableCell(i/2 +1)

// Number the table rows as they're added in a cell to the left.
  for(var j=0;j<2;j++) {
    if(j == 0) {
      var td = tr.appendTableCell(i/2 +1);
      } else {
        var td = tr.appendTableCell(text);
      }
    }
  }