[英]Using Apps Script for Google Sheets, Insert a Header Row after change in cell value
我已经有 7 年没有编写任何脚本了。 我曾经写过很多 VBA 脚本,其中 SQL 用于 Access 和 Excel。 我现在正在尝试通过格式化和新行中的单元格值编辑来自动插入 Google 表格行。
我希望能闭上眼睛编写脚本的人能帮助这位老妇人编写脚本,为全志愿食品合作社自动执行志愿任务,以便我可以将此任务传递给电子表格技能较少的人。
我用我自己笨拙的语言写了这个任务,希望有人能把它翻译成正确的语言和语法。 这里是:
function (createReceivingSheet)
for each cell in range A2: A500
if right(this.cell, 6) != right(this.cell.-1, 6)
insert.row.above(this.cell)
format(new row) bold, underline, font:arial, 12pt
merge (newrow.column1:column5)
format (newrow.cell.column1) border:bottom
case edit(newrow,cell.column1)
when original.cell = "02 GM *" then "GO MACRO",
when original.cell = "000 *" then "PRODUCE"
end
End function
换句话说,我想在供应商的每个更改上方插入一个格式化的标题行,其中供应商代码是 A 列中单元格的前 6 个字符。
我需要脚本遍历 Col A:
我不知道在这个论坛上问这个问题是否合适。 请让我知道您是否可以提供帮助,或者在这个论坛上问这个问题是否太多。
我认为这涵盖了您的大部分伪代码。 在底部,您必须添加要放入新单元格的值。
这个onOpen
function 在Help
之后增加了一个新菜单。 Select 一个范围然后使用菜单项运行partitionVendors
。
当您需要添加更多功能时,这里有很好的文档: https://developers.google.com/apps-script/reference/spreadsheet/spreadsheet-app?hl=en
const VENDOR_PREFIX_LENGTH = 6;
const MENU_TITLE = "Stack Overflow";
/**
* Adds a menu to the spreadsheet when the file is opened
*/
function onOpen(e) {
var ui = SpreadsheetApp.getUi();
const menu = ui.createMenu(MENU_TITLE)
menu.addItem("partition vendors", "partitionVendors")
.addToUi();
}
function partitionVendors() {
const sheet = SpreadsheetApp.getActiveSpreadsheet();
const range = SpreadsheetApp.getActiveRange();
for (let r = range.getNumRows(); r > 1; r--) {
const currentCellValue = range.getCell(r, 1).getValues()[0][0];
const previousCellValue = range.getCell(r - 1, 1).getValues()[0][0];
if (currentCellValue.slice(0, VENDOR_PREFIX_LENGTH) !== previousCellValue.slice(0, VENDOR_PREFIX_LENGTH)) {
const newRowNum = range.getLastRow() - range.getNumRows() + r;
sheet.insertRowBefore(newRowNum);
// assuming the selection is in column A, merge columns A to E
const newCellRange = sheet.getRange(`A${newRowNum}:E${newRowNum}`);
newCellRange.merge()
.setFontWeight("bold")
.setFontLine("underline")
.setFontFamily("Arial")
.setFontSize(12)
.setBorder(null, null, true, null, null, null);
// populate values here
if (currentCellValue === "value1") {
newCellRange.setValue("header for value1");
} // else if ...
}
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.