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

时间:2017-08-21 20:26:28

标签: javascript cell office-js

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

#1

apply plugin: 'kotlin-kapt'

//..

dependencies {
   //..
    kapt 'com.android.databinding:compiler:2.3.2'
   //..
}

#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;
});

我哪里做错了?

编辑:标记的答案是正确的,不是因为它的主要内容 - 而是因为Kim Brandl以后的回复 - 其中,我的解决方案是使用API​​ 1.1 - 但是{{1 }}只能在API 1.2中使用。

非常感谢!

3 个答案:

答案 0 :(得分:2)

这是一个代码片段,它创建一个新工作表,向工作表添加两行数据,然后合并单元格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中运行此代码的结果:

Excel data

请注意以下事项:

  • 如果您合并的范围内的多个单元格包含值,则只保留范围的第一个单元格中的值(即范围中最左上角的单元格) - 所有随后的单元格值被消除。例如,上面示例中的工作表最初在单元格B1中包含一个值(“第2行”) - 但如上面的屏幕截图所示,只要单元格B1与单元格A1合并,此值就会被删除。

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

  • 始终包含错误处理(正如我对catch语句所做的那样)非常重要,以确保在您不知情的情况下,事情不会无声地失败。

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

另外一些信息 - 看起来range.merge()已作为需求集1.2的一部分添加到Excel JavaScript API中。我建议您验证您运行的Office版本/平台是否支持需求集1.2(或更高版本) - https://dev.office.com/reference/add-ins/requirement-sets/excel-api-requirement-sets。有关如何获取最新版本的Office的信息,请参阅Office加载项文档中的this topic

答案 1 :(得分:0)

你的第一个问题是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();
  });        
});

答案 2 :(得分:0)

从官方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));
            }
    });