代码之家  ›  专栏  ›  技术社区  ›  avi12

Excel office js:合并2个或更多单元格

  •  2
  • avi12  · 技术社区  · 7 年前

    我需要合并2个单元格,在合并的单元格中有一个值。
    我(失败)的尝试:

    Excel.run(function (context) {
        const newSheet = context.workbook.worksheets.add("New sheet 1");
        newSheet.activate();
        const values = [
            ["Row 1", "", "Row 1"],
            ["Row 2", "Row 2", "Row 2"]
        ];
        newSheet.getRange("A1").values = values;
        newSheet.getRange("A1:B1").merge = true;
    });
    

    Excel.run(function (context) {
        const newSheet = context.workbook.worksheets.add("New sheet 1");
        newSheet.activate();
        const values = [
            ["Row 1", "", "Row 1"],
            ["Row 2", "Row 2", "Row 2"]
        ];
        newSheet.getRange("A1").values = values;
        newSheet.getRange("A1").getResizedRange(0, 1).merge = true;
    });
    

    编辑 Kim Brandl 的稍后回复-其中,我的解决方案使用API 1.1-但 merge() 只能在中工作 API 1.2

    3 回复  |  直到 7 年前
        1
  •  3
  •   Kim Brandl    7 年前

    下面是一个代码片段,它创建了一个新的工作表,向工作表中添加了两行数据,然后合并了单元格A1和B1。

    Excel.run(function (context) {
    
        // create new sheet, add 2 rows of data
        const newSheet = context.workbook.worksheets.add("New sheet 1");
        newSheet.activate();
        const values = [
            ["Row 1", "Row 2", "Row 1"],
            ["Row 2", "Row 2", "Row 2"]
        ];
        newSheet.getRange("A1").getResizedRange(values.length - 1, values[0].length - 1).values = values;
    
        // merge cells A1 and B1 
        var myRange = newSheet.getRange("A1:B1");
        myRange.merge();
    
        return context.sync();
    })
        .catch(function (error) {
            console.log('error: ' + error);
            if (error instanceof OfficeExtension.Error) {
                console.log('Debug info: ' + JSON.stringify(error.debugInfo));
            }
        });
    

    Excel data

    注意以下几点:

    • 如果要合并的范围内的多个单元格包含值,则仅保留该范围第一个单元格中的值(即该范围中最左上角的单元格),所有后续单元格值都将被擦除。例如,上面示例中的表最初在单元格B1(“第2行”)中包含一个值,但如上面的屏幕截图所示,每当单元格B1与单元格A1合并时,该值就会被删除。

    • context.sync() --由于您只是将数据写入工作表并合并单元格,因此这些命令可以排队并在最后使用单个sync()执行。

    • 始终包含错误处理是很重要的(正如我在 catch

    更新(添加有关需求集的信息)

    还有一点信息——看起来像 range.merge() https://dev.office.com/reference/add-ins/requirement-sets/excel-api-requirement-sets . 有关如何获取最新版本Office的信息,请参阅 this topic

        2
  •  0
  •   Mr Alb    7 年前

    从官方网站试试这个 doc

            Excel.run(function (ctx) {
            var sheetName = "New Sheet 1";
            var rangeAddress = "A1:B1"; 
            var range = ctx.workbook.worksheets.getItem(sheetName).getRange(rangeAddress);
            range.select();
            return ctx.sync(); 
        }).catch(function(error) {
                console.log("Error: " + error);
                if (error instanceof OfficeExtension.Error) {
                    console.log("Debug info: " + JSON.stringify(error.debugInfo));
                }
        });
    
        3
  •  0
  •   Marc LaFleur    7 年前

    你的第一个问题是 merge()

    var range = newSheet.getRange("A1:B1");
    range.merge();
    

    第二个问题是你需要 sync 在此之后,为了将您的更改提交到工作表:

    Excel.run(function (context) {
      const newSheet = context.workbook.worksheets.add("New sheet 1");
      newSheet.load('name');
      return context.sync().then(function () {                       
          var range = newSheet.getRange("A1:B1");
          range.merge();       
          newSheet.activate(); 
          return context.sync();
      });        
    });