如何将文件夹中每个文件的相同范围合并到主工作表上
How can I merge Same Range from each file in a folder onto a master sheet?
我以这种方式修改了代码...它从所有工作表中收集数据并仅找到具有数据的行,但是现在我在每次传递时修改范围时遇到问题,以便它等于具有值的行数(找到(值[行][0] != ''))。 我放了一个???在我试图拥有可变高度的地方。
function getAllData() {
var folder = DocsList.getFolderById("folderid");
var contents = folder.getFiles();
Logger.log("file length: " + contents.length);
var file;
var data;
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Base")
sheet.clearContents();
var numOfFiles = contents.length;
for (var i = 0; i < numOfFiles; i++) {
file = contents[i];
Logger.log("count: " + i);
var theFileType = file.getFileType();
Logger.log("theFileType: " + theFileType);
if (theFileType==DocsList.FileType.SPREADSHEET) {
var sheet2 = SpreadsheetApp.open(file).getSheetByName("Sheet 1");
var lastLine = sheet2.getLastRow();
var values = sheet2.getRange('A3:J').getValues();
var formulas = sheet2.getRange('A3:J').getFormulas();
var data = [];
for(var row = 0 ; row < (values).length ; row++){
var lastrow = sheet.getLastRow()+1;
if (values[row][0] != '') {
for(var col = 0 ; col < formulas[row].length ; col++){
if(formulas[row][col] != '')
{values[row][col] = formulas[row][col]};
data.push(values[row]);}
if(data.length > 0)
sheet.getRange(lastrow, 1, ???, data[0].length).setValues(data);
}
}
};
}}
您使用的是getValue()
而不是getValues()
(末尾带有字母"s")
var onecell = posheet.getRange('B4').getValue();
文档指出:
getValue() - 返回区域中左上角单元格的值。
getRange()
的参数有点棘手,没有很好的文档记录.
例如:
getRange(2, 3, 6, 4)
获取从 C2 到 G8 的范围。 弄清楚了。 第一个数字是数字 2,用于第 2 行。第二个数字是 3,用于第三列(即 C)。 第三个和第四个数字相对于前两个数字。
此外,您正在使用:appendRow([array])
它使用数组作为参数。 因此,您必须确保数据采用数组的形式,或使用其他形式。
以下是getValues的链接:
谷歌文档 - getValues
示例是以下代码:
// The code below will get the values for the range C2:G8
// in the active spreadsheet. Note that this will be a javascript array.
var values = SpreadsheetApp.getActiveSheet().getRange(2, 3, 6, 4).getValues();
Logger.log(values[0][0]);
这是似乎有效的代码:
function getAllData() {
var folder = DocsList.getFolderById("Your file ID");
var contents = folder.getFiles();
Logger.log("file length: " + contents.length);
var file;
var data;
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet1")
sheet.clearContents();
sheet.appendRow(["Value from Sheet One", "Range of values from Sheet Two"]);
var numOfFiles = contents.length;
for (var i = 0; i < numOfFiles; i++) {
file = contents[i];
Logger.log("count: " + i);
//Reset to null on every iteration
var onecell = null;
var theRange = null;
var theFileType = file.getFileType();
Logger.log("theFileType: " + theFileType);
if (theFileType==DocsList.FileType.SPREADSHEET) {
var sheet1 = SpreadsheetApp.open(file).getSheetByName("Sheet1");
var sheet2 = SpreadsheetApp.open(file).getSheetByName("Sheet2");
// The code below will get the values for the range A3:A9
// in the active spreadsheet. Note that this will be a javascript array.
onecell = sheet1.getRange('B4').getValue();
theRange = sheet2.getRange(1,3,1,6).getValues();
Logger.log('onecell: ' + onecell);
Logger.log('onecell[0][0]: ' + onecell[0][0]);
Logger.log('theRange: ' + theRange)
Logger.log('theRange[0][0]: ' + theRange[0][0])
var multipleValues = [theRange[0][0], theRange[0][1], theRange[0][2], theRange[0][3], theRange[0][4]];
Logger.log('multipleValues: ' + multipleValues);
sheet.appendRow([onecell, "'" + multipleValues]);
};
}
}
在第一列中,它只在工作表单元格中输入一个值。 在第二列中,单元格从行中获取放入其中的多个值。 换句话说,和整行值,并合并并放入一个单元格中。 我认为这就是您想要从代码中得到的。
如果您尝试将数组放入电子表格单元格中,则它显示的内容类似于对象,而不是将值数组显示为文本。 所以我在值前面加上一个引号,这样单元格格式就会默认为文本。
相关文章:
- JQuery合并了keyup和focusout两个函数
- 正在全局范围中查找JavaScript函数
- 如何通过数组更新角度子范围
- JSON重构(合并内容)与javascript
- 如何使用ngrepeat和双向绑定获得指令的隔离范围
- HTML范围:动态设置值属性
- Javascript-根据赋值顺序,按键合并对象数组
- "实例范围”;TypeScript类的getter/setter
- jquery日期选择器年份范围默认值
- Jpgraph:如何手动设置X轴和Y轴的范围
- 合并两个数组,重新调整循环js
- 在对象数组中查找多个值的d3范围
- 如何合并不同集合的游标并按日期排序
- 动态加载angularjs并生成控制器和范围
- 合并TinyMCE(jQuery插件)文件
- 如何通过谷歌应用程序脚本从谷歌文档中的位置确定命名范围
- 在Materialize Calendar中设置年份范围
- 将来自多个控制器的 AngularJS 范围对象合并到一个对象中
- 如何将文件夹中每个文件的相同范围合并到主工作表上
- 使用Angularjs范围合并两个数组