当前位置: 首页 > 知识库问答 >
问题:

根据其中一张自动排序2张

田德运
2023-03-14

我正在运行一个包含多张表的电子表格,在Sheet3中输入一些数据并运行一个自动排序代码,该代码按D列升序排序。

表3示例|表1示例

Sheet1中的“名称”和“位置”是从Sheet3导入的,因此当Sheet3进行排序时,它们会交换位置,但是,问题是从D到F(Sheet1)的信息没有交换,它将为错误的人显示。

这是我正在使用的脚本:
对其进行了轻微修改,以适用于特定的工作表,因为我当时不需要对整个文档进行自动排序。

/*
 * @author Mike Branski (@mikebranski)
 * @link https://gist.github.com/mikebranski/285b60aa5ec3da8638e5
 */

var SORT_COLUMN_INDEX = 4;
var ASCENDING = true;
var NUMBER_OF_HEADER_ROWS = 2;
var SHEET_NAME = 'Sheet3';
var activeSheet;

function autoSort(sheet) {
  var s = SpreadsheetApp.getActiveSheet();
  if (s.getName() == SHEET_NAME) {
    var range = sheet.getDataRange();
    if (NUMBER_OF_HEADER_ROWS > 0) {
      range = range.offset(NUMBER_OF_HEADER_ROWS, 0, (range.getNumRows() - NUMBER_OF_HEADER_ROWS));
    }

    range.sort( {
      column: SORT_COLUMN_INDEX,
      ascending: ASCENDING
    } );
  }
}

function onEdit(event) {
  var s = SpreadsheetApp.getActiveSheet();
  if (s.getName() == SHEET_NAME) {
    var editedCell;
    activeSheet = SpreadsheetApp.getActiveSheet(); 
    editedCell = activeSheet.getActiveCell(); 
    if (editedCell.getColumn() == SORT_COLUMN_INDEX) {
      autoSort(activeSheet);
    }
  }
}

function onOpen(event) {
  var s = SpreadsheetApp.getActiveSheet();
  if (s.getName() == SHEET_NAME) {
    activeSheet = SpreadsheetApp.getActiveSheet();
    autoSort(activeSheet);
  }
}

function onInstall(event) {
  onOpen(event);
}

所以基本上,当我编辑Sheet3并进行自动排序时,我希望Sheet1中从D到F的行与来自Sheet3的重新定位一起进行。我希望我能正确解释我想要什么。

我试图让它工作,但没有成功;我想不出正确的方法,尤其是由于Sheet1表的范围不同。

共有1个答案

强化
2023-03-14

我想出了如何解决这个问题,所以我将在这里发布代码。基本上,每当您编辑您在Sheet3(主表)中选择排序的列时,它将首先在Sheet1(目标表)中复制您在A中所做的更改

我用了A

// Master Sheet Settings (Copy ranges must be similar in size)
var msName = 'Master Sheet';
var msSortCol = 4;  // which column to trigger the sorting when you edit
var msSkipRows = 6; // how many rows to skip, if you have header rows
var msCopyRange = 'A7:B51'; // the range you want to copy

// Target Sheet Settings
var tsSortCol = 3;
var tsSkipRows = 10;
var tsName = 'Target Sheet'; 
var tsCopyRange = 'A11:B55';

var sortAscending = true;
var activeSheet;

function onEdit() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var editedCell = ss.getActiveRange().getColumnIndex();

  if (ss.getSheetName() == msName) {
    activeSheet = SpreadsheetApp.getActiveSheet();
  if (editedCell == msSortCol) {
    copyRow();
    autoSort(activeSheet);
    }
  } 
}

function copyRow() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheetByName(msName);
  var values = sheet.getRange(msCopyRange).getValues();
  ss.getSheetByName(tsName).getRange(tsCopyRange).setValues(values);
  SpreadsheetApp.flush();
}

function autoSort() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var msheet = ss.getSheetByName(msName);
  var tsheet = ss.getSheetByName(tsName);
  var mrange = msheet.getDataRange();
  var trange = tsheet.getDataRange();

  if (ss.getSheetName() == msName) {
    if (msSkipRows > 0) {
      mrange = mrange.offset(msSkipRows, 0, (mrange.getNumRows() - msSkipRows));
    } 
    if (tsSkipRows > 0) {
      trange = trange.offset(tsSkipRows, 0, (trange.getNumRows() - tsSkipRows));
    }

    mrange.sort({ column: msSortCol, ascending: sortAscending });
    trange.sort({ column: tsSortCol, ascending: sortAscending });
  } 
}
 类似资料:
  • 请看前面关于这个问题的帖子;自动排序不能在一个Google工作表中的多个工作表上工作 这是上节课的好剧本; 这个线程成功地解决了我的问题,但是,现在我想做的是自动排序第三张,这是锁定到其他人,但不是我自己。第三页标题为“2017年卡兰生产”。我还希望这第三张表格能够从第二张表格“代管交易”中提取所有新数据,格式与第二张表格相同,并在数据导入第三张表格时自动排序,但也能够在第三张表格中手动输入新交易

  • 问题内容: 我是第一次在MacOSX上使用Postgres 9.3创建数据库。 假设我有桌和。开始时是空的和已填充的。我想的条目的数量在列在表为等于每个表等表的下方。因此,应包含每个唯一的入口和计数。我还不习惯这种语法,所以我真的不知道该怎么做。该列是多余的。 表 表 这将是正确的解决方法吗? 问题答案: 回答原始问题 Postgres允许集合返回函数(SRF)乘以行。 是你的朋友: 自 Post

  • 按照element的 :default-sort = "{prop: 'date', order: 'descending'}",我通过过滤数组,得到需要排序的prop,但是效果没有实现。

  • 问题内容: 我有以下收藏: 当这个样子的: 现在我必须根据字段对集合进行排序,如何实现呢? 问题答案: 这是我的“ 1班轮”: Java 8的更新:对于int数据类型 甚至: 对于String数据类型(如注释中所示) ..它期望吸气剂

  • 使用GoogleApps脚本,我试图用一张工作表中的数据自动填充多张工作表。 我使用两个电子表格,“主”电子表格包含需要自动填充到另一个电子表格中的数据。 另一个电子表格包含模板表,根据“主”表中的条目数量,模板表被重复多次,这是数据需要去的地方。 到目前为止,我已经设法复制了基于主模板的工作表的数量,并在之后删除它们(见代码),但是我找不到任何关于如何自动填充这些工作表的信息。模板根据列中的公司

  • 问题内容: 在java中如何根据value排序一个map?例如 根据Value排序 问题答案: 通用的版本: