Office js Office JS API无法向表中写入少于10000个单元格值

Office js Office JS API无法向表中写入少于10000个单元格值,office-js,Office Js,我们正在使用OfficeJSAPI将数据写入表。该代码在2016年11月底之前在excel online上运行良好,此后停止工作 代码只是将值设置为一个表,它尝试写入的单元格总数少于10000,设置值的方法是: dataTable.getHeaderRowRange().values = [data.headerValues]; dataTable.getDataBodyRange().formulas = data.values; dataTable.getTotalRowRange().fo

我们正在使用OfficeJSAPI将数据写入表。该代码在2016年11月底之前在excel online上运行良好,此后停止工作

代码只是将值设置为一个表,它尝试写入的单元格总数少于10000,设置值的方法是:

dataTable.getHeaderRowRange().values = [data.headerValues];
dataTable.getDataBodyRange().formulas = data.values;
dataTable.getTotalRowRange().formulas = [data.totalRow];
复制问题的完整代码位于中

您可以使用以下清单在office online中运行代码:

<?xml version="1.0" encoding="UTF-8"?>
<OfficeApp xmlns="http://schemas.microsoft.com/office/appforoffice/1.1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="TaskPaneApp">
  <Id>5B1D06A5-5F14-4B8F-B07D-E698084397F6</Id>
  <Version>1.0.0.0</Version>
  <ProviderName>Provider</ProviderName>
  <DefaultLocale>en-US</DefaultLocale>
  <DisplayName DefaultValue="Testing Office API" />
  <Description DefaultValue="Testing Office API"/>
  <Hosts>
    <Host Name="Workbook" />
  </Hosts>
  <DefaultSettings>
    <SourceLocation DefaultValue="https://renil-abdulkader.github.io/office-js-api-testing/" />
  </DefaultSettings>
  <Permissions>ReadWriteDocument</Permissions>
</OfficeApp>

5B1D06A5-5F14-4B8F-B07D-E69084397F6
1.0.0.0
供应商
恩美
读写文件
单击“加载数据”按钮将只写入部分数据,控制台将显示以下错误:
{“name”:“OfficeExtension.error”,“code”:“GeneralException”,“message”:“处理请求时出现内部错误”,“traceMessages”:[],“debugInfo”:{“errorLocation”:“Range.formulas”}

一旦发生这种情况,其他问题包括:

  • 添加绑定将失败
  • 绑定失败后,“删除”选项卡将开始失败
  • 如果excel工作表上有多个用户,用户将开始收到
    您不再连接到服务器的错误消息

  • 更新1:我们正在写68行,每行136列。更新代码以写入前40行和后30行,代码运行良好,但不是全部68行。所以数据本身不应该有问题。

    这是由于在线平台上的超时错误造成的。作为一个缓解步骤,是否可以分块进行大型公式(或值)更新,这样就不会有单个请求遇到超时问题?块大小可能取决于环境。也许可以从2K个细胞开始?
    如果我们能够提供另一种解决方案,我将跟进这个问题

    我怀疑您已达到Excel的存储限制。对于清单建议大小的用户,您需要使用数据库来存储数据。可能会引导您找到一个解决方案。指定的存储限制在哪里?此数据肯定不会达到10MB的限制,正如我前面提到的,这在早期工作正常。当然。更新了我从office API获得的错误信息。此外,如果愿意,您可以使用上面提供的清单运行代码。可以重现错误。将返回一个响应。所以不使用table.formulas setter,而是使用range来设置值?我们绝对可以试试。但当我们尝试批量承诺时,它没有起作用。我可以更新代码进行批处理,看看是否可以重现错误。值或公式集都将触发重新计算。所以,我不认为这有什么区别。如果要设置公式,则应使用公式属性。“chunk”的意思是,通过将原始网格拆分为更小的网格来更新(值或公式)。与其说是10k单元格更新,不如说是对2k单元格进行5次更新。我将回到超时限制是否可以延长的问题上。不管怎样,对于在线(浏览器)客户端,您还需要考虑用户体验。理想情况下,您不需要”正在处理..“消息太长。否则,用户可能会取消或关闭。我认为分块写入将使“正在处理…”消息停留更长时间。我将更新代码并让您知道。在这种情况下,我们如何使用多个ctx.sync()循环,因为我们需要写入批处理数据?我可以遵循任何文档吗?