繁体   English   中英

使用 Google 表格的 Apps 脚本,在单元格值更改后插入 Header 行

[英]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:

  1. 将每个单元格与上面的单元格进行比较
  2. 如果当前单元格的前6个字符不等于上面单元格的前6个字符,则在上面插入一行
  3. 将新插入的行格式化为粗体、下划线、12 pt
  4. 合并新插入行的前 5 列
  5. 将新插入行中的合并单元格格式化为底部边框
  6. 当原始单元格 =“X”或“Y”或“Z”等时,使用基于一组 case 语句的值填充新插入行的第一个单元格(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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM