You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Excel Office Script从多表提取指定列合并为单表的问题

解决方法

以下是修正后可直接运行的完整代码:

function main(workbook: ExcelScript.Workbook) {
    let sheets = workbook.getWorksheets();
    for (let sheet of sheets) {
        // 跳过目标合并表避免处理报错
        if (sheet.getName() === "Combined") continue;
        if (sheet.getTables().length > 0) {
            sheet.getTables()[0].convertToRange();
        }
        const usedRange = sheet.getRange('A1').getUsedRange();
        if (usedRange) {
            sheet.addTable(usedRange.getAddress(), true);
        }
    }
    workbook.getWorksheet('Combined')?.delete();
    const newSheet = workbook.addWorksheet('Combined');
    const tables = workbook.getTables();
    // 目标列名数组,后续直接复用
    const targetHeaders = ['Column1', 'Column6', 'Column8', 'Column9','Column11', 'Column16', 'Column18', 'Column19'];
    const headerValues = [targetHeaders];
    const targetRange = newSheet.getRange('A1').getResizedRange(headerValues.length - 1, headerValues[0].length - 1);
    targetRange.setValues(headerValues);
    const combinedTable = newSheet.addTable(targetRange.getAddress(), true);

    for (let table of tables) {
        // 跳过合并表自身避免重复读取数据
        if (table.getWorksheet().getName() === "Combined") continue;
        const rowCount = table.getRowCount();
        if (rowCount <= 0) continue;

        // 按预设的目标列名依次提取对应列数据
        const columnData = targetHeaders.map(header => {
            const col = table.getColumnByName(header);
            // 兼容当前表无指定列的场景,自动填充空值
            return col ? col.getRangeBetweenHeaderAndTotal().getTexts().map(row => row[0]) : new Array(rowCount).fill("");
        });

        // 把按列存储的数据转置为按行存储的二维数组,匹配addRows方法的参数要求
        const dataValues = [];
        for (let i = 0; i < rowCount; i++) {
            const currentRow = columnData.map(colVals => colVals[i]);
            dataValues.push(currentRow);
        }

        combinedTable.addRows(-1, dataValues);
    }
}

核心调整说明

  • 新增了工作表、表格的过滤逻辑,避免处理新建的Combined表时触发异常
  • 增加了空使用区域、空表的兼容判断,无数据的工作表不会导致脚本报错
  • 提取列的逻辑直接复用你预设的目标列名数组,遍历依次获取每列数据,同时兼容部分表格缺少指定列的场景,自动填充空值
  • 完成多列数据提取后,将列结构的数组转置为行结构的二维数组,符合表格添加行的参数格式要求

内容的提问来源于stack exchange,提问作者George Chitechi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 01:09:03