Сохранять объекты контекста слова в переменной

Изучение мира надстроек 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>)
}

Почему бы просто не использовать панель навигации в Word? --- addbalance.com/usersguide/styles.htm#Navigation_Pane -- addbalance.com/word/MovePages.htm

Charles Kenyon 20.12.2020 18:39

Потому что в итоге идея использовать не абзацы, а какие-то конкретные якоря/закладки

Katya Pavlenko 21.12.2020 10:40

Вы можете использовать разделитель стилей, чтобы поместить два стиля абзаца в один и тот же логический абзац. addbalance.com/usersguide/styles.htm#Style_Separator

Charles Kenyon 21.12.2020 17:18
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
Раскрытие чувствительных данных
Раскрытие чувствительных данных
Все внешние компоненты, рассмотренные здесь до сих пор, взаимодействуют с клиентской стороной. Однако, если они подвергаются атаке, они не...
Зод: сила проверки и преобразования данных
Зод: сила проверки и преобразования данных
Сегодня я хочу познакомить вас с библиотекой Zod и раскрыть некоторые ее особенности, например, возможности валидации и трансформации данных, а также...
Эпизод 23/17: Twitter Space о будущем Angular, Tiny Conf
Эпизод 23/17: Twitter Space о будущем Angular, Tiny Conf
Мы провели Twitter Space, обсудив несколько проблем, связанных с последними дополнениями в Angular. Также прошла Angular Tiny Conf с 25 докладами.
Руководство ChatGPT по продаже мини JS-файлов
Руководство ChatGPT по продаже мини JS-файлов
JS-файл - это файл, содержащий код JavaScript. JavaScript - это язык программирования, который в основном используется для добавления интерактивности...
0
3
103
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Нашел ответ на похожий вопрос Ответ: объекты нельзя использовать повторно, следуйте здесь, чтобы узнать больше

Ответ принят как подходящий

Пожалуйста, импортируйте этот фрагмент в Script Lab, чтобы вы могли запустить пример того, как вы можете решить проблему.

Приведенный фрагмент выполняет поиск в документе (он ищет текст «Word»), сохраняет каждый результат (диапазон) в массиве диапазонов («rangesAr») и показывает каждый из них как элемент в списке. Затем вы можете выбрать диапазон из списка и перейти к нему. Я думаю, вы можете сделать что-то подобное для абзацев.

Этот фрагмент делает все внутри одного Word.run, которого я пытался избежать, но обнаружил, что это невозможно. Так что ваш подход выглядит хорошо, спасибо

Katya Pavlenko 22.12.2020 17:34

Чтобы добавить оглавление (TOC) в приложение React, вы можете выполнить следующие действия:

Установите библиотеку react-markdown, которая позволяет анализировать Markdown и отображать его как компоненты React:

npm install react-markdown

Импортируйте библиотеку react-markdown в свой компонент React:

Другие вопросы по теме