6 Answers

你好,方便贴一下您的代码吗?

async insertTable(data) {       const app = this.wps.Application;
      const stack = app.Stack();
      const tables = await app.ActiveDocument.Tables;
      let tableRange = await app.ActiveDocument.ActiveWindow.Selection.Range;
      let selection = await app.ActiveDocument.ActiveWindow.Selection;
      let font = await selection.Font;
      font.Size = 8;
      // 插入表格
      let thisTable = await tables.Add(
          tableRange, // 位置信息
          data.length, // 新增表格的行数
          data[0].length, // 新增表格的列数
          1,
          1
      );
      for (let row = 0; row < data.length; row++) {
        let rowObj = await thisTable.Rows.Item(row + 1);
        for (let cell = 0; cell < data[row].length; cell++) {
          let cellObj = await rowObj.Cells.Item(cell + 1);
          try {
            const range = await cellObj.Range;
            range.Text = await data[row][cell];
          } catch (e) {
            console.log(e,1223);
          }
        }
      }
      await app.ActiveDocument.ActiveWindow.Selection.MoveDown();
      await app.ActiveDocument.ActiveWindow.Selection.MoveDown();
      stack.End();
    },

data是一个二维数组[[1,2,3],[2,3.4]]

你好,当需要将光标移动至下一页时,请使用这个API:https://solution.wps.cn/docs/client/api/Word/Selection.html#insertbreak 然后您就可以正常插入表格了

不好意思麻烦问一下,因为这边插入表格的内容是不确定的位置也是不确定的,可以问一下这边有什么方法可以确定应该在什么时机插入分页符呢。

你好,插入表格之前,先结束当前行即可。 使用这个API:https://solution.wps.cn/docs/client/api/Word/Selection.html#insertbreak
参数传枚举值wdTextWrappingBreak
示例:
await app.ActiveDocument.ActiveWindow.Selection.InsertBreak(app.Enum.WdBreakType.wdTextWrappingBreak)

是指文字在插入表格之前吗

是的

现在就是我只是单纯的插入表格的话是没有报错的,但是在后面往表格里插入文本就会报错 171052dd8f57fe786787fe87d9d2864.png
就是这里
a7a56b4cbaaea935a93efbcad3e5d6f.png
Uncaught (in promise) Cannot set properties of undefined (setting 'Text')
就是会报这个错误

您好,使用您刚才提供的插入表格函数,可正常运行,您检查下传入的数据是否正确?保证二维数组的长度一致。

async function insertTable(data) {
  const app = WPSOpenApi.Application
  await app.ActiveDocument.ActiveWindow.Selection.InsertBreak(app.Enum.WdBreakType.wdTextWrappingBreak);
  const tables = await app.ActiveDocument.Tables;
  let tableRange = await app.ActiveDocument.ActiveWindow.Selection.Range;
  let selection = await app.ActiveDocument.ActiveWindow.Selection;
  let font = await selection.Font;
  font.Size = 8;
  // 插入表格
  let thisTable = await tables.Add(
      tableRange, // 位置信息
      data.length, // 新增表格的行数
      data[0].length, // 新增表格的列数
      1,
      1
  );
  for (let row = 0; row < data.length; row++) {
    let rowObj = await thisTable.Rows.Item(row + 1);
    for (let cell = 0; cell < data[row].length; cell++) {
      let cellObj = await rowObj.Cells.Item(cell + 1);
      try {
        const range = await cellObj.Range;
        range.Text = data[row][cell];
      } catch (e) {
        console.log(e,1223);
      }
    }
  }
  await app.ActiveDocument.ActiveWindow.Selection.MoveDown()
}

查过了,表格数量和data数据对的上,就是表格过多一页放不下时,第一页表格插入数据是正常的,第二页时就会报错,如果表格当前页可以放下时也不会报错。 image.png

@ALL 该问题解决了没有

你好,问题解决了,文字组件现已支持插入跨页的表格。