我已经创建(实际上,修改过)一个脚本,用于导出Google表格中特定范围的CSV文件。它运作良好:
function convertRangeToCsvFile_(csvFileName,delimiter) {
// Get the selected range in the spreadsheet
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheets()[0];
var ws = sheet.getRange("F3:G501");
try {
var data = ws.getValues();
var csvFile = undefined;
// Loop through the data in the range and build a string with the CSV data
if (data.length > 1) {
var csv = "";
for (var row = 0; row < data.length; row++) {
for (var col = 0; col < data[row].length; col++) {
if (data[row][col].toString().indexOf(delimiter) != -1) {
data[row][col] = "\"" + data[row][col] + "\"";
}
}
// Join each row's columns
// Add a carriage return to end of each row, except for the last one
if (row < data.length-1) {
csv += data[row].join(delimiter) + "\r\n";
}
else {
csv += data[row];
}
}
csvFile = csv;
}
return csvFile;
}
catch(err) {
Logger.log(err);
Browser.msgBox(err);
}
}
但是,我现在想要设置它,以便脚本迭代三个不同范围的单元格并将它们连接成一个大的长CSV。我尝试使用for
循环执行此操作,但是当我这样做时,脚本会返回错误:
TypeError:无法在对象0中找到函数getValues。
据我所知,这可能是某种范围问题,但我不能为我的生活找到任何有助于我解决它的事情。这是我破碎的代码:
function convertRangeToCsvFile_(csvFileName,delimiter) {
// Get the selected range in the spreadsheet
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheets()[0];
var ranges = [sheet.getRange("F3:G501"),sheet.getRange("H3:I501"),sheet.getRange("J3:K501")];
try {
for (var ws in ranges) {
var data = ws.getValues();
var csvFile = undefined;
// Loop through the data in the range and build a string with the CSV data
if (data.length > 1) {
var csv = "";
for (var row = 0; row < data.length; row++) {
for (var col = 0; col < data[row].length; col++) {
if (data[row][col].toString().indexOf(delimiter) != -1) {
data[row][col] = "\"" + data[row][col] + "\"";
}
}
// Join each row's columns
// Add a carriage return to end of each row, except for the last one
if (row < data.length-1) {
csv += data[row].join(delimiter) + "\r\n";
}
else {
csv += data[row];
}
}
csvFile = csv;
}
}
return csvFile;
}
catch(err) {
Logger.log(err);
Browser.msgBox(err);
}
}
我已经尝试调整for
循环开始和结束的位置(原来它没有进入var data = ws.getValues();
行,这当然会导致&#34;未定义&#34;错误。)
但是尽管我付出了最大的努力,但我无法找到任何可以解决这个问题的信息,这些信息是我(非常缺乏经验)的大脑可以解析的!
非常感谢任何输入。
答案 0 :(得分:1)
您将范围循环为对象而不是数组,因此您找到的第一个键是0
使用增量for循环循环:
var ws;
for (var w =0; w < ranges.length; w += 1) {
ws = ranges[w];
剩下的我还没有检查,但如果你没有改变,其他任何事都应该没问题。