Excel 密钥创建:在现有列之间复制/插入 1500x 数据组的单元格

问题描述 投票:0回答:1

我需要将 2 个不同集合的数据子类型并排排列。现在,每组数据都存在于其自己的行中,共有 1500 列。我一直在上述数据集的列之间从下向上手动拖动单元格,以便散布它们。(然后我还将标题复制到两列上)。我正在尝试使用“记录”功能来创建脚本/宏,但我需要添加代码以在整个工作表上迭代它,直到列 BHT(这将随着添加每列而增加......)我正在努力迭代字母值的范围,并基本上告诉计算机“重复下一列”

目前的脚本是:

function main(workbook: ExcelScript.Workbook) {
    let selectedSheet = workbook.getActiveWorksheet();
    // Insert copied cells from EC17:EC25 on selectedSheet to DW2:DW10 on selectedSheet.
    selectedSheet.getRange("DW2:DW10").insert(ExcelScript.InsertShiftDirection.right);
    selectedSheet.getRange("DW2:DW10").copyFrom(selectedSheet.getRange("EC17:EC25"));
    // Paste to range DV1:DW1 on selectedSheet from range EC16 on selectedSheet
    selectedSheet.getRange("EC16").moveTo(selectedSheet.getRange("DV1:DW1"));
    // Paste to range DW1 on selectedSheet from range DV1 on selectedSheet
    selectedSheet.getRange("DW1").copyFrom(selectedSheet.getRange("DV1"), ExcelScript.RangeCopyType.all, false, false);
    // Set range DV1:DW1 on selectedSheet
    selectedSheet.getRange("DV1:DW1").setValues([["YMEL1,1","YMEL1,2"]]);
    // Clear ExcelScript.ClearApplyTo.contents from range EC17:EC25 on selectedSheet
    selectedSheet.getRange("EC17:EC25").clear(ExcelScript.ClearApplyTo.contents);

}

我在这个网站的某个地方看到了

=IF(RIGHT($A2, 1) = "Z", CHAR(CODE(LEFT(A2, 1)) + 1), LEFT(A2, 1)) & CHAR(65 + MOD(CODE(RIGHT(A2, 1)) + 1 - 65, 26))

将更新字母,但我不确定如何将此字母迭代集成到循环中,以更新源范围和目标范围范围内的两个字母...

excel-formula multiple-columns
1个回答
0
投票
  1. 问题描述: 您正在尝试在 macOS 和 Ubuntu 上运行 Next.js 应用程序的 ExcelScript。它在 macOS 上运行没有问题,但在 Ubuntu 上则不然。

  2. 脚本中的问题: 从提供的信息来看,并不清楚 ExcelScript 与 Next.js 有何关系,也不清楚 Ubuntu 的具体错误消息是什么。不过,我将根据逻辑和提供的 ExcelScript 提供一个解决方案。

  3. 积分字母迭代: 您共享的公式似乎会增加字符。假设您有“AZ”,公式会将其更改为“BA”。您希望将其集成到 ExcelScript 中以更新源和目标范围。

要实现此目的,您可能需要一个函数来按顺序获取下一列。

下面是一个改进的脚本,我在其中添加了一个函数来获取下一个列名称:

function main(workbook: ExcelScript.Workbook) {
    let selectedSheet = workbook.getActiveWorksheet();

    let sourceRangeStart = "EC17";
    let sourceRangeEnd = "EC25";
    let destinationRangeStart = getNextColumnName("DW2");
    let destinationRangeEnd = getNextColumnName("DW10");

    // Insert copied cells from source range on selectedSheet to destination range on selectedSheet.
    selectedSheet.getRange(destinationRangeStart + ":" + destinationRangeEnd).insert(ExcelScript.InsertShiftDirection.right);
    selectedSheet.getRange(destinationRangeStart + ":" + destinationRangeEnd).copyFrom(selectedSheet.getRange(sourceRangeStart + ":" + sourceRangeEnd));

    // Additional steps based on your logic
    // ...

}

// Helper function to get next column name
function getNextColumnName(column: string): string {
    let lastChar = column.slice(-1);
    let nextChar = String.fromCharCode(lastChar.charCodeAt(0) + 1);
    if (nextChar > "Z") {
        nextChar = "A";
        let prevChar = column.slice(0, -1);
        return String.fromCharCode(prevChar.charCodeAt(0) + 1) + nextChar;
    } else {
        return column.slice(0, -1) + nextChar;
    }
}

请注意:

  • 我创建了一个名为 getNextColumnName 的辅助函数,它会递增列名称。
  • 该脚本采用 2 个字符的列名称。您需要进一步调整 3 个或更多角色名称,例如
    AAA

最后,如果您在 Ubuntu 上遇到特定错误消息,这对于诊断任何可能尚未解决的特定于平台的问题或依赖项将非常有用。

© www.soinside.com 2019 - 2024. All rights reserved.