我正在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。表中的值
实际上电子表格是空的
答案 0 :(得分:0)
0
表具有4行和1列。
Just, Cells', List item with, Values From Table
。我可以像上面那样理解。如果我的理解是正确的,那么该修改如何?
TrueAnswersFile.getTable
和TrueAnswersTable.getNumRows
。getValue()
中的TrueAnswersTable.getCell(1, i).getValue()
。new
中的this.getTable = new function()
。getCell(1, i)
中的TrueAnswersTable.getCell(1, i)
从第2行的“ B”列中检索值。
getCell(i - 1, 0)
。但是在此修改中,索引的开头是0
。因此,您可以使用getCell(i, 0)
。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
}