Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/447.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在变量中存储单词上下文对象_Javascript_Reactjs_Ms Word_Office Js - Fatal编程技术网

Javascript 在变量中存储单词上下文对象

Javascript 在变量中存储单词上下文对象,javascript,reactjs,ms-word,office-js,Javascript,Reactjs,Ms Word,Office Js,探索word插件世界。 想要创建一个段落列表,并通过单击它来导航到每个段落(某种目录) 就像这样: 我已经创建了代码(在reactjs上,但使用哪个框架并不重要) 当我点击任何按钮调用回调时,控制台中没有错误,但导航不会发生。 问题:如何在Word.run调用之间传递一些上下文数据以实现这种行为 import * as React from 'react' import { useEffect, useState } from 'react' const findAllParagraphs

探索word插件世界。 想要创建一个段落列表,并通过单击它来导航到每个段落(某种目录)

就像这样:

我已经创建了代码(在reactjs上,但使用哪个框架并不重要) 当我点击任何按钮调用回调时,控制台中没有错误,但导航不会发生。 问题:如何在
Word.run
调用之间传递一些上下文数据以实现这种行为

import * as React from 'react'
import { useEffect, useState } from 'react'

const findAllParagraphs = async () => {
  return Word.run(context => {
    const contentControls = context.document.body.paragraphs.load('text')
    return context
      .sync()
      .then(() => contentControls.items)
  })
}

export const App = ({ isOfficeInitialized }) => {
  const [paras, setParas] = useState<any[]>([])

  useEffect(() => {
    const loadParagraphs = async () => {
      setParas(await findAllParagraphs())
    }
    if (isOfficeInitialized) {
      loadParagraphs()
    }
  }, [isOfficeInitialized])

  const navToPar = async (par: Word.Paragraph) => {
    return await Word.run(async context => {
      par.select()
      return await context.sync()
    })
  }

  const renderList = () => {
    return paras.filter(({ text }) => !!text).map((par: Word.Paragraph, i) => {
      return (
        <div>
          <button onClick={() => navToPar(par)} key={i}>
            {par.text.substr(0, 30)}...
          </button>
        </div>
      )
    })
  }

  return (<div>{renderList()}</div>)
}

import*作为来自“React”的React
从“react”导入{useEffect,useState}
const findAllParagraphs=async()=>{
返回Word.run(上下文=>{
const contentControls=context.document.body.parations.load('text')
返回上下文
.sync()
.然后(()=>contentControls.items)
})
}
导出常量应用=({IsofificeInitialized})=>{
const[paras,setParas]=useState([])
useffect(()=>{
const loadparations=async()=>{
setParas(等待findAllParagraphs())
}
if(等位初始化){
第()段
}
},[IsofificeInitialized])
const navToPar=async(par:Word.paration)=>{
返回wait Word.run(异步上下文=>{
标准选择项()
return wait context.sync()
})
}
常量renderList=()=>{
返回段落过滤器({text})=>!!text.map((段落:Word.paragration,i)=>{
返回(
navToPar(par)}键={i}>
{par.text.substr(0,30)}。。。
)
})
}
返回({renderList()})
}

找到了类似问题的答案 答案是:对象不能重复使用,请按照了解更多信息,以便您可以运行一个示例,说明如何解决问题


引用的代码段在文档中进行搜索(搜索文本“Word”),它将每个结果(范围)存储在范围数组(“rangesAr”)中,并将每个结果(范围)显示为列表框中的一项。然后,您可以从列表中选择一个范围并导航到该范围。我认为您可以对段落执行类似的操作。

为什么不直接在Word中使用导航窗格?--最后不要使用段落,但某些特定的锚/书签您可以使用样式分隔符将两个段落样式放在同一逻辑段落中。这段代码在一个Word.run中完成了所有操作,我试图避免使用它,但发现您使用它是不可能的。所以你的方法看起来不错,谢谢