【问题标题】:How to stop excel from auto formatting when setting values using office.js使用office.js设置值时如何阻止excel自动格式化
【发布时间】:2018-08-03 21:21:10
【问题描述】:

我正在尝试将单元格值设置为始终为文本值。我根本不想要任何格式。

我正在使用以下代码:

async function setValue() {
    try {
        await Excel.run(async (context) => {
            const sheet = context.workbook.worksheets.getItem("Sample");

            const range = sheet.getRange("C3");
            range.values = [[ 'June 2018' ]];
            range.format.autofitColumns();

            await context.sync();
        });
    }
    catch (error) {
        OfficeHelpers.UI.notify(error);
        OfficeHelpers.Utilities.log(error);
    }
}

这会导致单元格中的日期为Jun-18。我找到了this 答案,这可能是一种解决方法,但是在我的所有数据前面加上' 会让我的用户感到困惑。像01 这样的值也会出现这个问题。

【问题讨论】:

    标签: excel office-js


    【解决方案1】:

    好问题!首先,让我做一个一般性的声明:Excel 可编程性的核心是自动化——它与用户做的事情相同,但以编程方式。因此,您通常可以从 UI 中看到您在编程中应该做什么。

    现在,在常规 Excel 中,如果您在新工作表的空白单元格中键入 June 2018,您将获得与刚才描述的相同的体验。这是因为单元格被格式化为“常规”,这意味着它将尝试捕捉到特定类型。如果您希望它保留为文本(而不是格式化的日期,这是 Ricky 在其答案的最后一行中建议的),您需要首先将数字格式设置为文本,在 Excel 中是@ 符号,然后输入值。

    await Excel.run(async (context) => {
        const range = context.workbook.getSelectedRange();
        range.numberFormat = [["@"]];
        range.values = [["June 2018"]];
    
        await context.sync();
    });
    

    再次强调一下——就像在 UI 中一样——您需要在设置值之前设置格式。反之亦然,您会将文本“43252”输入单元格(巧合的是,这是自 1900 年 1 月 0 日 [是,0 日] 以来的天数——当天的随机琐事)。

    当然,在告诉 Excel“这只是文本”时,您将失去在其上执行其他日期操作的能力 - 所以 Ricky 的回答是。数字格式(“mmmm yyyy”)可能仍然更合适。但就您所说的没有让 Excel 为您自动格式化任何内容的问题而言,请务必首先设置数字格式,然后然后设置值。

    【讨论】:

      【解决方案2】:

      如果你真的需要它是一个字符串,你必须将数据转换成一个不会触发 Excel 将类似日期的字符串强制转换为 Date 对象的字符串。一种方法是用不间断的空间交换空白空间。替换这一行:

      range.values = [[ 'June 2018' ]];
      

      以下几行:

      let date = 'June 2018';
      let dateAsString = date.replace(' ', '\xa0');
      range.values = [[dateAsString]];
      

      顺便说一句,如果您只是希望它看起来像输入字符串,但愿意让它成为 Date 类型,那么您可以在创建范围对象的行下方添加以下行:

      range.numberFormat = [["mmmm yyyy"]];
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-08-17
        • 1970-01-01
        • 2011-09-02
        • 2018-04-20
        • 2011-11-24
        • 1970-01-01
        • 2021-05-16
        • 2019-04-25
        相关资源
        最近更新 更多