Как подключить wsp к excel

Обновлено: 06.07.2024

Бывают ситуации, когда на рабочей станции отсутствуют такие средства взаимодействия с БД как: MS SQL Server Management Studio, Aquafold Aqua Data Studio, DBeaver и т.п., а вероятность их установки в краткосрочной перспективе близка к нолю. В то же время, присутствует острая необходимость подключения к этой самой БД и работы с данными. Как оказалось, на помощь может прийти старый добрый MS Excel.

В моем случае требовалось подключиться к MS SQL Server, однако, MS Excel умеет устанавливать соединение не только с ним, но и с большинством современных БД: MySQL, PostgreeSQL, IBM DB2 и даже Oracle и Teradata, а также с файлами данных CSV, XML, JSON, XLS(X), MDB и другими.

Теперь немного о действиях, совершенных мной с целью подключения к базе:

В новой книге на ленте выбираем «(1) Данные» -> «(2) Получение внешних данных» -> «(3) Из других источников» -> «(4) С сервера SQL Server».

Далее, в окне Мастера подключения к данным, заполняем «(1) Имя сервера» -> «(2) Учетные сведения»[ -> «(3) Имя пользователя» и «Пароль»]. Таким образом, мы сообщаем MS Excel, с каким сервером мы хотим установить соединение и какой метод аутентификации хотим использовать. Я использовал «проверку подлинности Windows», но возможно также указать учетные данные отличные от установленных в Windows.

Выбираем целевую «(1) Базу данных» -> «(2)(3) Определенную таблицу» или «Несколько таблиц» или же базу в целом (тогда оба «чекбокса» оставляем пустыми).

После всех проделанных манипуляций, Мастер подключения предложит сохранить файл подключения. Потребуется задать «(1) Имя файла». Желательно также указать «(2) Описание» и «(3) Понятное имя файла», чтобы спустя время было понятно какой файл подключения к какой базе или таблице обращается.

Теперь выбрать созданное подключение можно будет следующим образом: «(1) Данные» -> «(2) Получение внешних данных» -> «(3) Существующие подключения».

Открыв только что созданное подключение, в случае если вы соединялись с базой в целом, MS Excel опять предложит выбрать одну или несколько конкретных таблиц:

Определив таблицы, MS Excel предложит выбрать «(1) Способ представления данных» и «(2) Куда следует поместить данные». Для простоты я выбрал табличное представление и размещение на уже имеющемся листе, чтобы не плодить новые. Далее следует нажать на «(3) Свойства».

В свойствах подключения, нужно перейти на вкладку «(1) Определение». Здесь можно выбрать «(2) Тип команды». Даже если требуется выгружать лишь одну таблицу без каких-либо связей, настоятельно рекомендую выбрать SQL команду, чтобы иметь возможность ограничить размер выгружаемой таблицы (например, с помощью TOP(n)). Так, если вы попытаетесь выгрузить целиком таблицу базы, это может привести в лучшем случае к замедлению работы MS Excel, а в худшем к падению программы, к тому же – это необоснованная нагрузка на сам сервер базы данных и на сеть. После того как «(3) Текст команды» будет введен и нажата кнопка «ОК», MS Excel предложит сохранить изменения запроса – отвечаем положительно.


«Корпорация Зла» (joke) осваивает нишу совместной работы с документами уже второе десятилетие. Начиналось всё с ранних версий SharePoint, при упоминании которых котики поопытнее сразу начинают плакать – уж больно специфичен с точки зрения и настроек, и возможностей был в те далекие годы MS SP. Ладно, не будем больше травмировать друг друга воспоминаниями о том неуклюжем монстре…

Но упорства у Microsoft не занимать – работа по улучшению ситуации велась все это время, причем сразу на нескольких фронтах. В результате сейчас можно говорить о сложившейся инфраструктуре совместной работы с документами, которую предлагает Microsoft. В ней выделяются два класса софта:

  1. Средства коллективного доступа к документам, включающие в себя каталогизацию, управление версиями, раздачу прав и тому подобные серверные фичи. Эти средства, в свою очередь, подразделяются на облачные (OneDrive, SharePoint Online) и on-premise, то есть разворачиваемые в инфраструктуре самого заказчика — сервер SharePoint 2016.
  2. Средства редактирования документов. К ним относятся: десктопное семейство Microsoft Office (тоже сильно переработанное за последнее время), свежесочиненные мобильные версии Office, изначально ориентированные на совместную работу с документами, и, вишенкой на торте – собственная реализация сервера онлайн-редактирования документов Office Online apps (несколько ранее известного под именем Office Web Apps).

