Как включить javascript в excel
Стоп стоп, вы смешиваете разные вещи. node и веб, в данном случае они не совместимы. У вас же обычная страничка html , к который вы через браузер обращаетесь? Или же это проект на каком-нибудь Electron
ну так, а где проект будет выполняться? В браузере? Это обычная веб страничка? в таком случае там в принципе не доступны модулю node
@Alexandr Tovmach Ваш совет содержит правильный ответ.. Это не совсем так. У ТС похоже типичный случай "XY problem" и мой совет касался конкретной библиотеки. Но с другими библиотеками проблема сервера отпадает. В общем я дополнил свой совет и оформил как ответ.
1 ответ 1
Node.js сам по себе используется преимущественно на сервере и совершенно точно не предназначен для браузера. Так что если вы хотите выводить excel в браузере с помощью библиотеки node-xlsx , то, помимо вашего фронтенда на React, вам необходим сервер на Node.js с установленным node-xlsx , т.к. этот модуль работает только на сервере.
Впрочем, в общем случае для задачи вывода excel в браузере сервер необязателен. Так, в состав node-xlsx входит библиотека js-xlsx , которая как раз может работать без сервера. js-xlsx предлагает два способа чтения excel файлов без сервера: FileReader API (для современных браузеров) и AJAX-запрос (для старых браузеров). Ниже пример чтения excel файла с помощью FileReader API:
Другие примеры чтения с excel файлов в js-xlsx можно найти здесь.
Всё ещё ищете ответ? Посмотрите другие вопросы с метками javascript reactjs или задайте свой вопрос.
Похожие
Для подписки на ленту скопируйте и вставьте эту ссылку в вашу программу для чтения RSS.
Site design / logo © 2022 Stack Exchange Inc; user contributions licensed under cc by-sa. rev 2022.5.11.42086
Нажимая «Принять все файлы cookie» вы соглашаетесь, что Stack Exchange может хранить файлы cookie на вашем устройстве и раскрывать информацию в соответствии с нашей Политикой в отношении файлов cookie.
В этой статье описано, как создавать надстройки для Excel 2016 или более поздней версии с помощью API JavaScript для Excel. В статье приводятся основные принципы, которые являются фундаментальными при использовании этого API, а также рекомендации по выполнению определенных задач, например чтению данных из большого диапазона или записи данных в него, изменения всех ячеек в диапазоне и т. д.
Сведения об асинхронном типе интерфейсов API Excel и принципах их работы с книгой см. в статье Использование модели API, зависящей от приложения.
Интерфейсы API Office.js для Excel
Надстройка Excel взаимодействует с объектами в Excel с помощью API JavaScript для Office, включающего две объектных модели JavaScript:
API JavaScript для Excel. Появившийся в Office 2016 API JavaScript для Excel предоставляет строго типизированные объекты, с помощью которых можно получать доступ к листам, диапазонам, таблицам, диаграммам и другим объектам.
Общие API. Появившиеся в Office 2013 общие API можно использовать для доступа к таким компонентам, как пользовательский интерфейс, диалоговые окна и параметры клиентов, общие для нескольких типов приложений Office.
Скорее всего, вы будете разрабатывать большую часть функций надстроек для Excel 2016 или более поздней версии с помощью API JavaScript для Excel, но вам также потребуются объекты из общего API. Например:
-
. Объект Context представляет среду выполнения надстройки и предоставляет доступ к ключевым объектам API. Он состоит из данных конфигурации книги, например contentLanguage и officeTheme , а также предоставляет сведения о среде выполнения надстройки, например host и platform . Кроме того, он предоставляет метод requirements.isSetSupported() , с помощью которого можно проверить, поддерживается ли указанный набор обязательных элементов приложением Excel, в котором работает надстройка. . Объект Document предоставляет метод getFileAsync() , позволяющий скачать файл Excel, в котором работает надстройка.
На рисунке ниже показано, когда можно использовать API JavaScript для Excel или общие API.
Объектная модель для Excel
Чтобы понять API-интерфейсы Excel, вы должны понимать, как компоненты рабочей книги связаны друг с другом.
- Рабочая книга содержит одну или несколько рабочих листов.
- Рабочий лист содержит коллекции тех объектов данных, которые присутствуют на отдельном листе, и предоставляет доступ к ячейкам с помощью объектов Range.
- Range представляет группу смежных клеток.
- Диапазоны используются для создания и размещения таблиц, диаграмм, фигур и других объектов визуализации данных или организации.
- Рабочие книги содержат коллекции некоторых из этих объектов данных (таких как таблицы) для всей рабочей книги.
В API JavaScript для Excel нет объекта или класса Cell. Вместо этого API JavaScript для Excel определяет все ячейки Excel как объекты Range . Отдельные ячейки в пользовательском интерфейсе Excel преобразуются в объект Range с одной ячейкой в API JavaScript для Excel. Один объект Range также может содержать несколько смежных ячеек. Дополнительные сведения см. в статье Работа с ячейками с использованием API JavaScript для Excel.
Диапазоны
Диапазон — это группа непрерывных ячеек в рабочей книге. В надстройках обычно используется нотация в стиле A1 (например, B3 для отдельной ячейки в столбце B и строке 3 или C2:F4 для ячеек из столбцов с C по F и строк со 2-й по 4-ю) для определения диапазонов.
Диапазоны имеют три основных свойства: values , formulas и format . Эти свойства получают или устанавливают значения ячеек, формулы для оценки и визуальное форматирование ячеек.
Образец диапазона
В следующем примере показано, как создавать записи продаж. Эта функция использует объекты Range для установки значений, формул и форматов.
В этом примере создаются следующие данные в текущем листе.
Диаграммы, таблицы и другие объекты данных
API JavaScript для Excel могут создавать и управлять структурами данных и визуализациями в Excel. Таблицы и диаграммы являются двумя наиболее часто используемыми объектами, но API поддерживают сводные таблицы, фигуры, изображения и многое другое.
Создание таблицы
Создайте таблицы с помощью диапазонов данных. Форматирование и элементы управления таблицами (например, фильтры) автоматически применяются к диапазону.
В следующем примере создается таблица с использованием диапазонов из предыдущего примера.
Использование этого примера кода на листе с предыдущими данными создает следующую таблицу.
Создание диаграммы
Создайте диаграммы для визуализации данных в диапазоне. API поддерживают десятки разновидностей диаграмм, каждая из которых может быть настроена в соответствии с вашими потребностями.
В следующем примере создается простая гистограмма для трех элементов, которая размещается на 100 пикселей ниже верхней части листа.
Выполнение этого примера на листе с предыдущей таблицей создает следующую диаграмму.
Общая среда выполнения JavaScript поддерживается только в некоторых приложениях Office. Дополнительные сведения см. в статье Наборы обязательных элементов общей среды выполнения.
Вы можете настроить надстройку Office, чтобы выполнять весь ее код в единой общей среде выполнения JavaScript (также называемой общей средой выполнения). Это позволяет повысить слаженность работы всей вашей надстройки и обеспечить доступ к DOM и CORS из всех ее частей. Кроме того, это позволяет использовать дополнительные функции, например запуск кода при открытии документа, а также включение и отключение кнопок ленты. Чтобы настроить надстройку для использования общей среды выполнения JavaScript, следуйте инструкциям, приведенным в этой статье.
Создание проекта надстройки
Если вы начинаете новый проект, используйте генератор Yeoman для настроек Office, чтобы создать проект надстройки Excel, PowerPoint или Word.
Запустите команду yo office --projectType taskpane --name "my office add in" --host --js true , где имеет одно из следующих значений.
Значение аргумента --name должно быть указано в двойных кавычках, даже если оно не содержит пробелов.
Вы можете использовать различные параметры для параметров командной строки --projecttype, --name и --js. Полный список вариантов см. в статье Генератор Yeoman для надстроек Office.
Генератор создаст проект и установит вспомогательные компоненты Node. Кроме того, с помощью действий из этой статьи вы можете обновить проект Visual Studio, чтобы использовать общую среду выполнения. Однако вам может потребоваться обновить схемы XML для манифеста. Дополнительные сведения см. в статье Устранение ошибок разработки с надстройками Office.
Настройка манифеста
Выполните указанные ниже действия для нового или существующего проекта, чтобы настроить его для использования общей среды выполнения. Эти действия подразумевают, что вы создали проект с помощью генератора Yeoman для надстроек Office.
Запустите Visual Studio Code и откройте свою надстройку.
Откройте файл manifest.xml.
Для надстройки Excel или PowerPoint обновите раздел с требованиями, включив общую среду выполнения. Обязательно удалите требование CustomFunctionsRuntime , если оно присутствует. XML-код должен выглядеть следующим образом.
Не добавляйте набор требований SharedRuntime к манифесту надстройки Word. Это приведет к ошибке при загрузке надстройки, и на данный момент это известная проблема.
Найдите раздел и добавьте следующий раздел . Время существования должно иметь значение long, чтобы код надстройки мог выполняться даже после закрытия области задач. Значение resid — Taskpane.Url, указывающее расположение файла taskpane.html в разделе в нижней части manifest.xml.
Раздел должен быть введен после элемента точно в таком же порядке, как показано в следующем XML-коде.
Если вы создали надстройку Excel с пользовательскими функциями, найдите элемент . Затем измените расположение источника с Functions.Page.Url на Taskpane.Url.
Найдите тег и измените resid с Commands.Url на Taskpane.Url. Обратите внимание: если у вас нет команд действий, у вас не будет записи FunctionFile, и этот шаг можно пропустить.
Сохраните файл manifest.xml.
Настройка файла webpack.config.js.
Файл webpack.config.js создает несколько загрузчиков среды выполнения. Вам требуется изменить его, чтобы загружать только общую среду выполнения JavaScript с помощью файла taskpane.html.
Запустите Visual Studio Code и откройте созданный вами проект надстройки.
Откройте файл webpack.config.js.
Если файл webpack.config.js содержит следующий код подключаемого модуля functions.html, удалите его.
Если файл webpack.config.js содержит следующий код подключаемого модуля commands.html, удалите его.
Если в проекте используются блоки functions или commands, добавьте их в список блоков, как показано ниже (следующий код предназначен для проекта, применяющего оба блока).
Сохраните изменения и выполните повторную сборку проекта.
Если в проекте есть файлы functions.html или commands.html, их можно удалить. Taskpane.html загружает код functions.js и commands.js в общую среду выполнения JavaScript с помощью созданных вами обновлений webpack.
Тестирование изменений надстройки Office
Вы можете убедиться, что вы используете общую среду выполнения JavaScript надлежащим образом, воспользовавшись следующими инструкциями.
Откройте файл taskpane.js.
Замените все содержимое файла указанным ниже кодом. Отобразится количество открытий области задач. Добавление события onVisibilityModeChanged поддерживается только в общей среде выполнения JavaScript.
Сохраните изменения и запустите проект.
Каждый раз, когда вы открываете область задач, количество открытий увеличивается на единицу. Значение _count не будет потеряно, так как общая среда выполнения продолжает выполнение кода даже при закрытии области задач.
Срок существования среды выполнения
При добавлении элемента Runtime также указывается срок жизни со значением long или short . Установите значение long , чтобы воспользоваться такими функциями как запуск надстройки при открытии документа, продолжение выполнения кода после закрытия области задач или использование CORS и DOM из пользовательских функций.
По умолчанию используется значение срока жизни short , но мы рекомендуем использовать long в надстройках Excel, PowerPoint и Word. Если вы настроите в этом примере для среды выполнения значение short , ваша надстройка запустится при нажатии одной из кнопок на ленте, но может завершить работу после окончания функционирования обработчика ленты. Аналогичным образом надстройка запустится при открытии области задач, но может завершить работу после закрытия области задач.
Если в манифесте вашей надстройки есть элемент Runtimes , необходимый для общей среды выполнения, и при этом выполнены условия для использования Microsoft Edge с WebView2 (на основе Chromium), то будет использоваться этот элемент управления WebView2. Если эти условия не выполнены, используется Internet Explorer 11 (в версии для Windows или Microsoft 365). Дополнительные сведения см. в статьях "Элемент Runtimes" и "Браузеры, используемые надстройками Office".
Сведения об общей среде выполнения JavaScript
На компьютере с Windows или Mac надстройка запускает код для кнопок ленты, пользовательских функций и области задач в отдельных средах выполнения JavaScript. Из-за этого возникают ограничения, например невозможность удобно предоставлять общий доступ к глобальным данным и отсутствие доступа ко всей функциональности CORS для пользовательской функции.
Однако вы можете настроить надстройку Office так, чтобы обеспечить общий доступ к коду в одной среде выполнения JavaScript (то есть в общей среде выполнения). За счет этого повышается скоординированность работы надстройки и упрощается доступ к модели DOM и CORS области задач из всех компонентов надстройки.
При настройке общей среды выполнения становятся возможными следующие сценарии.
- Надстройка Office может использовать дополнительные функции пользовательского интерфейса
Для Office в Windows общая среда выполнения использует Microsoft Edge с WebView2 (на основе Chromium), если условия его использования выполнены, как объясняется в статье Браузеры, используемые надстройками Office. В противном случае используется Internet Explorer 11. Кроме того, все кнопки, которые надстройка отображает на ленте, будут работать в одной и той же общей среде выполнения. На следующем рисунке показано, как пользовательские функции, пользовательский интерфейс ленты и код области задач будут запускаться в одной среде выполнения JavaScript.
Отладка
В настоящее время при использовании общей среды выполнения невозможно использовать Visual Studio Code для отладки пользовательских функций в Excel под управлением Windows. Вместо этого потребуется использовать средства разработчика. Дополнительные сведения см. в статье Отладка надстроек с помощью средств разработчика для Internet Explorer или Отладка надстроек с помощью средств разработчика в Microsoft Edge (на основе Chromium).
Несколько областей задач
Не планируйте использовать в своей надстройке несколько областей задач, если предполагается использование общей среды выполнения. Общая среда выполнения поддерживает только одну область задач. Обратите внимание: любая область задач без считается другой областью задач.
Это позволяет мне выполнять произвольный JavaScript, однако у меня нет доступа к электронной таблице Excel из среды Javascript. Есть ли способ, которым я могу установить и получить значения листа в активном листе из JavaScript?
Это зависит от того, какого рода «программирование в Excel» вы хотите сделать.
Если вы хотите манипулировать файлами в Excel, вы можете сделать это с помощью автоматизации COM или, в некоторой степени, через ODBC, используя JavaScript, работающий в среде сценариев Windows.
Но если вы хотите, чтобы ваш код выполнялся в активном сеансе Excel и делал то, что увидит посетитель, у вас будет меньше вариантов.
Посмотрите на этот вопрос, который я опубликовал несколько лет назад, когда у меня был JavaScript, который я хотел запустить в Excel, и у меня не было бюджета для преобразования в VBA:
Попробуйте Excel-DNA для программного интерфейса для Excel. Два других приятных инструмента, на которые можно посмотреть: xlwings и Excel-REPL, которые поддерживают интерфейсы Python и Clojure соответственно.
Для людей, использующих Excel 2016 или более позднюю версию, в надстройке есть надстройка Excel под названием Funfun. -в магазине, который на самом деле позволяет писать и запускать код JavaScript прямо в Excel. И, конечно, ваш код JavaScript также имеет доступ к данным, хранящимся в электронной таблице. Вот скриншот того, как это выглядит в Excel 2016 .
Хорошо в середине интерфейса у вас есть раздел, в котором вы можете написать JavaScript, CSS и HTML-код. Это очень похоже на игровую площадку, встроенную в Excel. Но у Funfun также есть онлайн-редактор, в котором вы можете протестировать свой код. Вы можете увидеть это на картинке ниже. Я также разместил ссылку на пример на первом рисунке, чтобы вы могли поиграть.
Что особенного в онлайн-редакторе Funfun, так это то, что он содержит «электронную таблицу», как в Excel. Хотя вы не можете выполнить здесь какое-либо форматирование, вы можете скопировать свои данные в ячейки и напрямую протестировать свой код.
Чтобы использовать данные, хранящиеся в электронной таблице, все, что вам нужно сделать, это записать некоторую конфигурацию в файл short.io Funfun, чтобы сообщить JavaScript, какая область в электронной таблице содержит ваши данные. Например, в примере, который я разместил, все, что вам нужно написать, это
А в коде JavaScript для чтения данных используется объект $ internal . Таким образом, чтобы прочитать данные, которые хранятся в A2: B9, необходимо написать
И это сделано. Вы можете обратиться к документации Funfu n, если хотите узнать больше.
Если вы удовлетворены результатом, которого вы достигли в онлайн-редакторе, вы можете легко загрузить результат в Excel, используя приведенный выше URL. Прежде всего, вам нужно вставить надстройку Funfun из Вставка - Мои надстройки . Вот несколько скриншотов, показывающих, как это можно сделать.
Раскрытие информации: я разработчик Funfun
WSTools от WizardSoft позволяет вам смешивать VBA и JScript, включая объекты и возвращаемые значения (варианты). Он также имеет много других полезных функций. Вид пакета утилит.
Эти функции специально предназначены для переплетения VBA / VBScript / JavaScript
Обновлено: добавлен упрощенный сценарий и шаги для воспроизведения в конце вопроса. Обратите внимание, что целью является включение сценария внешний в Excel-Desktop, а не обеспечение работы упрощенного сценария какими-либо другими средствами.
Мы все знаем и любим пример цены акций для пользовательских функций, где актуальная цена акций запрашивается из источника с помощью «выборки»:
Если бы существовал внешний API для получения цен на акции, можно ли было бы его использовать? Вот так:
Или, другими словами, может ли проект JavaScript пользовательских функций включать внешний скрипт, например
Включите скрипт globalapi.js в файл index.html; тогда все включенные скрипты:
Измените функцию «добавить» в файле «customfunctions.ts», чтобы она возвращала что-то другое, если определено «someGlobalString»:
Теперь введите пользовательскую функцию «=CONTOSO.ADD(1,2)» в ячейку Excel. Для рабочего стола Excel (начинается с «npm run sideload») результат, отображаемый в ячейке, равен «3», для Excel Online (после загрузки манифеста) результат равен «99999».
Как можно объяснить разницу?
В VBA, да, вы можете вызывать веб-API, это то, о чем вы, по сути, спрашиваете?
Только что прочитал вашу ссылку. интересно. Никогда не ходил по этому пути.
Спасибо. В данном случае меня интересует только надстройка JavaScript Office.
Итак, вы изучили основы JavaScript и хотите перейти к изучению структур данных. Мотивация для изучения/понимания Структур данных может быть разной.
Прошлая статья была первой из цикла статей о создании системы электронной коммерции с использованием Keystone.js, и она была посвящена главным образом.
Обучение на практике - это проверенная тема для достижения успеха в любой области. Если вы знаете контекст фразы "Практика делает человека.
В 2022 году мы все слышим о трендах фронтенда (React, Vue), но мы не знаем, почему мы должны использовать эти фреймворки, когда их использовать, а.
Сегодня я собираюсь вкратце рассказать о прототипах в JavaScript, а также представить и объяснить вам работу с базой данных MongoDB.
Ответы 1
Извините, прямо сейчас в последней сборке Windows есть ошибка с веб-запросами в сборке Windows 16.0.11406.20002.
Мы обновим эту проблему, как только следующая сборка появится на канале Insiders.
Привет, Кейур, спасибо, что нашли время ответить. Я думаю, что это может быть другой вопрос. Я обнаружил, что любой включенный сценарий, независимо от того, содержит ли он «выборку» или нет, работает в Excel Online, но не в Excel Desktop. Я обновлю вопрос с шагами для воспроизведения. Может быть, это что-то очевидное, что я упускаю?
Спасибо, JR, вы включаете выборку через пользовательские библиотеки? Если это так, это может не сработать, если эта библиотека использует какой-либо другой механизм браузера (например, DOM) для выполнения веб-запроса. В окнах Excel (и, в конечном итоге, на Mac) мы загружаем только среду выполнения js (chakracore на Windows; jsc на Mac). Это означает, что мы похожи на node.js в том, что все библиотеки, которые вы могли использовать в браузере, могут не работать. Дополнительную информацию см. в документации по среде выполнения пользовательских функций по адресу aka.ms/пользовательские функции.
Keyur Patel - MSFT
Я обновил вопрос сейчас. Как видите, «globalapi.js» просто объявляет глобальную переменную, и я не уверен, почему результат отличается на рабочем столе/в сети. Можно ли это объяснить тем, что вы упомянули? Если есть что-то еще, что я могу сделать, чтобы помочь решить или прояснить проблему, пожалуйста, дайте мне знать.
Спасибо, Джей Ар, позвольте мне связаться с командой и вернуться в понедельник.
Keyur Patel - MSFT
Keyur Patel - MSFT
Привет, Кейур, спасибо, что вернулись к этому. Сценарий «globalapi.js» предназначен только для демонстрации того, где что-то начинает идти не так, но фактическая цель состоит в том, чтобы сослаться на отдельно поддерживаемый внешний сценарий API, который не может быть включен в пакет. Возможно ли и это?
Привет! извините за задержку в возвращении к этому. Если вы хотите сослаться на внешний javascript, он должен быть связан с javascript, чтобы пользовательская функция правильно загружалась в Windows, чтобы среда выполнения имела к ней доступ.
Keyur Patel - MSFT
Спасибо, Кейур; это не то, на что я надеялся, но если вы хотите опубликовать это как отдельный ответ, я могу его принять. Если есть какие-либо планы по включению внешнего сценария в будущем, я был бы признателен, если бы вы могли прокомментировать.
@KeyurPatel-MSFT нужно ли мне по-прежнему следовать тому же подходу для объединения всех файлов в один javascript, или он может работать даже без объединения в один файл и просто ссылаясь на другие файлы в html-коде.
Читайте также: