Skip to content

批量插入数据

在一些业务场景中,我们可能需要将一些自定义的文本、段落或者表格数据批量填充至文档,如果这些数据足够简单,那么我们通过Range.Text一个一个的设置也能实现需求。但当数据体量比较大,或者数据是带格式的,继续使用Range.Text不仅非常耗时而且极其容易出错。

我们推荐使用PasteHtml来完成数据的批量插入。首先,您需要根据实际业务场景提炼出您的业务数据,然后利用这些关键数据生成 HTML 字符串片段,最后通过我们的接口一次性插入至文档。

下面的例子中我们将实现一个多段落 + 表格的 HTML 片段插入:

js
/**
 * 插入数据
 */
async function fillContent() {
  const textArray = [
    '余忆童稚时,能张目对日,明察秋毫,见藐小之物必细察其纹理,故时有物外之趣。',
    '夏蚊成雷,私拟作群鹤舞于空中,心之所向,则或千或百,果然鹤也;昂首观之,项为之强。又留蚊于素帐中,徐喷以烟,使之冲烟而飞鸣,作青云白鹤观,果如鹤唳云端,为之怡然称快。',
    '余常于土墙凹凸处,花台小草丛杂处,蹲其身,使与台齐;定神细视,以丛草为林,以虫蚁为兽,以土砾凸者为丘,凹者为壑,神游其中,怡然自得。',
    '一日,见二虫斗草间,观之,兴正浓,忽有庞然大物,拔山倒树而来,盖一癞虾蟆,舌一吐而二虫尽为所吞。余年幼,方出神,不觉呀然一惊。神定,捉虾蟆,鞭数十,驱之别院。'
  ]
  const tableArray = Array.from({ length: 20 }, () =>
    Array.from({ length: 6 }, () => '测试文本')
  )
  const HTML = generateTextString(textArray) + generateTableString(tableArray)

  await app.ActiveDocument.Range(0, 0).PasteHtml({
    HTML
  })
}
/**
 * 生成文本HTML字符串
 * @param data 文本数据(字符串数组)
 *
 * @return 文本HTML字符串
 */
function generateTextString(data) {
  if (!Array.isArray(data)) throw TypeError('文本数据不合法')

  return data.map(item => `<p>${item}</p>`).join('')
}
/**
 * 生成表格HTML字符串
 * @param data 表格数据(二维数组)
 *
 * @return 表格HTML字符串
 */
function generateTableString(data) {
  if (!Array.isArray(data) || !Array.isArray(data[0]))
    throw TypeError('表格数据不合法')

  const rows = data.map(row => {
    const columns = row.map(column => `<td>${column}</td>`)
    return `<tr>${columns.join('')}</tr>`
  })

  return `<table>${rows.join('')}</table>`
}