Google Sheet 根据输入文本值排列数据的脚本
Google Sheet Script for arranging data according to input text value
我一直在寻找这个 googlesheet 的脚本。
我想做的是,当我将数据(申请人)输入电子表格时,我希望根据他们的状态自动排列这些数据(申请人)。例如,如果候选人的状态为已聘用或当我将他的状态更改为“已聘用”时,我希望电子表格自动将 candidate/entry 连同详细信息(例如联系人、备注等)放在最后一个订单中.如果申请人的状态是“FLW UP”,我希望电子表格将申请人安排或移动到第一行,以便更容易看到谁需要按顺序首先处理。我希望有人可以为此给我一个脚本。谢谢!
好吧,我最近整理了一些东西来完成这个,因为我还没有找到任何真正的答案。不幸的是,这并不像听起来那么容易。
下面的代码将对您的数据进行排序,同时保留:值、公式、条带、字体样式、背景颜色、注释和(实验性的)验证规则。
尝试:
function onEdit(e) {
const targetSheet = `YOUR_SHEET_NAME`
const targetColumn = 1
const sortBy = [`AppearsFirst`, `...`, `...`, `AppearsLast`]
if (e.source.getActiveSheet().getName() === targetSheet) {
if (e.range.rowStart >= 2 && e.range.columnStart === 2 && e.range.columnEnd === 2) {
const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(targetSheet)
const range = sheet.getRange(2, 1, sheet.getLastRow()-1, sheet.getLastColumn())
const sortOrder = { ...sortBy }
const INIT = {
Values: range.getValues(),
Formulas: range.getFormulas(),
Bandings: range.getBandings(),
FontStyles: range.getFontStyles(),
BackgroundColors: range.getBackgrounds().map(row => row.map(cell => (cell === `#ffffff`) ? `` : cell)),
Notes: range.getNotes(),
ValidationRules: range.getDataValidations()
}
const DATA = INIT.Values.map((i, index) => {
return {
RowData: i,
SortIndex: parseInt(Object.keys(sortOrder).find(key => sortOrder[key] === i[targetColumn-1])),
Formula: INIT.Formulas[index],
FontStyle: INIT.FontStyles[index],
BackgroundColor: INIT.BackgroundColors[index],
Notes: INIT.Notes[index],
ValidationRules: INIT.ValidationRules[index]
}
}).sort((a, b) => (a.SortIndex - b.SortIndex))
const SORTED = {
Values: DATA.map((row, rowIndex) => row.RowData.map((col, colIndex) => row.Formula[colIndex] || col)),
FontStyles: DATA.map(i => i.FontStyle),
BackgroundColors: DATA.map(i => i.BackgroundColor),
Notes: DATA.map(i => i.Notes),
ValidationRules: DATA.map(i => i.ValidationRules)
}
range.setValues(SORTED.Values)
.setDataValidations(SORTED.ValidationRules)
.setNotes(SORTED.Notes)
.setFontStyles(SORTED.FontStyles)
.setBackgroundColors(SORTED.BackgroundColors)
}
}
}
请务必使用适当的值填写顶部列出的这些变量:
const targetSheet = `YOUR_SHEET_NAME`
const sortBy = [`AppearsFirst`, `...`, `...`, `AppearsLast`]
// Example: [`Red`, `Orange`, `Yellow`, `Green`, `Blue`, `Purple`]
根据您发布的 sheet 示例,我已将函数设置为在添加 B2:B
中的任何内容时触发。
请告诉我这是否适合您,或者您可能看到的任何 errors/bugs。
您的代码:
function onEdit(e) {
const targetSheet = 'LIST'
const sortBy = ['NEW','FLWUP','RVW PRSCRN','PRSCRN','FON INTVW','SCHED FON','FON CMPLT','PRACT. INTVW','SCHED PRACT.','PRACT. CMPLT','VRB OFFER','REF/BG CHK','HIRED','TBD','UNRESPONSIVE','NO SHOW','WTHDRW','REJECTED',""]
if (e.source.getActiveSheet().getName() === targetSheet) {
if (e.range.rowStart >= 2 && e.range.columnStart === 2 && e.range.columnEnd === 2) {
const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(targetSheet)
const range = sheet.getRange(2, 1, sheet.getLastRow()-1, sheet.getLastColumn())
const sortOrder = { ...sortBy }
const INIT = {
Values: range.getValues(),
Formulas: range.getFormulas(),
Bandings: range.getBandings(),
FontStyles: range.getFontStyles(),
BackgroundColors: range.getBackgrounds().map(row => row.map(cell => (cell === `#ffffff`) ? `` : cell)),
Notes: range.getNotes(),
ValidationRules: range.getDataValidations()
}
const DATA = INIT.Values.map((i, index) => {
return {
RowData: i,
SortIndex: parseInt(Object.keys(sortOrder).find(key => sortOrder[key] === i[1])),
Formula: INIT.Formulas[index],
FontStyle: INIT.FontStyles[index],
BackgroundColor: INIT.BackgroundColors[index],
Notes: INIT.Notes[index],
ValidationRules: INIT.ValidationRules[index]
}
}).sort((a, b) => (a.SortIndex - b.SortIndex))
const SORTED = {
Values: DATA.map((row, rowIndex) => row.RowData.map((col, colIndex) => row.Formula[colIndex] || col)),
FontStyles: DATA.map(i => i.FontStyle),
BackgroundColors: DATA.map(i => i.BackgroundColor),
Notes: DATA.map(i => i.Notes),
ValidationRules: DATA.map(i => i.ValidationRules)
}
range.setValues(SORTED.Values)
.setDataValidations(SORTED.ValidationRules)
.setNotes(SORTED.Notes)
.setFontStyles(SORTED.FontStyles)
.setBackgroundColors(SORTED.BackgroundColors)
}
}
}
按验证列表排序
function onEdit(e){
e.source.toast('Sorting')
const sh = e.range.getSheet();
if(sh.getName() =="Change Sheet Name" && e.range.columnStart == 2 && e.range.rowStart > 1 ) {
const so = ["HIRED","TBD","UNRESPONSIVE",""];//This is the validation list for column B
let vs = sh.getRange(2,1,sh.getLastRow() - 1, sh.getLastColumn()).getValues().sort((a,b) => {
return so.indexOf(a[1]) - so.indexOf(b[1]);
})
sh.getRange(2,1,sh.getLastRow() - 1, sh.getLastColumn()).setValues(vs);
}
e.source.toast('Completed');
}
我一直在寻找这个 googlesheet 的脚本。
我想做的是,当我将数据(申请人)输入电子表格时,我希望根据他们的状态自动排列这些数据(申请人)。例如,如果候选人的状态为已聘用或当我将他的状态更改为“已聘用”时,我希望电子表格自动将 candidate/entry 连同详细信息(例如联系人、备注等)放在最后一个订单中.如果申请人的状态是“FLW UP”,我希望电子表格将申请人安排或移动到第一行,以便更容易看到谁需要按顺序首先处理。我希望有人可以为此给我一个脚本。谢谢!
好吧,我最近整理了一些东西来完成这个,因为我还没有找到任何真正的答案。不幸的是,这并不像听起来那么容易。
下面的代码将对您的数据进行排序,同时保留:值、公式、条带、字体样式、背景颜色、注释和(实验性的)验证规则。
尝试:
function onEdit(e) {
const targetSheet = `YOUR_SHEET_NAME`
const targetColumn = 1
const sortBy = [`AppearsFirst`, `...`, `...`, `AppearsLast`]
if (e.source.getActiveSheet().getName() === targetSheet) {
if (e.range.rowStart >= 2 && e.range.columnStart === 2 && e.range.columnEnd === 2) {
const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(targetSheet)
const range = sheet.getRange(2, 1, sheet.getLastRow()-1, sheet.getLastColumn())
const sortOrder = { ...sortBy }
const INIT = {
Values: range.getValues(),
Formulas: range.getFormulas(),
Bandings: range.getBandings(),
FontStyles: range.getFontStyles(),
BackgroundColors: range.getBackgrounds().map(row => row.map(cell => (cell === `#ffffff`) ? `` : cell)),
Notes: range.getNotes(),
ValidationRules: range.getDataValidations()
}
const DATA = INIT.Values.map((i, index) => {
return {
RowData: i,
SortIndex: parseInt(Object.keys(sortOrder).find(key => sortOrder[key] === i[targetColumn-1])),
Formula: INIT.Formulas[index],
FontStyle: INIT.FontStyles[index],
BackgroundColor: INIT.BackgroundColors[index],
Notes: INIT.Notes[index],
ValidationRules: INIT.ValidationRules[index]
}
}).sort((a, b) => (a.SortIndex - b.SortIndex))
const SORTED = {
Values: DATA.map((row, rowIndex) => row.RowData.map((col, colIndex) => row.Formula[colIndex] || col)),
FontStyles: DATA.map(i => i.FontStyle),
BackgroundColors: DATA.map(i => i.BackgroundColor),
Notes: DATA.map(i => i.Notes),
ValidationRules: DATA.map(i => i.ValidationRules)
}
range.setValues(SORTED.Values)
.setDataValidations(SORTED.ValidationRules)
.setNotes(SORTED.Notes)
.setFontStyles(SORTED.FontStyles)
.setBackgroundColors(SORTED.BackgroundColors)
}
}
}
请务必使用适当的值填写顶部列出的这些变量:
const targetSheet = `YOUR_SHEET_NAME`
const sortBy = [`AppearsFirst`, `...`, `...`, `AppearsLast`]
// Example: [`Red`, `Orange`, `Yellow`, `Green`, `Blue`, `Purple`]
根据您发布的 sheet 示例,我已将函数设置为在添加 B2:B
中的任何内容时触发。
请告诉我这是否适合您,或者您可能看到的任何 errors/bugs。
您的代码:
function onEdit(e) {
const targetSheet = 'LIST'
const sortBy = ['NEW','FLWUP','RVW PRSCRN','PRSCRN','FON INTVW','SCHED FON','FON CMPLT','PRACT. INTVW','SCHED PRACT.','PRACT. CMPLT','VRB OFFER','REF/BG CHK','HIRED','TBD','UNRESPONSIVE','NO SHOW','WTHDRW','REJECTED',""]
if (e.source.getActiveSheet().getName() === targetSheet) {
if (e.range.rowStart >= 2 && e.range.columnStart === 2 && e.range.columnEnd === 2) {
const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(targetSheet)
const range = sheet.getRange(2, 1, sheet.getLastRow()-1, sheet.getLastColumn())
const sortOrder = { ...sortBy }
const INIT = {
Values: range.getValues(),
Formulas: range.getFormulas(),
Bandings: range.getBandings(),
FontStyles: range.getFontStyles(),
BackgroundColors: range.getBackgrounds().map(row => row.map(cell => (cell === `#ffffff`) ? `` : cell)),
Notes: range.getNotes(),
ValidationRules: range.getDataValidations()
}
const DATA = INIT.Values.map((i, index) => {
return {
RowData: i,
SortIndex: parseInt(Object.keys(sortOrder).find(key => sortOrder[key] === i[1])),
Formula: INIT.Formulas[index],
FontStyle: INIT.FontStyles[index],
BackgroundColor: INIT.BackgroundColors[index],
Notes: INIT.Notes[index],
ValidationRules: INIT.ValidationRules[index]
}
}).sort((a, b) => (a.SortIndex - b.SortIndex))
const SORTED = {
Values: DATA.map((row, rowIndex) => row.RowData.map((col, colIndex) => row.Formula[colIndex] || col)),
FontStyles: DATA.map(i => i.FontStyle),
BackgroundColors: DATA.map(i => i.BackgroundColor),
Notes: DATA.map(i => i.Notes),
ValidationRules: DATA.map(i => i.ValidationRules)
}
range.setValues(SORTED.Values)
.setDataValidations(SORTED.ValidationRules)
.setNotes(SORTED.Notes)
.setFontStyles(SORTED.FontStyles)
.setBackgroundColors(SORTED.BackgroundColors)
}
}
}
按验证列表排序
function onEdit(e){
e.source.toast('Sorting')
const sh = e.range.getSheet();
if(sh.getName() =="Change Sheet Name" && e.range.columnStart == 2 && e.range.rowStart > 1 ) {
const so = ["HIRED","TBD","UNRESPONSIVE",""];//This is the validation list for column B
let vs = sh.getRange(2,1,sh.getLastRow() - 1, sh.getLastColumn()).getValues().sort((a,b) => {
return so.indexOf(a[1]) - so.indexOf(b[1]);
})
sh.getRange(2,1,sh.getLastRow() - 1, sh.getLastColumn()).setValues(vs);
}
e.source.toast('Completed');
}