无法在工作表范围上插入值

问题描述 投票:0回答:1

我正在尝试将一些行插入到不包含任何表的Excel工作表中,但我只能插入空行。试图更改这些空行的值会导致row.values打印正确的数据,但是文件本身的行仍然是空白的,即使在context.sync()之后也是如此。

我尝试使用insert中的Excel.Range方法成功插入空行:

let empty_space   = sheet.getCell(index,0).getResizedRange(index, row.length)
empty_space.insert("Down")

然后我尝试使用对新范围empty_space的引用将其值替换为名为row的数组(其长度用于定义上面的范围):

empty_space.load("values")
await context.sync()
empty_space.values[0] = row 

如果我然后执行console.log(empty_space.values),我看到列出了正确的值,但文件中的行仍为空。

我还尝试通过拼接将行插入到工作表的使用范围中:

full_range.values.splice(index, 0, row)

与上面相同,在控制台上正确打印但显示空单元格。

如何使用范围将值数组插入到文件顶部的新行中。我无法将范围转换为表格,因为这会产生许多其他问题。

编辑:以下是我用来尝试实现此功能的全部内容:

insert_banner = async ( sheet_range, context ) => {
   let banner_rows = this.state.sheet_content.banner.banner_rows

    for (let r in banner_rows) {
      let index         = parseInt(r)
      let row           = banner_rows[r]

      let empty_space   = this.state.sheet.getCell(index,0).getResizedRange(index, row.length)
      empty_space.insert("Down")
      empty_space.values[0] = row
      await context.sync()
    }
}

banner_rows是一个二维数组。

编辑2:我尝试使用setExcel.Range方法,如下所示:

empty_space.set( {values: row} )

但无论我尝试什么,我都会收到以下错误:

“InvalidArgument:输入数组中的行数或列数与范围的大小或尺寸不匹配。”

尽管在调试时我可以看到rowempty_space.values都具有相同的尺寸,1x48。

编辑3:这是我尝试的另一种方法:

insert_banner = async ( sheet_range, context ) => {
  let banner_rows  = this.state.sheet_content.banner.banner_rows
  let sheet_values = sheet_range.values

  for (let r in banner_rows) {
    let index = parseInt(r)
    let row   = banner_rows[r]
    sheet_values.splice(index, 0, row)
  }

  return context.sync()
}

在这种情况下,如果我在此函数后添加断点,我可以看到sheet_ranges值确实包含相应行的正确信息。我不明白为什么这没有反映在文件本身。

javascript typescript office-js office-addins
1个回答
1
投票

我在您的代码中看到的一些问题:

  1. 您不需要加载empty_space的值。您需要加载同步后代码将要读取的属性,而不是代码要写入的属性。
  2. 为empty_space.values [0]赋值时,只填充JavaScript中的代理对象,而不是工作簿中的实际范围。要将新值发送到工作簿,您必须调用context.sync。 (因为看起来你不需要在这行之上的context.sync,只需将它移到该行下面。)context.log工作的原因是你记录了代理对象的值。

我认为你的第二个代码块中的代码应该是:

empty_space.values[0] = row
await context.sync()
© www.soinside.com 2019 - 2024. All rights reserved.