В итоге у нас появилась идея рассказать, как собственно об этих возможностях, так и о том, как все это хозяйство установить и настроить. Попробуем добраться и до сравнения с альтернативными сервисами. Поскольку понятно, что такой лонгрид и писать долго, и читать его осилит не каждый, мы решили разделить это на несколько статей. Эта – первая. И в ней дальше мы пройдемся по тем фичам и особенностям, которые есть у каждого из продуктов Microsoft, обеспечивающих совместное редактирование документов: Office Online, MS Office на десктопах и он же на мобильных устройствах. Сразу предупреждаю – дальше будет много внимания к деталям и разжевывания мелких особенностей, нетерпеливый читатель может сразу прочитать «выводы» в конце заметки, для остальных – поехали.

Office Online

Office Online Server – это довольно интересное приложение, про которое не все еще хорошо знают. Во-первых, это возможность сократить количество лицензий и установок MS Office. Во-вторых, расширение возможности доступа и редактирования документа, грубо говоря – нужен только браузер. В-третьих, это самые лучшие на сегодня у Microsoft возможности совместной работы. Давайте посмотрим, о чем я.

Word Online



Excel Online


В Excel Online изменения в ячейке отобразятся у других соавторов только при переходе первого на следующую ячейку. При этом ячейки не блокируются и вносить изменения могут сразу несколько пользователей.


PowerPoint Online


PowerPoint Online позволяет работать одновременно над одним слайдом, но лучше работать над разными элементами, иначе пользователи не видят real time изменений друг друга.


Настольная версия Office

Опыт совместной работы с документами через Office Online оставляет приятные впечатления, когда речь идет о правках текста без необходимости значительных изменений форматирования. Если вам захочется вставить диаграммы, smart art, оглавление, макросы, форматировать таблицы, использовать формулы и т.д. тут придётся использовать настольную версию программ. О разнице функционала настольной версии и online можно писать отдельную статью. Здесь же рассмотрим отличия, связанные с совместной работой.

MS Word

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


Вносимые изменения станут видны другим соавторам только после их сохранения автором и обновления документа остальными пользователями.


Сохранение-обновление объединено в кнопке Save (Ctrl+S) Наличие обновлений индицируется иконкой напротив имени автора.


MS Excel

В случае с Excel возможности одновременной работы над документом нет. Нам предлагают либо всем перейти в онлайн версию –


либо встать в очередь —


MS PowerPoint

Напротив, в PowerPoint ни блокировки, ни обозначения элемента, над которым работает другой пользователь нет. Так что, о том, что кто-то ещё работает над той же презентацией, вы можете понять разве что через панель Share.


Наличие обновлений сигнализируется малоприметным статусом Updates Available. Статус появляется только после сохранения изменений автором, сами изменения появляются после обновления документа с помощью Save (Ctrl+S).


Мобильные устройства

Microsoft Word App и Microsoft PowerPoint App

При работе на Android абзац или элемент, над которым работает пользователь, не блокируется и возможна одновременная работа с ним, но и ничего не подсвечивается для других соавторов, Правки отображаются без дополнительных действий с небольшой задержкой. То, что кто-то другой работает над этим же элементом, можно видеть в меню “Share”.



Интересно было бы ещё протестировать на Windows Phone с Windows 10. Но в компании таких не нашлось.

Microsoft Excel App

Совместная работа real time в Excel App не поддерживается.


Выводы

В целом, функциональность совместного редактирования документов от Microsoft можно считать состоявшейся, хотя разные компоненты реализуют ее по-разному. Сам по себе процесс совместного редактирования лучше всего реализован в Office Online – это реальный co-working. В список вещей, на которые можно смотреть вечно, добавлю себе движущиеся по экрану флажки с именами коллег и постепенно заполняющийся сам по себе документ. Но, к сожалению, за полноценным функционалом редактирования как такового по-прежнему придётся обращаться к настольным версиям программ, в которых ещё осталась и нужна кнопка сохранения, а также не так удобно реализован процесс совместной работы (больше всего пока страдает Excel, где все так и осталось на уровне чекина-чекаута).

В следующей заметке мы расскажем, как осуществить процесс разворачивания on-premise компонент совместного доступа в корпоративной инфраструктуре. Ферма SharePoint 2016, Office Online Server, публикация – вот это все. Не отключайтесь.

