批处理请求删除空行和列

发布于 2025-02-02 16:03:22 字数 1596 浏览 2 评论 0原文

我需要创建一个脚本,该脚本从指示的工作表中删除所有空行和列(在行/列的任何单元格中没有值),同时从1列/行开始 - 使用批处理更新。我找到了一个脚本在这里适合我的需要。

我已经像下面的那样修改了它,但是我在函数参数(可能还有其他事情)上做错了什么。


function clear(){

  const sheetName = "Parser"; // Please set the sheet name.
  
  const ss = SpreadsheetApp.getActiveSpreadsheet();
  const sh = ss.getSheetByName(sheetName);
  const sheetId = sh.getSheetValues;
var values = sh.getRange('B1:B').getValues();
  var requests = values.reduce((ar, value) => {
    var maxColumns = sh.getMaxColumns(); 
    var lastColumn = sh.getLastColumn();
    var maxRows = sh.getMaxRows(); 
    var lastRow = sh.getLastRow();
    if (lastRow == 0 && lastColumn == 0 && maxRows > 1 && maxColumns > 1) {
     ar.push({deleteDimension: {range: {sheetId: sheetId, dimension: "ROWS", startIndex: 1}}});
     ar.push({deleteDimension: {range: {sheetId: sheetId, dimension: "COLUMNS", startIndex: 1}}});
    }
Logger.log(ar);
   return ar;
  }, []);
    if (requests.length > 0) {
    Sheets.Spreadsheets.batchUpdate({requests: requests}, id);
  }
};

乞求帮助!

从:

to:

I need to create a script which deletes all empty rows and columns (with no value in any cell of the row/column) from indicated sheet starting from 1 column/row, at the same time - using batch update. I have found a script here and tried to suit it to my need.

I have modified it like below, but I do something wrong with function arguments (and probably something else).


function clear(){

  const sheetName = "Parser"; // Please set the sheet name.
  
  const ss = SpreadsheetApp.getActiveSpreadsheet();
  const sh = ss.getSheetByName(sheetName);
  const sheetId = sh.getSheetValues;
var values = sh.getRange('B1:B').getValues();
  var requests = values.reduce((ar, value) => {
    var maxColumns = sh.getMaxColumns(); 
    var lastColumn = sh.getLastColumn();
    var maxRows = sh.getMaxRows(); 
    var lastRow = sh.getLastRow();
    if (lastRow == 0 && lastColumn == 0 && maxRows > 1 && maxColumns > 1) {
     ar.push({deleteDimension: {range: {sheetId: sheetId, dimension: "ROWS", startIndex: 1}}});
     ar.push({deleteDimension: {range: {sheetId: sheetId, dimension: "COLUMNS", startIndex: 1}}});
    }
Logger.log(ar);
   return ar;
  }, []);
    if (requests.length > 0) {
    Sheets.Spreadsheets.batchUpdate({requests: requests}, id);
  }
};

Begging for help!

From:
enter image description here

to:
enter image description here

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

囚你心 2025-02-09 16:03:22

尝试:

function clean() {

  const sheetName = "Parser"
  const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(sheetName)

  const cleanRows = sheet.getDataRange()
                         .getValues()
                         .filter(row => !row.every(cell => cell === ``))

  const cleanCols = cleanRows[0].map((_, index) => cleanRows.flatMap(row => row[index]))
                                .filter(col => !col.every(cell => cell === ``))

  const values = cleanCols[0].map((_, index) => cleanCols.flatMap(row => row[index]))

  sheet.getDataRange().clearContent()
  sheet.getRange(1, 1, values.length, values[0].length).setValues(values)

  if (sheet.getLastRow() !== sheet.getMaxRows()) sheet.deleteRows(sheet.getLastRow()+1, sheet.getMaxRows()-sheet.getLastRow())
  if (sheet.getLastColumn() !== sheet.getMaxColumns()) sheet.deleteColumns(sheet.getLastColumn()+1, sheet.getMaxColumns()-sheet.getLastColumn())
      
}

这将滤除所有空行,旋转数组,过滤出所有空的“列”,然后旋转阵列并更新纸板。

function clear() {
    
  const sheetName = "Parser"
  const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(sheetName)
    
  sheet.getRange(2, 1, sheet.getLastRow()-1, sheet.getLastColumn()).clearContent()

}

让我知道这是否对您有用!

clean()结果:

“在此处输入图像描述”

”在此处输入图像描述”

Try:

function clean() {

  const sheetName = "Parser"
  const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(sheetName)

  const cleanRows = sheet.getDataRange()
                         .getValues()
                         .filter(row => !row.every(cell => cell === ``))

  const cleanCols = cleanRows[0].map((_, index) => cleanRows.flatMap(row => row[index]))
                                .filter(col => !col.every(cell => cell === ``))

  const values = cleanCols[0].map((_, index) => cleanCols.flatMap(row => row[index]))

  sheet.getDataRange().clearContent()
  sheet.getRange(1, 1, values.length, values[0].length).setValues(values)

  if (sheet.getLastRow() !== sheet.getMaxRows()) sheet.deleteRows(sheet.getLastRow()+1, sheet.getMaxRows()-sheet.getLastRow())
  if (sheet.getLastColumn() !== sheet.getMaxColumns()) sheet.deleteColumns(sheet.getLastColumn()+1, sheet.getMaxColumns()-sheet.getLastColumn())
      
}

This will filter out all empty rows, rotate the array, filter out all empty 'columns', then rotate the array back and update the sheet.

function clear() {
    
  const sheetName = "Parser"
  const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(sheetName)
    
  sheet.getRange(2, 1, sheet.getLastRow()-1, sheet.getLastColumn()).clearContent()

}

Let me know if this works for you!

Clean() Result:

enter image description here

enter image description here

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文