Google Apps 脚本 .getLastColumn();特定行的?
Google Apps Script .getLastColumn(); of a specific row?
我基本上想获取电子表格第一行的最后一列。无论我尝试什么,它都会记录最后一列整个电子表格的数据。我知道这很简单,但运气不好。
我搜索了所有地方,但我尝试的所有方法都不起作用。任何帮助是极大的赞赏。
非常感谢!
布兰登
没有内置函数可以执行此操作,但您可以自己编写一个函数来执行此操作。
例如,使用 getRange() 和 getLastColumn() 获取您感兴趣的行直到最后一个可能的数据列,然后使用 getValues() 获取该行中的所有单元格。最后,遍历单元格数组(由 getValues() 返回)并跟踪最后一个具有值的索引。
https://developers.google.com/apps-script/reference/spreadsheet/sheet#getRange()
https://developers.google.com/apps-script/reference/spreadsheet/range#getValues()
这里有一些代码可以帮助您入门:
function getLastNonEmptyCellInRow() {
var rowToCheck = 2;
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getActiveSheet();
var maxColumns = sheet.getLastRow();
var rowData = sheet.getRange(rowToCheck, 1, 1, maxColumns).getValues();
rowData = rowData[0]; //Get inner array of two dimensional array
var rowLength = rowData.length;
for (var i = 0; i < rowLength; i++) {
var thisCellContents = rowData[i];
Logger.log('thisCellContents: ' + thisCellContents);
if (thisCellContents === "") {
Logger.log(i);
return i + 1; //Pass the count plus one, which is the last column with data
}
}
}
function getLastColNum(rowNum)
{
// Get the values of the row's (unbounded by column number) range.
var vals =
SpreadsheetApp.getActiveSpreadsheet().getActiveSheet()
.getRange(rowNum +":"+ rowNum)
.getValues()[0],
lastColNum = vals.length
;
// Decrement while popping off any trailing empty text ("") cells.
while(!vals.pop())
{ --lastColNum; }
return(lastColNum);
}
从 excel 工作簿对象获取 sheet 使用 getSheetAt(sheetNumber);然后使用 sheet object getRow(0);然后使用 cellIterator() 可以迭代到行的最后一列。
使用 XSSFWorkBook 的示例
XSSFWorkBook wb=new XSSFWorkBook(FileInputStream object);//将excel文件路径传给FileInputStream得到的对象Sheet sh=wb.getSheetAt(0) or wb.getSheet("sheet name");行行=sh.getRow(0);迭代器 cit=row.cellIterator();单元格; while(cit.hasNext()) { 细胞=cit.next(); }
当您退出 while 循环时,您将在 'cell' 变量中拥有最后一个单元格对象
Sheet class 支持 getLastColumn() 到 return 包含内容的最后一列。
https://developers.google.com/apps-script/reference/spreadsheet/sheet#getLastColumn()
范围有一个 getLastColumn() 函数,但它是范围的最后一列,不一定是包含数据的最后一列。
https://developers.google.com/apps-script/reference/spreadsheet/range#getLastColumn()
要获取包含内容的最后一列,遍历最后 Sheet 列的行回到非空单元格。
/**
* Get last column with content in row
* @param {Sheet} sheet
* @param {integer} row
* @return {integer} last column with content, 0 if none found
*/
function getLatColInRow(sheet, row = 1) {
let lastColumn = sheet.getLastColumn();
let values = sheet.getRange(row,1,1,lastColumn).getValues()[0];
while ((values[lastColumn-1] == "") && (lastColumn>0)) {
lastColumn --;
}
return lastColumn;
}
我基本上想获取电子表格第一行的最后一列。无论我尝试什么,它都会记录最后一列整个电子表格的数据。我知道这很简单,但运气不好。
我搜索了所有地方,但我尝试的所有方法都不起作用。任何帮助是极大的赞赏。 非常感谢! 布兰登
没有内置函数可以执行此操作,但您可以自己编写一个函数来执行此操作。
例如,使用 getRange() 和 getLastColumn() 获取您感兴趣的行直到最后一个可能的数据列,然后使用 getValues() 获取该行中的所有单元格。最后,遍历单元格数组(由 getValues() 返回)并跟踪最后一个具有值的索引。
https://developers.google.com/apps-script/reference/spreadsheet/sheet#getRange()
https://developers.google.com/apps-script/reference/spreadsheet/range#getValues()
这里有一些代码可以帮助您入门:
function getLastNonEmptyCellInRow() {
var rowToCheck = 2;
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getActiveSheet();
var maxColumns = sheet.getLastRow();
var rowData = sheet.getRange(rowToCheck, 1, 1, maxColumns).getValues();
rowData = rowData[0]; //Get inner array of two dimensional array
var rowLength = rowData.length;
for (var i = 0; i < rowLength; i++) {
var thisCellContents = rowData[i];
Logger.log('thisCellContents: ' + thisCellContents);
if (thisCellContents === "") {
Logger.log(i);
return i + 1; //Pass the count plus one, which is the last column with data
}
}
}
function getLastColNum(rowNum)
{
// Get the values of the row's (unbounded by column number) range.
var vals =
SpreadsheetApp.getActiveSpreadsheet().getActiveSheet()
.getRange(rowNum +":"+ rowNum)
.getValues()[0],
lastColNum = vals.length
;
// Decrement while popping off any trailing empty text ("") cells.
while(!vals.pop())
{ --lastColNum; }
return(lastColNum);
}
从 excel 工作簿对象获取 sheet 使用 getSheetAt(sheetNumber);然后使用 sheet object getRow(0);然后使用 cellIterator() 可以迭代到行的最后一列。 使用 XSSFWorkBook 的示例 XSSFWorkBook wb=new XSSFWorkBook(FileInputStream object);//将excel文件路径传给FileInputStream得到的对象Sheet sh=wb.getSheetAt(0) or wb.getSheet("sheet name");行行=sh.getRow(0);迭代器 cit=row.cellIterator();单元格; while(cit.hasNext()) { 细胞=cit.next(); }
当您退出 while 循环时,您将在 'cell' 变量中拥有最后一个单元格对象
Sheet class 支持 getLastColumn() 到 return 包含内容的最后一列。
https://developers.google.com/apps-script/reference/spreadsheet/sheet#getLastColumn()
范围有一个 getLastColumn() 函数,但它是范围的最后一列,不一定是包含数据的最后一列。
https://developers.google.com/apps-script/reference/spreadsheet/range#getLastColumn()
要获取包含内容的最后一列,遍历最后 Sheet 列的行回到非空单元格。
/**
* Get last column with content in row
* @param {Sheet} sheet
* @param {integer} row
* @return {integer} last column with content, 0 if none found
*/
function getLatColInRow(sheet, row = 1) {
let lastColumn = sheet.getLastColumn();
let values = sheet.getRange(row,1,1,lastColumn).getValues()[0];
while ((values[lastColumn-1] == "") && (lastColumn>0)) {
lastColumn --;
}
return lastColumn;
}