Не секрет, что Excel довольно мощный инструмент для работы с числовыми табличными данными. Однако средства, которые предоставляет Microsoft для интеграции с ним, далеки от идеала. В частности, сложно интегрировать в Excel современные пользовательские интерфейсы. Нам нужно было дать пользователям Excel возможность работать с довольно насыщенным и функциональным интерфейсом. Мы пошли несколько другим путем, который в итоге показал хороший результат. В этой статье я расскажу, как можно организовать интерактивное взаимодействие Excel c веб-приложением на Angular и расшить Excel практически любым функционалом, который реализуем в современном веб-приложении.




Итак, меня зовут Михаил и я CTO в Exerica. Одна из проблем которые мы решаем — облегчение работы финансовых аналитиков с числовыми данными. Обычно они работают как с исходными документами финансовой и статистической отчетности, так и каким-либо инструментом для создания и поддержания аналитических моделей. Так сложилось, что 99% аналитиков работают в Microsoft Excel и делают там довольно сложные вещи. Поэтому перевести их с Excel на другие решения не эффективно и практически невозможно. Объективно, «облачные» сервисы электронных таблиц до функционала Excel пока не дотягивают. Но в современном мире инструменты должны быть удобны и соответствовать ожиданиям пользователей: открываться по клику мышки, иметь удобный поиск. А реализация в виде разных несвязанных приложений будет довольно далека от ожиданий пользователя.

То с чем работает аналитик выглядит примерно так:


Основные данные тут — это числовые «финансовые показатели», например, доход за 1 квартал 2020 года. Для простоты буду называть их дальше просто «числами». Как видно, почти никакой связи между числами в документе и в аналитической модели нет, все только в голове у аналитика. И работа с заполнением и поддержанием модели занимает часы поиска и перебивания чисел из документа в таблицы, а потом поиск ошибок ввода. Вместе этого мы хотели бы предложить пользователю привычные инструменты: «перетаскивание», вставка через клипборд и так далее, а также быстрый просмотр исходных данных.

Что у нас уже было


Связываем данные

Кроме UDF наш addin реализует ribbon (панель инструментов) с настройками и некоторыми полезными функциями по работе с данными.

Добавляем интерактивность


Вставляем данные в Excel

В нашем SPA мы подсвечиваем все числа, которые обнаружила система. Пользователь может выделять их, навигировать по ним и т.п. Для вставки данных мы реализовали 3 механизма, чтобы закрыть различные варианты использования:

  • Перетаскивание (drag-and-drop)
  • Автоматическая вставка по клику в SPA
  • Копирование и вставка через клипборд

Эти способы хороши, когда пользователю нужно вставлять в свою модель по одному числу, но если надо перенести целую таблицу или ее часть, необходим другой механизм. Наиболее привычным для пользователей представляется копирование через клипборд. Однако этот способ оказался сложнее первых двух. Дело в том, что для удобства вставляемые данные должны быть представлены в нативном для Excel формате — OpenXML Spreadsheet. Наиболее просто это реализуется используя объектную модель Excel, то есть из addin’а. Поэтому процесс формирования клипборда у нас выглядит так:

  • Пользователь выделяет область с числами в SPA
  • Массив выделенных чисел передается на Notification Service
  • Notification Service передает его в addin
  • Addin формирует OpenXML и вставляет его в клипборд
  • Пользователь может вставить данные из клипборда в любое место любой Excel-таблицы.


Несмотря на то, что данные проделывают довольно долгий путь, благодаря SignalR и RTD происходит это довольно быстро и абстрагированно от пользователя.

Распространяем данные

После того, как пользователь выбрал начальные данные для своей модели, их надо «распространить» все периоды (года, полугодия и кварталы), которые представляют интерес. Для этих целей одним из параметров нашей UDF является дата (период) данного числа (вспоминаем: «доход за 1 квартал 2020 года»). В Excel существует нативный механизм «распространения» формул, который позволяет заполнить ячейки той же формулой с учетом ссылок, заданных в параметрах. То есть вместо конкретной даты в формулу вставлена ссылка на нее, а далее пользователь «распространяет» ее на другие периоды, при этом в таблицу автоматически загружаются «те же» числа из других периодов.

А что это там за число?

Теперь у пользователя есть модель на несколько сотен строк и несколько десятков столбцов. И у него может возникнуть вопрос, что же там за число в ячейке L123? Чтобы получить ответ, у нас ему достаточно кликнуть на эту ячейку и в нашем SPA откроется тот самый отчет, на той самой странице, где записано кликнутое число, а число в отчете будет выделено. Вот так:


