如何在Apps脚本中的文档中查找和选择表格?

时间:2019-06-10 20:57:53

标签: javascript google-apps-script

我正在Google Apps脚本中创建一个函数。此功能的目的是从文档中选择表格并将值移动到创建的电子表格中。问题是我无法从文档中获取表(调试可以,但是日志将所选表显示为空{})。

    function addAnswersTable() {
    var File = function(Path) { // File object constructor
        this.Path = Path;
        this.Doc = DocumentApp.openById(this.Path);
        this.getTable = new function()
        // This function defines 
        // a getTable method to get 
        // the first table in the Document
        {
            if (this.Doc != undefined) {
                var range = this.Doc.getBody();
                var tables = range.getTables();
                var table = tables[0];
                return table;
            }
        }
    }
    // Creating Excel Table, where first column
    // of selected table should be moved
    var Table = SpreadsheetApp.create("AnswersTable");
    // Creating new File object
    var TrueAnswersFile = new File
    ('1_ne9iBaK-Z36yUYrISr3gru3zw3Qdsneiu14sWnjn34');
    // Calling getTable method to get the table placed in File 
    var TrueAnswersTable = TrueAnswersFile.getTable;
    for (var i = 1; i <= TrueAnswersTable.getNumRows; i++) {
        // Filling spreadsheet "A" column with cells'
        // values ​​from table stored in File
        Table.getActiveSheet().getRange("A" + i).setValue(TrueAnswersTable.getCell(1, i).getValue());
    };
    }

除了电子表格列“ A”中的输出外,我是这样的:

A1。只是
A2。细胞的
A3。列表项
A4。表中的值

实际上电子表格是空的

1 个答案:

答案 0 :(得分:0)

  • 您要从Google文档的“ A”列中检索值,然后将值放入创建的电子表格的“ A”列中。
  • 文档中的索引0表具有4行和1列。
    • 每行的值为Just, Cells', List item with, Values From Table

我可以像上面那样理解。如果我的理解是正确的,那么该修改如何?

修改点:

  • 在您的脚本中,该方法未用作功能。这样,该方法将无法运行。
    • 例如TrueAnswersFile.getTableTrueAnswersTable.getNumRows
  • 未使用任何方法。
    • 例如,getValue()中的TrueAnswersTable.getCell(1, i).getValue()
  • 不需要new中的
  • this.getTable = new function()
  • 在您的脚本中,getCell(1, i)中的TrueAnswersTable.getCell(1, i)从第2行的“ B”列中检索值。
    • 如果要从“ A”列的第1行中检索值,请修改为getCell(i - 1, 0)。但是在此修改中,索引的开头是0。因此,您可以使用getCell(i, 0)
  • 在for循环中使用setValue()时,处理成本会很高。您可以使用setValues()代替它。

当以上几点反映到您的脚本中时,它如下所示。

修改后的脚本:

function addAnswersTable() {
  var File = function(Path) {
    this.Path = Path;
    this.Doc = DocumentApp.openById(this.Path);
    this.getTable = function() { // Modified
      if (this.Doc != undefined) {
        var range = this.Doc.getBody();
        var tables = range.getTables();
        var table = tables[0];
        return table;
      }
    }
  }
  var Table = SpreadsheetApp.create("AnswersTable");
  var TrueAnswersFile = new File('1_ne9iBaK-Z36yUYrISr3gru3zw3Qdsneiu14sWnjn34');
  var TrueAnswersTable = TrueAnswersFile.getTable();
  var values = []; // Added
  for (var i = 0; i < TrueAnswersTable.getNumRows(); i++) { // Modified
    values.push([TrueAnswersTable.getCell(i, 0).getText()]) // Modified
  };
  Table.getRange("A1:A" + values.length).setValues(values); // Added
}

参考文献: