(Excel加载项)将大数字设置为Range.value时,电子表格中的结果数字是不同的

当设置一个大数值作为范围(单元格)的值时,写入电子表格的数字与原始数字不同。 例如

如果我设置了42300000000,那么excel中的数字变成-649672960。 小数字不会发生这种情况

我使用Visual Studio的基本项目样本进行了testing。 只需将原始的loadSampleData函数replace为:

function loadSampleData() { var values = [ [4230, 42300, 423000], [4230000, 42300000, 423000000], [4230000000, 42300000000, 423000000000] ]; // Run a batch operation against the Excel object model Excel.run(function (ctx) { // Create a proxy object for the active sheet var sheet = ctx.workbook.worksheets.getActiveWorksheet(); // Queue a command to write the sample data to the worksheet sheet.getRange("B3:D5").values = values; // Run the queued-up commands, and return a promise to indicate task completion return ctx.sync(); }) .catch(errorHandler); } 

当我运行加载项,我在Excel中得到这个:

 4230 42300 423000 4230000 42300000 423000000 -64967296 -649672960 2093204992 

这是一种溢出? 难道我做错了什么?

谢谢!

感谢您报告这个错误。

这个问题似乎出现在我们用来反序列化传入请求的JSONparsing器中。 它错误地认为任何整数都适合int32_t 。 正确的行为是parsing这样大的值,尽pipe它们是整数。

由于这不是Excel代码,修复可能需要很长时间。

不幸的是,在这些文字末尾添加.0E0 ,并不会驱动parsing器将这些文字parsing为double精度。 正如查尔斯·威廉斯(Charles Williams)所指出的那样,将文字用单引号或双引号括起来是为了达到你的目的。

我一直无法find一个更确定的工作。 其他build议将受到欢迎。

兹拉特科

当我探索这个错误时,我得到以下结果

  • 9876543210和9876543210.0给1286608618 – 失败
  • 9876543210.9给9876543210.9 – 作品
  • '9876543210'和'9876543210' – 不会导致一个string(我会考虑一个错误,但也许这只是一个JStypes混淆讨厌),但给9876543210作为一个数字(所以可能的黑客绕过原始错误)
  • “'9876543210”给出9876543210哪一个excel认为是一个string – 正确的

使用下面的代码1704.8017.1000

 async function setValue() { try { await Excel.run(async (context) => { let sheet = context.workbook.worksheets.getActiveWorksheet(); let range = sheet.getRange("C3"); range.values = [[ 9876543210.0 ]]; range.format.autofitColumns(); await context.sync(); }); console.log("Done!"); } catch (error) { OfficeHelpers.Utilities.log(error); } }