А если это не просто одно число из отчета, а результат некоторых вычислений на числах, взятых из отчета, то мы подсветим все числа, входящие в вычисляемое в Excel выражение. При этом не происходит загрузки всего приложения и подгрузки всех необходимых данных, как в случае перехода по ссылке.

В качестве заключения

Вот такая, на мой взгляд, нестандартная реализация взаимодействия между Excel и веб-приложением получилась довольно удобной для пользователя. Благодаря использованию Excel порог входа для пользователей из целевой аудитории довольно низкий. При этом мы получаем также всю мощь Excel по работе с числовыми данными. Сами данные всегда остаются связанными с источником, а также связанными во времени. Для целевых клиентов нет необходимости встраивать в бизнес-процесс работы с данными абсолютно новые внешние системы. Наше решение встраивается как дополнительный «инструмент» внутри Excel, что является стандартом де-факто для провайдеров финансовых данных.

Подобный архитектурный подход к интеграции веб-приложений с Microsoft Excel может быть применим и для решения других задач, требующих интерактива и сложных пользовательских интерфейсов при работе с числовыми и табличными данными.

Все началось около четырех лет назад. Работая над очередным проектом по автоматизации бизнес-процессов для крупной российской сети розничной торговли, я заинтересовался разработкой надстроек для офисных приложений, в частности, для Excel. Стоило мне несколько дней понаблюдать, как сотрудники компании-заказчика тратят уйму времени на рутинные повторяющиеся операции, как у меня появилось множество идей о том, как бы я мог упростить им жизнь.

  • VBA (Visual Basic for Applications);
  • VSTO (Visual Studio Tools for Office).



Думаю, всем разработчикам надстроек для Excel хорошо известны преимущества и недостатки обоих подходов. Большим преимуществом и того, и другого является очень богатое API, позволяющее автоматизировать практически любые задачи. К недостаткам же стоит отнести сложности в установке подобных расширений. Особенно это касается надстроек на базе VSTO, где, зачастую, для инсталляции требуются административные права, получение которых может быть проблематичным для конечных пользователей.

По ряду причин, обсуждение которых выходит за рамки данной статьи, я выбрал для себя вариант с VSTO. Так родилась наша первая надстройка для Microsoft Excel — XLTools. В первую версию продукта вошли инструменты, позволяющие:

  • производить очистку данных в ячейках Excel (удалять лишние пробелы и непечатные символы, приводить регистр к единому виду, и т.д.);
  • преобразовывать таблицы из «двумерного вида» в «плоский» (unpivot);
  • сравнивать данные в столбцах;
  • инструмент для автоматизации всех вышеперечисленных действий.

Появление Office Store

Буквально через год после выхода в свет первой версии надстройки XLTools, мы узнали, что Microsoft запускает новую платформу для продвижения расширений под Office – Office Store. Моя первая мысль – а можем ли мы опубликовать там нашу новую надстройку XLTools? Может к сожалению, а может к счастью, но ответ на этот вопрос – НЕТ. Ни VBA, ни VSTO надстройки не могут быть опубликованы в Office Store. Но стоит ли расстраиваться? К счастью, и здесь ответ – НЕТ, не стоит. Далее я объясню – почему.

Новая концепция Add-Ins для Office

Что же такое Office Store и для чего он нам нужен? Если кратко, то это платформа, которая помогает пользователям и разработчикам искать, скачивать, продавать и покупать надстройки, расширяющие стандартный функционал Office-программ, будь то Excel, Word, Outlook, OneNote или PowerPoint. Если раньше конечным пользователям приходилось искать нужные им надстройки в поисковиках, то сейчас для этого создано единое место – Office Store, доступ к которому возможен прямо из интерфейса офисных программ. Пункт меню «Вставка» -> «Мои надстройки»:


Как мы уже выяснили, опубликовать надстройки, разработанные с использованием VBA или VSTO, в Office Store не получится. С выходом Office 365 и Office Store, Microsoft предложила нам новый способ разработки надстроек с использованием JavaScript API для Office, подразумевающий разработку приложений с использованием веб-технологий, таких как HTML5, CSS, JavaScript и Web Services.

Новый подход обладает как преимуществами, так и недостатками. К преимуществам можно отнести:

  • Простоту установки надстроек из Office Store;
  • Кроссплатформенность из коробки (Excel 2013/2016, Excel Online, Excel for iPad);
  • Возможность использования накопленного опыта веб-разработки (нет необходимости изучать новые технологии, если в команде уже есть веб-разработчики);
  • Готовая инфраструктура, позволяющая продавать надстройки по фиксированной цене или по подписке.
  • Менее богатое API по сравнению с VSTO и VBA (надеюсь, эта проблема будет становиться все менее и менее актуальной с выходом новых версий API).

Разработка надстроек для Excel «по новым правилам»


Итак, с чего же начать, если мы хотим идти в ногу со временем и не упустить новую волну приложений для Office?

Есть два варианта. На текущий момент, разрабатывать приложения на базе JavaScript API мы можем в:

  • Napa – легковесная веб-версия среды разработки для быстрого старта. Будет полезна разработчикам, у которых нет Visual Studio, или тем, кто хочет разрабатывать под операционной системой, отличной от Windows;
  • Visual Studio, начиная с версии 2012, с установленным пакетом Office Developer Tools – более мощная и функциональная среда разработки. Те, кто раньше разрабатывал под VSTO, могут сразу начинать с этого варианта, т.к. Visual Studio у них уже есть.
  • Первое отличие заключается в том, что, разрабатывая надстройки на VBA или VSTO, мы могли создавать так называемые «пакетные» продукты, в состав которых входил целый ряд функций. XLTools является отличным примером – надстройка включает в себя множество опций для работы с ячейками, таблицами, столбцами, и т.д. При разработке надстроек для Office Store о таком подходе придется забыть. Планируя разработку, мы должны задуматься над тем, какие именно законченные, изолированные друг от друга функции мы хотим предоставить конечным пользователям. В случае с XLTools, те функции, которые изначально были реализованы в одной надстройке, сейчас представлены пятью отдельными приложениями в Office Store. Такой подход позволяет сделать решения более узконаправленными и повысить количество скачиваний надстроек целевыми пользователями;
  • Второе отличие заключается в разнице между JavaScript API и VSTO/VBA API. Здесь стоит детально изучить возможности, предоставляемые JavaScript API. Для этого советую воспользоваться приложениями API Tutorial (Task Pane) и API Tutorial (Content) от Microsoft.

Разработка надстройки для Excel c использованием Visual Studio и JavaScript API

По умолчанию в Visual Studio есть предустановленные шаблоны проектов для разработки надстроек под Office Store, поэтому создание нового проекта занимает буквально секунды.


Сам проект состоит из файла-манифеста и веб-сайта. Файл манифеста выглядит так:


Основное, что нужно отметить в этом файле:

  • Id – должен быть уникальным для каждого приложения;
  • Version – должна совпадать с версией, указываемой при публикации надстройки через Seller Dashboard (личный кабинет вендора/разработчика, через который осуществляется все управление надстройками, публикуемыми в Office Store);
  • IconUrl и SupportUrl – ссылки должны быть работающими и указывать на расположение картинки-логотипа и страницы с описанием функционала надстройки. В случае, если ссылки будут указаны неверно, манифест не пройдет проверку при публикации через Seller Dashboard;
  • Permissions – определяет уровень доступа надстройки к данным документа. Может принимать такие значения как Restricted, Read document, Read all document, Write document, Read write document;
  • SourceLocation – путь к «домашней» странице приложения на веб-сайте.
  • Добавление «привязки» к выбранному пользователем диапазону ячеек в Excel для дальнейшей работы с ними:
  • Получение данных из диапазона ячеек с использованием ранее созданной «привязки»:
  • Обновление данных в диапазоне ячеек с использованием ранее созданной «привязки»:

Все методы JavaScript API хорошо документированы, их подробное описание можно посмотреть на сайте MSDN.

В зависимости от сценария, обработка данных может происходить как непосредственно на клиенте, т.е. в JavaScript-коде, так и на сервере. Для обработки данных на сервере можно добавить нужные сервисы прямо на сайт, к примеру, с использованием Web API. Общение клиента (надстройки) с веб-сервисами происходит так же, как мы привыкли это делать на любом другом сайте – при помощи AJAX-запросов. Единственное, что нужно учитывать – если Вы планируете использовать сторонние сервисы, расположенные на чужих доменах, то непременно столкнетесь с проблемой same-origin policy.

Публикация надстройки в Office Store


Выводы

В заключение стоит сказать, что надстройки XLTools являются отличным примером того, как можно трансформировать существующие решения на базе технологий VBA/VSTO в кроссплатформенные решения для Office 365. В нашем случае, мы смогли перенести в Office Store добрую половину функций из Desktop-версии XLTools, реализовав шесть отдельных приложений.

Читайте также: