Запрос к postgresql из excel
В процессе обучения аналитике данных у человека неизбежно возникает вопрос о миграции данных из одной среды в другую. Поскольку одним из необходимых навыков для аналитика данных является знание SQL, а одной из наиболее популярных СУБД является PostgreSQL, предлагаю рассмотреть импорт и экспорт данных на примере этой СУБД.
В своё время, столкнувшись с импортом и экспортом данных, обнаружилось, что какой-то более-менее структурированной инфы мало: этот момент обходят на всяких там курсах по аналитике, подразумевая, что это очень простые моменты, которым не следует уделять внимание.
В данной статье приведены примеры импорта в PostgreSQL непосредственно самой базы данных в формате sql, а также импорта и экспорта данных в наиболее простом и распространенном формате .csv, в котором в настоящее время хранятся множество существующих датасетов. Формат .json хоть и является также очень распространенным, рассмотрен не будет, поскольку, по моему скромному мнению, с ним все-таки лучше работать на Python, чем в SQL.
1. Импорт базы данных в формате в PostgreSQL
Скачиваем (получаем из внутреннего корпоративного источника) файл с базой данных в выбранную папку. В данном случае путь:
Имя файла: demo-big-20170815
Далее понадобиться командная строка windows или SQL shell (psql). Для примера воспользуемся cmd. Переходим в каталог, где находится скачанная БД, командой cd C:\Users\User-N\Desktop\БД :
Далее выполняем команду для загрузки БД из sql-файла:
"C:\Program Files\PostgreSQL\10\bin\psql" -U postgres -f demo-big-20170815.sql
Где сначала указывается путь, по которому установлен PostgreSQL на компьютере, -U – имя пользователя, -f - название файла БД.
Отметим, что в зависимости от размера базы данных загрузка может занимать до нескольких десятков минут. Конец загрузки будет отмечен следующим видом:
Заходим в pgAdmin и наблюдаем там импортированную БД:
2. Импорт данных из csv-файла
Предполагается, что у вас уже есть необходимый .csv-файл, и первое, что нужно сделать, это перейти pgAdmin и создать там новую базу данных. Ну или воспользоваться уже существующей, в зависимости от текущих нужд. В данном случае была создана БД airtickets.
В выбранной БД создается таблица с полями, типы которых должны соответствовать «колонкам» в выбранном .csv-файле.
Далее воспользуемся SQL shell (psql) для подключения к нужной БД и для подачи команд на импорт данных. При открытии SQL shell (psql) она стандартно спросит про имя сервера, имя подключаемой БД, порт и пользователя. Ввести нужно только имя БД и пароль пользователя, всё остальное проходим нажатием ентра. Создается подключение к нужной БД – airtickets.
Ну и вводим команды на импорт данных из файла:
\COPY tickets FROM ‘C:\Users\User-N\Desktop\CSV\ticket_dataset_MOW.csv’ DELIMITER ‘,’ CSV HEADER;
Где tickets – название созданной в БД таблицы, из – путь, где хранится .csv-файл, DELIMITER ‘,’ – разделитель, используемый в импортируемом .csv-файле, сам формат файла и HEADER , указывающий на заголовки «колонок».
Один интересный момент. Написание команды COPY строчными (маленькими) буквами привело к тому, что psql ругнулся, выдал ошибку и предложил написать команду прописными буквами.
Заходим в pgAdmin и удостоверяемся, что данные были загружены.
3. Экспорт данных в .csv-файл
Предположим, нам надо сохранить таблицу airports_data из уже упоминаемой выше БД demo.
Для этого подключимся к БД demo через SQL shell (psql) и наберем команду, указав уже знакомые параметры разделителя, типа файла и заголовка:
\COPY airports_data TO ‘C:\Users\User-N\Desktop\CSV\airports.csv’ DELIMITER ‘,’ CSV HEADER;
Существует и другой способ экспорта через pgAdmin: правой кнопкой мыши по нужной таблице – экспорт – указание параметров экспорта в открывшемся окне.
4. Экспорт данных выборки в .csv-файл
Иногда возникает необходимость сохранить в .csv-файл не полностью всю таблицу, а лишь некоторые данные, соответствующие некоторому условию. Например, нам нужно из БД demo таблицы flights выбрать поля flight_id, flight_no, departure_airport, arrival_airport, где departure_airport = 'SVO'. Данный запрос можно вставить сразу в команду psql:
\COPY (SELECT flight_id, flight_no, departure_airport, arrival_airport FROM flights WHERE departure_airport = 'SVO') TO ‘C:\Users\User-N\Desktop\CSV\flights_SVO.csv' CSV HEADER DELIMITER ',';
Приветствую всех.
При автоматизации небольших магазинов для хранения данных часто используют PostgreSQL. И часто возникает потребность экспортировать эти данные в Excel. В этой статье я расскажу вам как я решал эту задачу. Естественно, матерые специалисты вряд ли откроют для себя что-то новое. Однако, материал будет интересен тем кто «плавает» в этой теме.
Итак, естественно, самый просто и банальный способ экспортировать данные результатов запросов в csv-файлы, а затем открыть их в Excel. Это выглядит вот так:
- во-первых, вставка данных из PostgreSQL происходит именно на сервере;
- во-вторых, можно конечно заморочиться написать batch-скрипт, который будет удаленно вызывать этот запрос на сервере, затем этот файл скопировать на компьютер пользователя и инициировать открытие в Excel.
1. Идем по ссылке и в зависимости от разрядности компьютера скачиваем установщик ODBC драйвера. Установка его проста и не требует особых знаний.
2. Чтобы пользователи могли со своих компьютеров цепляться к БД не забудьте в файле pg_hba.conf установить параметры для IP-адресов, с которых можно производить подключения:
В данном примере, что все рабочие станции смогут подключаться к серверу с БД:
3. Далее через Excel просто генерируем файл динамического запроса к данным *.dqy. Далее этот файл просто можно менять по своему усмотрению. Можно прям ниже следующий текст взять, скопировать в блокнот и там отредактировать, сохранив файл *.dqy. Вводим имя файла и расширение dqy. Выбираем типа файла ВСЕ(All files):
DATABASE – указывается наименование БД к которой будет производиться подключение;
SERVER – адрес сервера;
PASSWORD – пароль на подключение к БД.
Обратите внимание, что в большом тексте указываются параметры подключения к БД и ваша БД. Также можно еще сконфигурировать множество параметров подключения
В последней строке пишется сам запрос. Далее сохраняем файл. Если на компьютере установлен Microsoft Excel, тогда файл сразу же приобретет пиктограмму:
При запуске файла будет выдано диалоговое окно. Смело нажимаем «Включить»:
И получаем результат запроса из БД:
Теперь можно создать несколько таких файлов и спокойно скопировать их на рабочий стол пользователя:
Кстати, я пошел немного дальше. Откопал старый добрый VB6. Можно так сделать с любым языком программирования. Сделал форму, которая по выбранной дате запрашивает данные из БД, путем генерации этого *.dqy файла:
Затем немного покодил (вот часть кода):
Результат получился тот же — данные из Excel, и пользователю удобно. Да, кстати, в строке:
если речь идет о 64-битном процессоре и драйвере ODBC, установленном для 64 бит, то надо писать:
Ну, и самое главное, несмотря на всю простоту способа, у него есть конечно недостатки: запрос можно писать только в одну строку, т.е. записать строку вот в таком виде не получиться. Нужно только в одну:
— Не сможет обрабатывать на изменение данных типа:
или
Ну и может выводить только результат запроса в виде списка, т.е. красивый документ сделать не получиться. На этом все. Надеюсь данный способ кому-нибудь пригодиться. Буду рад получить ваши рекомендации по усовершенствованию моего метода или альтернативного решения данной проблемы.
Советы и хитрости
Все мы знаем (особенно если мы частые или постоянные пользователи СУБД PostgreSQL), что СУБД PostgreSQL имеет дело с данными из различных форматов. Однако есть еще некоторые форматы, совместимость которых с СУБД PostgreSQL вызывает сомнения. Одним из таких форматов файлов является формат Excel, то есть xls или xlsx. Многие люди задаются вопросом, можем ли мы напрямую импортировать данные из таблицы Excel в таблицу PostgreSQL в Windows 10 или нет. Что ж, чтобы изучить ответ на этот вопрос, вам нужно будет прочитать эту статью. Кроме того, в этой статье мы также поделились методом, который позволит вам использовать данные таблицы Excel в таблице PostgreSQL в Windows 10.
Как импортировать данные Excel в PostgreSQL в Windows 10?
Если мы конкретно поговорим об этом вопросе, «могу ли я загрузить Excel в PostgreSQL в Windows 10?» то ответ на этот вопрос — «Нет». Мы не можем напрямую импортировать данные из таблицы Excel в таблицу PostgreSQL в Windows 10. Однако есть другие обходные пути, с помощью которых мы можем легко импортировать данные файла Excel в таблицу PostgreSQL в Windows 10. Мы будем поговорим об одном таком обходном пути в следующих разделах этой статьи.
Тогда что мне делать, если у меня есть большой лист Excel, данные которого мне нужны в таблице PostgreSQL?
Теперь вы можете задаться вопросом, что вы можете сделать с таблицей Excel, которая у вас есть и содержит большое количество полезных данных. Будут ли эти данные потрачены впустую, поскольку вы не сможете напрямую импортировать их в таблицу PostgreSQL в Windows 10? К счастью, нет. Вы по-прежнему можете использовать эти данные, преобразовав их в один из таких форматов, поддерживаемых PostgreSQL в Windows 10. После преобразования ваших данных в соответствующий формат процесс импорта становится очень простым, и вы сможете увидеть его, выполнив следующие шаги:
Шаг 1: преобразование листа Excel в файл CSV в Windows 10
Поскольку наиболее часто используемый формат файла при работе с базами данных — это CSV, поэтому мы сначала преобразуем целевой лист Excel в файл CSV. Существуют и другие форматы, поддерживаемые PostgreSQL; однако здесь мы выбрали наиболее часто используемый, а также наиболее удобный, то есть CSV. Чтобы преобразовать лист Excel в файл CSV в Windows 10, вам сначала нужно найти этот файл, перейдя в целевой каталог, как показано на изображении ниже, а затем открыть этот лист Excel с помощью программы MS Excel.
В нашем целевом листе Excel у нас были некоторые образцы данных, показанные на следующем изображении. Таблица Excel состоит из трех разных столбцов, а именно StudentName, StudentAge и StudentGender. Этот лист Excel содержит в общей сложности пять различных записей или записей. Открыв целевой лист Excel, мы нажмем на меню «Файл» в строке меню, как вы можете видеть на изображении, показанном ниже:
В меню «Файл» мы найдем и щелкнем по опции «Сохранить как», как показано на добавленном изображении:
В диалоговом окне «Сохранить как» мы развернем раскрывающийся список «Тип файла» и выберем формат «CSV (с разделителями-запятыми)», как показано на изображении ниже:
После этого мы выберем место для сохранения нашего CSV-файла и нажмем кнопку «Сохранить».
После преобразования листа Excel в файл CSV процесс его загрузки в таблицу PostgreSQL будет точно таким же, как и у обычного файла CSV, и вы поймете это, выполнив следующие шаги.
Шаг 2: Создание соответствующей таблицы в PostgreSQL в Windows 10
Теперь, когда у нас есть файл CSV, содержащий нужные данные для импорта, мы создадим таблицу PostgreSQL для хранения этих данных с помощью следующего запроса:
Этот запрос создаст таблицу с именем student_Data с тремя разными столбцами, то есть StudentName, StudentAge и StudentGrade соответственно. Эти три столбца будут содержать все данные, которые будут импортированы из файла CSV.
После успешного создания таблицы PostgreSQL на консоли появится ответ «СОЗДАТЬ ТАБЛИЦУ».
Шаг 3: Импорт данных файла CSV в таблицу PostgreSQL в Windows 10
После создания таблицы в PostgreSQL в Windows 10 мы выполним процесс импорта данных файла CSV в эту таблицу PostgreSQL, выполнив запрос, показанный ниже:
Ключевое слово «COPY» в этом запросе импортирует данные из файла CSV в таблицу PostgreSQL. «Student_Data» — это имя таблицы PostgreSQL, в которую будут импортированы данные файла CSV. Затем за ключевым словом «FROM» следует путь, по которому мы будем читать файл CSV. Наше имя файла CSV было «Excel.csv». Ключевое слово «DELIMITER» следует за разделителем, используемым в файле CSV, который представлял собой запятую. Ключевое слово «CSV» представляет формат файла, который будет читать этот запрос. Наконец, ключевое слово «HEADER» указывает, что в файле CSV есть заголовок, который будет читать этот запрос. Эта строка заголовка будет пропущена после импорта данных в таблицу PostgreSQL, и вместо нее будет использоваться заголовок таблицы, то есть имена столбцов таблицы.
Шаг 4: Отображение содержимого таблицы PostgreSQL в Windows 10
Наконец, чтобы убедиться, что данные нашей таблицы Excel (которые затем стали данными файла CSV) были успешно загружены в таблицу PostgreSQL, мы просмотрим содержимое таблицы PostgreSQL с помощью следующего запроса:
На изображении ниже вы можете видеть, что все записи в таблице student_Data точно такие же, как и в записях нашего файла Excel.csv. Это означает, что загрузка листа Excel (который был преобразован в файл CSV) в таблицу PostgreSQL в Windows 10 прошла успешно.
Заключение
В этой статье был рассмотрен очень важный вопрос, касающийся СУБД PostgreSQL, а именно: можем ли мы загружать Excel в PostgreSQL или нет. Эта статья удовлетворительно ответила на этот очень распространенный вопрос. Более того, он также обеспечивает очень безопасный метод фактического использования данных таблицы Excel в таблице PostgreSQL в Windows 10. После использования этого метода данные таблицы Excel никогда не будут потрачены впустую; скорее, вы сможете эффективно использовать его в любой из ваших таблиц PostgreSQL в Windows 10.
Хочу поделиться полезными приемами работы с PostgreSQL (другие СУБД имеют схожий функционал, но могут иметь иной синтаксис).
Постараюсь охватить множество тем и приемов, которые помогут при работе с данными, стараясь не углубляться в подробное описание того или иного функционала. Я любил подобные статьи, когда обучался самостоятельно. Пришло время отдать должное бесплатному интернет самообразованию и написать собственную статью.
Данный материал будет полезен тем, кто полностью освоил базовые навыки SQL и желает учиться дальше. Советую выполнять и экспериментировать с примерами в pgAdmin'e, я сделал все SQL-запросы выполнимыми без разворачивания каких-либо дампов.
1. Использование временных таблиц
При решении сложных задач трудно поместить решение в один запрос (хотя, многие стараются так сделать). В таких случаях удобно помещать какие-либо промежуточные данные во временную таблицу, для использования их в дальнейшем.
Такие таблицы создаются как обычные, но с ключевым словом TEMP, и автоматически удаляются после завершения сессии.
Ключ ON COMMIT DROP автоматически удаляет таблицу (и все связанные с ней объекты) при завершении транзакции.
2. Часто используемый сокращенный синтаксис Postgres
можно записать менее громоздко:
- Сокращенная запись конструкции (I)LIKE '%text%'
Поиск регулярными выражениями (имеет отличный от LIKE синтаксис)
оператор ~ (одна тильда) воспринимает регулярные выражения
оператор ~* (одна тильда и звездочка) регистронезависимая версия ~
Приведу пример поиска разными способами строк, которые содержат слово text
Cокращенный синтаксис | Описание | Аналог (I)LIKE |
---|---|---|
~ ‘text’ or ~~ ‘%text%’ | Проверяет соответствие выражению с учётом регистра | LIKE '%text%' |
~* ‘text’ ~~* ‘%text%’ | Проверяет соответствие выражению без учёта регистра | ILIKE '%text%' |
!~ ‘text’ !~~ ‘%text%’ | Проверяет несоответствие выражению с учётом регистра | NOT LIKE '%text%' |
!~* ‘text’ !~~* ‘%text%’ | Проверяет несоответствие выражению без учёта регистра | NOT ILIKE '%text%' |
3. Общие табличные выражения (CTE). Конструкция WITH
Очень удобная конструкция, позволяет поместить результат запроса во временную таблицу и тут же использовать ее.
Примеры будут примитивны, чтобы уловить суть.
a) Простой SELECT
Таким способом можно 'оборачивать' какие-либо запросы (даже UPDATE, DELETE и INSERT, об этом будет ниже) и использовать их результаты в дальнейшем.
b) Можно создать несколько таблиц, перечисляя их нижеописанным способом
c) Можно даже вложить вышеуказанную конструкцию в еще один (и более) WITH
По производительности следует сказать, что не стоит помещать в секцию WITH данные, которые будут в значительной степени фильтроваться последующими внешними условиями (за пределами скобок запроса), ибо оптимизатор не сможет построить эффективный запрос. Удобнее всего положить в CTE результаты, к которым требуется несколько раз обращаться.
4. Функция array_agg(MyColumn).
Значения в реляционной базе хранятся разрозненно (атрибуты по одному объекту могут быть представлены в нескольких строках). Для передачи данных какому-либо приложению часто возникает необходимость собрать данные в одну строку (ячейку) или массив.
В PostgreSQL для этого существует функция array_agg(), она позволяет собрать в массив данные всего столбца (если выборка из одного столбца).
При использовании GROUP BY в массив попадут данные какого-либо столбца относительно каждой группы.
Сразу опишу еще одну функцию и перейдем к примеру.
array_to_string(array[], ';') позволяет преобразовать массив в строку: первым параметром указывается массив, вторым — удобный нам разделитель в одинарных кавычках (апострофах). В качестве разделителя можно использовать
Табуляция \t — к примеру, позволит при вставки ячейки в EXCEL без усилий разбить значения на столбцы (использовать так: array_to_string(array[], E'\t') )
Перевод строки \n — разложит значения массива по строкам в одной ячейке (использовать так: array_to_string(array[], E'\n') — объясню ниже почему)
Выдаст результат:
Выполним обратное действие. Разложим массив в строки при помощи функции UNNEST, заодно продемонстрирую конструкцию SELECT columns INTO table_name. Помещу это в спойлер, чтобы статья не сильно разбухала.
Результат:
5. Ключевое слово RETURNIG *
указанное после запросов INSERT, UPDATE или DELETE позволяет увидеть строки, которых коснулась модификация (обычно сервер сообщает лишь количество модифицированных строк).
Удобно в связке с BEGIN посмотреть на что именно повлияет запрос, в случае неуверенности в результате или для передачи каких либо id на следующий шаг.
Можно использовать в связке с CTE, организую безумный пример.
Таким образом, выполнится удаление данных, и удаленные значения передадутся на следующий этап. Все зависит от вашей фантазии и целей. Перед применением сложных конструкций обязательно изучите документацию вашей версии СУБД! (при параллельном комбинировании INSERT, UPDATE или DELETE существуют тонкости)
6. Сохранение результата запроса в файл
У команды COPY много разных параметров и назначений, опишу самое простое применение для ознакомления.
7. Выполнение запроса на другой базе
Не так давно узнал, что можно адресовать запрос к другой базе, для этого есть функция dblink (все подробности в мануале)
Если возникает ошибка:
необходимо выполнить установку расширения следующей командой:
8. Функция similarity
Функция определения схожести одного значения к другому.
Использовал для сопоставления текстовых данных, которые были похожи, но не равны друг другу (имелись опечатки). Сэкономил уйму времени и нервов, сведя к минимуму ручную привязку.
similarity(a, b) выдает дробное число от 0 до 1, чем ближе к 1, тем точнее совпадение.
Перейдем к примеру. С помощью WITH организуем временную таблицу с вымышленными данными (и специально исковерканными для демонстрации функции), и будем сравнивать каждую строку с нашим текстом. В примере ниже будем искать то, что больше похоже на ООО «РОМАШКА» (подставим во второй параметр функции).
Получим следующий результат:
Если возникает ошибка
необходимо выполнить установку расширения следующей командой:
Получим такой результат:
Сортируем по similarity DESC. Первыми результатами видим наиболее похожие строки (1— полное сходство).
Необязательно выводить значение similarity в SELECT, можно просто использовать его в условии WHERE similarity(c_name, 'ООО «РОМАШКА»') >0.7
и самим задавать устраивающий нас параметр.
P.S. Буду признателен, если подскажете какие еще есть способы сопоставления текстовых данных. Пробовал убирать регулярными выражениями все кроме букв/цифр, и сопоставлять по равенству, но такой вариант не срабатывает, если присутствуют опечатки.
9. Оконные функции OVER() (PARTITION BY __ ORDER BY __ )
10. Множественный шаблон для LIKE
Задача. Необходимо отфильтровать список пользователей, имена которых должны соответствовать определенным шаблонам.
Как всегда, представлю простейший пример:
Имеем запрос, который выполняет свою функцию, но становится громоздким при большом количестве фильтров.
Продемонстрирую, как сделать его более компактным:
Можно проделать интересные трюки, используя подобный подход.
Напишите в комментариях, если есть мысли, как еще можно переписать исходный запрос.
11. Несколько полезных функций
NULLIF(a,b)
Возникают ситуации, когда определенное значение нужно трактовать как NULL.
Например, строки нулевой длины ( '' — пустые строки) или ноль(0).
Можно написать CASE, но лаконичнее использовать функцию NULLIF, которая имеет 2 параметра, при равенстве которых возвращается NULL, иначе выводит исходное значение.
COALESCE выбирает первое не NULL значение
GREATEST выбирает наибольшее значение из перечисленных
LEAST выбирает наименьшее значение из перечисленных
PG_TYPEOF показывает тип данных столбца
PG_CANCEL_BACKEND останавливаем нежелательные процессы в базе
Внимание! Ни в коем случае не убивайте зависший процесс через консоль KILL -9 или диспетчер задач.
Это может привести к краху БД, потере данных и долгому автоматическому восстановлению базы.
12. Экранирование символов
Начну с основ.
В SQL строковые значения обрамляются ' апострофом (одинарной кавычкой).
Числовые значения можно не обрамлять апострофами, а для разделения дробной части нужно использовать точку, т.к. запятая будет воспринята как разделитель
результат:
Все хорошо, до тех пор пока не требуется выводить сам знак апострофа '
Для этого существуют два способа экранирования (известных мне)
результат одинаковый:
В PostgreSQL существуют более удобный способ использовать данные, без экранирования символов. В обрамленной двумя знаками доллара $$ строке можно использовать практически любые символы.
получаю данные в первозданном виде:
Если этого мало, и внутри требуется использовать два символа доллара подряд $$, то Postgres позволяет задать свой «ограничитель». Стоит лишь между двумя долларами написать свой текст, например:
Увидим наш текст:
Для себя этот способ открыл не так давно, когда начал изучать написание функций.
Заключение
Надеюсь, данный материал поможет узнать много нового начинающим и «средничкам». Сам я не являюсь разработчиком, а могу лишь назвать себя любителем SQL, поэтому то, как использовать описанные приемы — решать Вам.
Желаю успехов в изучении SQL. Жду комментариев и благодарю за прочтение!
UPD. Вышло продолжение
Devart Excel Add-in for PostgreSQL allows you to quickly and easily connect Microsoft Excel to PostgreSQL, load data from PostgreSQL to Excel, instantly refresh data in an Excel workbook from the database, edit these data and save them back to PostgreSQL. Use Excel to work with PostgreSQL data, easily perform data cleansing and de-duplication. Apply all the Excel's powerful data processing and analysis capabilities to these data.
Connect to PostgreSQL Directly from Excel
To connect Excel to PostgreSQL you just need to specify its host, port, and your credentials.
As for security, PostgreSQL Excel Add-in supports secure SSL connections, secure authentication with single sign-on, etc.
Connection information may optionally be stored in the Excel file, or you may reenter it whenever necessary.
Use Query Builder or SQL to Import Data You Need
Visual Query Builder allows you to choose a table to import data from, select the columns from this table and related tables, and set filter conditions and data ordering options visually. If you need to select data more precisely, you can use SQL to select data you need.
Before finally importing data you can preview data and verify the query in a Data Preview window.
Instantly Refresh Data Whenever You Need
It's very convenient to always have fresh data from the database right in your workbook. Imagine, you have performed data analysis in your Excel workbook, built some charts for your PostgreSQL data, and you can re-read data from the source and update all this to the current state by just clicking a button on the ribbon whenever you need.
Edit PostgreSQL Data Like Usual Excel Spreadsheets
To edit PostgreSQL data in Excel you need just to click the Edit Mode button on the ribbon before editing, and then you can edit data just like you usually do it - add or delete rows, modify cell values, etc. All the changes are highlighted so you can easily see which data is changed.
After you finish editing, simply click Commit to write changes to the database or Rollback to cancel changes.
Instant Data Validation
Excel Add-in for PostgreSQL instantly validates entered data and highlights errors, such as incorrect dates, duplicate primary key values, etc.
Order all 23 Devart Excel Add-ins in one Universal Pack and get a fantastic discount! If you need add-ins only for cloud applications, you may order Devart Excel Add-in Cloud Pack. For databases, there is Devart Excel Add-in Database Pack available.
Читайте также: