Гость
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Доступ к данным из двоичного файла ECXEL / 16 сообщений из 16, страница 1 из 1
16.06.2020, 17:24
    #39969851
boyarinroman
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Доступ к данным из двоичного файла ECXEL
Ребята, привет.

В MS SQL есть таблица, которая хранит в себе EXCEL файлы в виде двоичного кода (тип поля varbinary(max)).

У меня вопрос:

Можно ли как-нибудь, средствами SQL получить доступ к данным двоичного файла EXCEL , не выгружая (формируя) его в EXCEL ?
...
Рейтинг: 0 / 0
16.06.2020, 17:43
    #39969860
a_voronin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Доступ к данным из двоичного файла ECXEL
boyarinroman
Ребята, привет.

В MS SQL есть таблица, которая хранит в себе EXCEL файлы в виде двоичного кода (тип поля varbinary(max)).

У меня вопрос:

Можно ли как-нибудь, средствами SQL получить доступ к данным двоичного файла EXCEL , не выгружая (формируя) его в EXCEL ?


У Excel несколько форматов хранения. Один из них -- неупакованный XML. Вот до него вы теоретически cможете добраться XML-функционалом из MSSQL.

Но форматом по умолчанию является набор XML упакованный в ZIP. Такому файлу вообще можно сменить расширение на zip и открыть zip-ом или WinRar-ом.

В общем если там не чистый XML, то как минимум придется CLR писать.

https://www.sql.ru/forum/1325823/ssis-script-task-kak-dobratsya-do-obektnoy-modeli-excel
...
Рейтинг: 0 / 0
17.06.2020, 10:11
    #39970053
Alexander Us
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Доступ к данным из двоичного файла ECXEL
boyarinroman,

Библиотека EPPLus может загружать Excel прямо из стима.
Не требует установки Excel на сервере.
Есть масса примеров.
Версии до 5.0 бесплатны.

Думаю, Вы можете написать CLR функцию, которая бы вынимала данные из полей не выгружая в файлы.
...
Рейтинг: 0 / 0
17.06.2020, 10:29
    #39970059
a_voronin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Доступ к данным из двоичного файла ECXEL
А никто не пробовал развернуть такой Excel до XML с помощью DECOMPRESS?
...
Рейтинг: 0 / 0
17.06.2020, 10:48
    #39970065
aleks222
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Доступ к данным из двоичного файла ECXEL
a_voronin
А никто не пробовал развернуть такой Excel до XML с помощью DECOMPRESS?

Зачем, дарагой?
[System.IO.Compression.ZipFile]::OpenRead( $fileZIP )
незатейливо откроет его содержимое для чтения, как обычные файлы в папке.

ЗЫ. В теории, Windows имеет возможность читать-писать сжатые ZIP-папки.

ZIP-файл
:\Gate\In\Costa\XML>dir "ExportItineraryAndSteps_Pacific Asia.xml.zip"
Том в устройстве C имеет метку System
Серийный номер тома: 540E-56D7

Содержимое папки C:\Gate\In\Costa\XML

7.06.2020 10:01 2 344 ExportItineraryAndSteps_Pacific Asia.xml.zip
1 файлов 2 344 байт
0 папок 70 009 847 808 байт свободно
=================================

Содержимое ZIP-файла
:\Gate\In\Costa\XML>dir "ExportItineraryAndSteps_Pacific Asia.xml"
Том в устройстве C имеет метку System
Серийный номер тома: 540E-56D7

Содержимое папки C:\Gate\In\Costa\XML

7.06.2020 10:01 36 227 ExportItineraryAndSteps_Pacific Asia.xml
1 файлов 36 227 байт
0 папок 70 011 420 672 байт свободно
...
Рейтинг: 0 / 0
17.06.2020, 10:50
    #39970066
Alexander Us
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Доступ к данным из двоичного файла ECXEL
a_voronin
А никто не пробовал развернуть такой Excel до XML с помощью DECOMPRESS?

А что это даст? Ведь Excel файл ничто иное как ZIP архив с несколькими файлами и папками.
Не проще использовать EPPLus?
...
Рейтинг: 0 / 0
17.06.2020, 10:52
    #39970069
Alexander Us
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Доступ к данным из двоичного файла ECXEL
a_voronin
А никто не пробовал развернуть такой Excel до XML с помощью DECOMPRESS?

ЗЫ: просто переименуйте *.xlsx на *.zip и открывайте.
...
Рейтинг: 0 / 0
17.06.2020, 11:11
    #39970079
a_voronin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Доступ к данным из двоичного файла ECXEL
Alexander Us
a_voronin
А никто не пробовал развернуть такой Excel до XML с помощью DECOMPRESS?

ЗЫ: просто переименуйте *.xlsx на *.zip и открывайте.



