设置格式并为给定范围写入某些值后,相同的格式将部分自动应用于其他范围

时间:2017-04-29 08:40:01

标签: excel office-js

我不确定这是一个问题,还是来自Excel的预期行为。如果这确实是预期的行为,我会很感激对正在发生的事情的解释,因为我看不到某种模式。

如果您将格式和某些值设置为某个范围,然后仅将值分配给位于第一个范围下方的另一个范围,则第一个范围的格式将部分(随机?)应用于新范围。

我的测试功能:

   function getRandomInt(min, max) {
        min = Math.ceil(min);
        max = Math.floor(max);
        return Math.floor(Math.random() * (max - min)) + min;
    }

 function loadSampleData(applyFormat) {
    var columnCount = 30;
    if (applyFormat) {
        columnCount = 5;
    }
    var data = [];
    for (var rows = 0; rows < 4; rows++) {
        var row = [];
        for (var columns = 0; columns < columnCount; columns++) {
            var value = columns;
            if (getRandomInt(1, 3) == 2) {
                value = "text";
            }
            row.push(value);
        }
        data.push(row);
    }
    return Excel.run(function (ctx) {
        var selectedRange = ctx.workbook.getSelectedRange().load(['rowCount', 'columnCount']);
        var extendedRange;
        return ctx.sync().then(function () {
            var totalRows = data.length;
            var totalColumns = data[0].length;
            var deltaRows = totalRows - selectedRange.rowCount;
            var deltaColumns = totalColumns - selectedRange.columnCount;
            extendedRange = selectedRange.getResizedRange(deltaRows, deltaColumns);
            if (applyFormat) {
                extendedRange.format.fill.color = "orange";
                extendedRange.format.font.color = "white";
            }
            else {
                extendedRange.clear();
            }
            extendedRange.values = data;
        }).then(ctx.sync)
    }).catch(errorHandler);
}

步骤:

  1. 在任务窗格中创建一个按钮(按钮A)。此按钮必须调用loadSampleData并传递true,以将一些数据和格式(填充和字体颜色)写入范围。 (范围A)
  2. 在任务窗格中创建另一个按钮(按钮B)。此按钮必须调用loadSampleData并传递false,才能将数据(无格式)写入更大的范围(范围B)。
  3. 单击A1单元格,然后单击按钮A.注意显示的范围和格式。
  4. 单击A6,然后单击按钮B.请注意,即使没有为范围设置显式格式,也会写入更大的范围,并且其某些单元格的格式与步骤3中的范围相同。
  5. 仍然选择A6,多次单击按钮B.请注意,随着范围值的变化,格式化的单元格也会发生变化。
  6. 注意:

    • 如果范围B写在范围A之上,则不会发生这种情况。
    • 如果范围B写在范围A下面4行(或更多),则不会发生这种情况。

    谢谢!

1 个答案:

答案 0 :(得分:0)

令人着迷的是,我甚至可以在UI中重现这个问题,而且没有可编程性。 Excel正在进行某种模式匹配,尽管我承认我很难解读模式是什么......

enter image description here

我将与我们的团队讨论 - 但就具体指导而言,我认为您最安全的选择是设置值,然后清除格式。如果你想要非常小心,你甚至可以更进一步:

  1. 设置数字格式(以确保字符串与数字和日期字符串按您希望的那样进行解释)
  2. 设置值
  3. range.clear(Excel.ClearApplyTo.formats);
  4. 重新设置数字格式
  5. 我承认这似乎是一个值得改进的工作流程。让我看看我们是否可以修复&#34;值&#34;,或者提供一种方法,让您可以一次性设置值和数字格式,并且比现在更加严格。