【发布时间】:2014-10-15 15:36:12
【问题描述】:
我刚刚开始使用 Google Apps 脚本来管理我正在处理的项目的一些工作表,我是 Javascript 新手,所以如果我的代码中有任何咆哮,请放轻松!
我们有一个名为 forms2mobile 的应用程序,它可以捕获数据并将其放入 Google 电子表格中。它实际上会根据您使用应用程序的哪个部分将不同的数据放入不同的工作表中。
我编写了一个脚本,该脚本从一张表(源)中提取所有数据,并将仅某些列放入第二张表(目标)中。然后它会从源中删除所有行,并从目标中删除所有空白行。
我遇到的问题是从目标中删除空白行。通常,目的地的底部会有空行,而我拥有的代码只会删除包含数据的范围内的空行。所以我总是在底部留下空行。
然后,目标工作表将用作 forms2mobile 的数据源,这当然对空行不满意。
我找到了 getMaxRows() 类,但我不确定如何实现它。如果有人能提出任何建议,那就太好了。
干杯 保罗
function NEW_copyColumnNumbers( ) {
var spreadsheet_source = SpreadsheetApp.openById('1a89ZIUcy-8168D1damCV3Q9Ix0arQn9jGS6pgp');
var spreadsheet_target = SpreadsheetApp.openById('1GQiLt9utSH_6CV__oJwmcLOkI4E9iNIRPWU7Xr');
var range_input = spreadsheet_source.getRange("A2:CC407");
var range_output = spreadsheet_target.getRange("A"+(spreadsheet_target.getLastRow()+1));
var keep_columns = [66,66,10,11,12,13,14,23,26,31,69,71,74,75,80];
copyColumnNumbers(range_input, range_output, keep_columns);
clearEmptyRows();
clearSourceData();
}
function copyColumnNumbers( range_input, range_output, columns_keep_num ) {
// Create an array of arrays containing the values in the input range.
var range_values = range_input.getValues();
// Loop through each inner array.
for ( var i = 0, row_count = range_values.length; i < row_count; i++ ) {
// Loop through the indices to keep and use these indices to
// select values from the inner array.
for ( j = 0, col_keep_count = columns_keep_num.length; j < col_keep_count; j++ ) {
// Capture the value to keep
var keep_val = range_values[i][columns_keep_num[j]];
// Write the value to the output using the offset method of the output range argument.
range_output.offset(i,j).setValue(keep_val);
}
}
}
function clearEmptyRows() {
var ss = SpreadsheetApp.openById('1GQiLt9utSH_6CV__oJwmcLOkI4E9iNIRPWU7Xr');
var s = ss.getActiveSheet();
var values = s.getDataRange().getValues();
nextLine: for( var i = values.length-1; i >=0; i-- ) {
for( var j = 0; j < values[i].length; j++ )
if( values[i][j] != "" )
continue nextLine;
s.deleteRow(i+1);
}
//I iterate it backwards on purpose, so I do not have to calculate the indexes after a removal
}
function clearSourceData() {
var ss = SpreadsheetApp.openById('1a89ZIUcy-8168D1damCV3Q9Ix0arQn9jGS6pgp');
var s = ss.getActiveSheet();
var data = s.getDataRange().getValues();
for(var n =data.length+1 ; n<0 ; n--){
if(data[n][0]!=''){n++;break}
}
s.deleteRows(2, (s.getLastRow()-1));
}
【问题讨论】:
标签: javascript google-apps-script google-sheets