首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法插入包含工作表范围内值的行

无法插入包含工作表范围内值的行
EN

Stack Overflow用户
提问于 2019-04-23 17:02:39
回答 1查看 927关注 0票数 0

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

我尝试使用来自Excel.Rangeinsert方法成功地插入空行,方法如下:

代码语言:javascript
复制
let empty_space   = sheet.getCell(index,0).getResizedRange(index, row.length)
empty_space.insert("Down")

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

代码语言:javascript
复制
empty_space.load("values")
await context.sync()
empty_space.values[0] = row 

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

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

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

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

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

编辑:下面是我尝试实现这个功能的全部内容:

代码语言:javascript
复制
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方法,如下所示:

代码语言:javascript
复制
empty_space.set( {values: row} )

但是,不管我尝试了什么,我都会得到以下错误:

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

尽管在调试时,我可以看到rowempty_space.values都有相同的维度,即1x48。

编辑3:下面是我尝试过的另一种方法:

代码语言:javascript
复制
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_range的值确实包含相应行的正确信息。我不明白为什么文件本身没有反映这一点。

EN

回答 1

Stack Overflow用户

发布于 2019-04-23 19:01:42

我在您的代码中看到了几个问题:

  1. 您不需要加载empty_space的值。您需要加载您的代码将在同步之后读取的属性,而不是您的代码将要写入的属性。
  2. 当您将值赋值给empty_space.values时,您只是在JavaScript中填充代理对象,而不是工作簿中的实际范围。要将新值向下发送到工作簿,您必须调用context.sync。(因为看起来不需要高于这条线的context.sync,所以只需将其移动到线下即可。)context.log工作的原因是您正在记录代理对象的值。

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

代码语言:javascript
复制
empty_space.values[0] = row
await context.sync()
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55816135

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档