【问题标题】:How do I detect merged cells in a range from an Excel Javascript Add-In?如何检测 Excel Javascript 加载项范围内的合并单元格?
【发布时间】:2020-04-17 13:38:11
【问题描述】:

在 Excel Javascript API 中,我看到了 range 类中用于合并和取消合并单元格的方法,但没有看到指示单元格是否已合并以及它包含多少行和列的属性。如果没有明确的 API 来阅读此内容,是否有人知道解决方法 - 例如。间接检测合并状态或获取范围的底层 xml 并对其进行解析?

【问题讨论】:

    标签: javascript excel office-js


    【解决方案1】:

    很抱歉,目前我们没有 API(在 VBA 中,对应的 API 是 Range.MergeCells)来检查合并单元格的状态。如果您在合并之前知道原始范围地址,您可以尝试 Ginger Jiang(来自我们团队)的解决方法。

    如果您的场景仍然无法解锁,我建议您在 UserVoice https://officespdev.uservoice.com/forums/224641-feature-requests-and-feedback?category_id=163563 上提交您的请求并对此功能进行投票,我们会将其添加到我们的待办事项中。

    PS。如果您能与我们分享您的场景,那就太好了。因此,我们可以看到如何使用现有 API 解除对您的场景的阻塞。

    谢谢

    【讨论】:

    • @Reymond Lu - 谢谢!我正在尝试根据工作表内容动态呈现组织结构图。例如,如果用户有一个范围,其中 A1:A2 被合并和填充并且 B1 和 B2 都被填充,则它应该显示为两个较小框上方的一个大框。似乎我应该能够通过循环遍历范围中的单元格并为每个单元格加载 rowCount 和 columnCount 来构建合并列表,但这些属性始终返回 1。
    • 谢谢,我建议在 UserVoice 中提交此请求并支持此请求。我们会将其添加到我们的待办事项中。
    • 两年前我赞成这个请求:officespdev.uservoice.com/forums/…。虽然 Google Sheets API 中的 Range.getMergedRanges() 方法是理想的,但如果有一种可以快速实现的解决方法,那就太好了,即使它只是一种为所选范围返回原始 xml 的方法客户端js必须解析。
    • 功能请求 (4114954) 已在我们的积压中创建,对于解决方法,请您尝试 Ginger 的回答?
    【解决方案2】:

    这里是选择一个范围并合并范围的示例工作,然后检查它是否是合并范围:

        //get selected range and did merge
    var range = context.workbook.getSelectedRange();
    range.merge();
    await context.sync();
    
        // check whether the range is merged or not 
    range.load();
    await context.sync();
    console.log(range["cellCount"]);
    
    const str = range.address;
    const colCount = range.columnCount;
    const rowCount = range.rowCount;
    console.log(colCount);
    console.log(rowCount);
    if (str) {
      const arr = str.split("!");
      console.log(arr[1]);
      if ((range["cellCount"] > 1 || range["colCount"] > 1 || range["rowCount"] > 1) && arr[1].indexOf(":") == -1) {
        console.log("true");
      } else {
        console.log("false");
      }
    }
    

    【讨论】:

    • 谢谢,但是当我尝试它时这似乎不起作用,因为单个单元格范围返回的 cellCount 为 1,即使它们是合并的开始。另外,我需要获取 rowCount 和 columnCount 而不是 cellCount 来获取合并的方向,对吧?
    • 如果我理解正确的话,如果范围被合并,那么它应该由多个单元格组成,否则它不会被称为合并范围。如果您选择了合并范围,则单元格数应大于 1,我在 Win32 和 Excel 在线验证了这一点。而对于 columnCount/rowCount,您还可以使用它们来跟踪合并方向。我用选定的范围编辑了上面的示例代码,您可以将单元格计数替换为列数或行数作为您的偏好。谢谢。 :)
    • 感谢您的跟进!我认为区别在于我试图确定一个范围内的 which 单元格被合并在一起,而不是确定 整个 范围是否被合并。关于如何确定例如 A2:B2 在 A1:G10 的选定范围内合并在一起的任何想法? Google Sheets API 有一个 Range.getMergedRanges() 函数,它返回一个范围数组,我希望 Excel 有一个解决方法可以让我得到类似的东西。
    • 我们现在也提供相同的新 API,现在它处于预览阶段:docs.microsoft.com/en-us/javascript/api/excel/…
    猜你喜欢
    • 1970-01-01
    • 2017-12-17
    • 1970-01-01
    • 2017-07-24
    • 1970-01-01
    • 1970-01-01
    • 2017-01-27
    • 2011-01-26
    • 2019-03-17
    相关资源
    最近更新 更多