Открыть с помощью DECOMPRESS байты, которые лежать в varbinary(MAX) поле в БД. DECOMPRESS это функция в MSSQL.

https://docs.microsoft.com/en-us/sql/t-sql/functions/decompress-transact-sql?view=sql-server-ver15
...
Рейтинг: 0 / 0
17.06.2020, 11:27
    #39970096
Alexander Us
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Доступ к данным из двоичного файла ECXEL
a_voronin,

Согласен, открыть можно. Но что делать потом, ведь Вы откроете не один xml файл, а целую папку.
Или я не понял Вашу идею?
...
Рейтинг: 0 / 0
17.06.2020, 11:39
    #39970103
Сон Веры Павловны
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Доступ к данным из двоичного файла ECXEL
Alexander Us
a_voronin,

Согласен, открыть можно. Но что делать потом, ведь Вы откроете не один xml файл, а целую папку.
Или я не понял Вашу идею?

Наверное, есть желание лежащие внутри xlsx xml-файлы разбирать с помощью XQuery. Это крайне хлопотное дело в плане интерпретации результатов, т.к. в ECMA-376 part.1 описание SpreadsheetML занимает более 900 страниц. Действительно, лучше уж EPPlus.
Alexander Us
Версии до 5.0 бесплатны.

И от 5.0 тоже бесплатны, надо только в начале работы установить
Код: c#
1.
ExcelPackage.LicenseContext = LicenseContext.NonCommercial;


Ну, и к тому же у ТСа в базе может храниться обычный старый xls, который не конвертируется ни в какой XML, и тут уже без выгрузки никак. И EPPlus здесь тоже не поможет.
...
Рейтинг: 0 / 0
17.06.2020, 12:15
    #39970119
a_voronin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Доступ к данным из двоичного файла ECXEL
aleks222,

С парзингом экселей с помощью C# проблем ни на секунду нет. С диска или из потока -- один хрен.


Вот парзануть в контексте SQL запроса из varbinary поля с помощью MSSQL функций, вот это более интересно.
...
Рейтинг: 0 / 0
17.06.2020, 12:19
    #39970123
a_voronin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Доступ к данным из двоичного файла ECXEL
Сон Веры Павловны

Наверное, есть желание лежащие внутри xlsx xml-файлы разбирать с помощью XQuery. Это крайне хлопотное дело в плане интерпретации результатов, т.к. в ECMA-376 part.1 описание SpreadsheetML занимает более 900 страниц. Действительно, лучше уж EPPlus.


Понятно, что Open XML Document или EPPlus парзанут без вопросов версии от 2003 года в любых форматах, но не формат до 1997 года. Как правило, чтобы парзануть данные нужно добраться до листа и словаря строк. тот, кто понимает структуру формата Эксель от 2003, должен это без проблем сделать.
...
Рейтинг: 0 / 0
17.06.2020, 13:30
    #39970166
Сон Веры Павловны
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Доступ к данным из двоичного файла ECXEL
a_voronin
Как правило, чтобы парзануть данные нужно добраться до листа и словаря строк. тот, кто понимает структуру формата Эксель от 2003, должен это без проблем сделать.

Ну, в принципе BIFF8 документирован - Microsoft сама выложила его спецификацию , хотя и в ней 300 страниц описания байтовых сдвигов. Однако, мир не без добрых людей - можно внутри CLR-функции cчитать бинарный xls в DataSet, который потом сериализовать в XML через WriteXml, а последний уже читать с помощью XQuery.
...
Рейтинг: 0 / 0
19.06.2020, 14:12
    #39970902
boyarinroman
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Доступ к данным из двоичного файла ECXEL
a_voronin,

Вот именно это я и хочу сделать. Кто бы проконсультировал бы...
...
Рейтинг: 0 / 0
19.06.2020, 14:12
    #39970903
boyarinroman
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Доступ к данным из двоичного файла ECXEL
a_voronin
aleks222,

С парзингом экселей с помощью C# проблем ни на секунду нет. С диска или из потока -- один хрен.


Вот парзануть в контексте SQL запроса из varbinary поля с помощью MSSQL функций, вот это более интересно.



Вот именно это я и хочу сделать. Кто бы проконсультировал бы...
...
Рейтинг: 0 / 0
19.06.2020, 15:04
    #39970931
a_voronin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Доступ к данным из двоичного файла ECXEL
boyarinroman
a_voronin,

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


Я рекомендую вам написать CLR. которая использует OpenXmlDocument.

https://docs.microsoft.com/en-us/office/open-xml/open-xml-sdk

Хотя сама идея изначально держать эксели в БД не очень хорошая.
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Доступ к данным из двоичного файла ECXEL / 16 сообщений из 16, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]