javascript - 根据列值将一张 Google 工作表拆分为多张工作表 - 替换重复工作表

标签 javascript google-apps-script google-sheets

这超出了我的知识水平,我希望得到帮助。下面的脚本有一些限制。此脚本检查区域选项卡是否存在,如果不存在,则源工作表中的区域数据将按该区域的名称复制到新选项卡。区域是源工作表上的第 24 列,数据从第 3 行开始,标题是第 2 行。

如果区域选项卡已存在,我希望将其删除,重新创建或使用当前数据重新填充,而不是跳过它。

function createSheets(){

const ss = SpreadsheetApp.getActiveSpreadsheet()
const sourceWS = ss.getSheetByName("Forecast (SQL) Validation")

const regions = sourceWS
  .getRange(3,24,sourceWS.getLastRow()-2,1)
  .getValues()
  .map(rng => rng[0])

const uniqueRegion = [ ...new Set(regions) ]

const currentSheetNames = ss.getSheets().map(s => s.getName())

let ws

uniqueRegion.forEach(region => {

  if(!currentSheetNames.includes(region)){

    ws = null
    ws = ss.insertSheet()
    ws.setName(region)
    ws.getRange("A2").setFormula(`=FILTER('Forecast (SQL) Validation'!A3:CR,'Forecast (SQL) Validation'!X3:X="${region}")`)
    sourceWS.getRange("A2:CR2").copyTo(ws.getRange("A1:CR1"))

}//If regions doesn't exist

})//forEach loop through the list of region

} //close createsheets functions

最佳答案

这样试试

function createSheets() {
  const ss = SpreadsheetApp.getActive()
  const ssh = ss.getSheetByName("Forecast (SQL) Validation");
  const regions = ssh.getRange(3, 24, ssh.getLastRow() - 2, 1).getValues().flat();
  const urA = [...new Set(regions)];
  const shnames = ss.getSheets().map(s => s.getName())
  let ws;
  urA.forEach(region => {
    let idx = shnames.indexOf(region);
    if (~idx) {
      ss.deleteSheet(ss.getSheetByName(shnames(idx)));//if it does exist delete it and create a new one
    }//if it does not exist the just create a new one
    ws = null;
    ws = ss.insertSheet(region);
    ws.getRange("A2").setFormula(`=FILTER('Forecast (SQL) Validation'!A3:CR,'Forecast (SQL) Validation'!X3:X="${region}")`)
    ssh.getRange("A2:CR2").copyTo(ws.getRange("A1:CR1"))
  })
}

说明:

循环遍历所有选项卡,如果该选项卡已经存在,则通过 deleteSheet 删除它在再次创建它之前,就像您对不存在的那些所做的那样..

关于javascript - 根据列值将一张 Google 工作表拆分为多张工作表 - 替换重复工作表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71459509/

相关文章:

javascript - 无法实现 60fps 动画

javascript - jquery 同位素版本 2 消息如果没有结果

javascript - 在 ES6 中使用扩展语法时使用默认参数?

google-apps-script - 一次调用电子表格即可编写静态值和公式

javascript - 搜索一列值中的单元格值以查找行号

javascript - 将时区名称转换为 GMT 偏移量的 Web 服务

javascript - Google Spreadsheet——通过脚本获取共享权限

google-sheets - 如何在 Google 表格中设置群组

javascript - 检查 jQuery 数据表中预选的行

google-apps-script - 当用户删除单元格内容时,如何获取单元格的oldValue?在这种情况下,e.oldValue 未定义