Гость
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Книга Excel как набор данных MSSQL для доступа извне. / 25 сообщений из 31, страница 1 из 2
08.05.2020, 13:03
    #39955256
MAULER
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Книга Excel как набор данных MSSQL для доступа извне.
Здравствуйте.

Версия сервера:
Microsoft SQL Server 2017 (RTM) - 14.0.1000.169 (X64) Aug 22 2017 17:04:49 Copyright (C) 2017 Microsoft Corporation Enterprise Edition

Мне нужно подключиться внутри корпоративной сети к книге Excel как к таблице или вьюхе MSSQL. Книгу могут пополнять строками. короче говоря, её могут менять.

Вопрос: возможно ли на MSSQL как то "подготовить" что-ли, эту книгу в качестве вьюхи или таблицы, чтобы "ЭТО" было доступно для чтения командами MSSQL через select ?
...
Рейтинг: 0 / 0
08.05.2020, 13:14
    #39955262
a_voronin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Книга Excel как набор данных MSSQL для доступа извне.
MAULER,

1) Используйте OpenRowset с коннекшин стрингом по одному из форматов отсюда

https://www.connectionstrings.com/excel/

2) Напишите CLR, которая будет парзить ваши Эксельники и выдавать вам результат
...
Рейтинг: 0 / 0
08.05.2020, 13:21
    #39955268
MAULER
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Книга Excel как набор данных MSSQL для доступа извне.
a_voronin


1) Используйте OpenRowset с коннекшин стрингом по одному из форматов отсюда

https://www.connectionstrings.com/excel/

2) Напишите CLR, которая будет парзить ваши Эксельники и выдавать вам результат


№2 не подходит, точнее ситуация такова, что для парсинга эксельки нужно ставить Excel на сервер, с которого всё это будет происходить. Что не желательно. Вопрос с лицензиями на офис и пр. лабуда.
...
Рейтинг: 0 / 0
08.05.2020, 13:53
    #39955291
Sergey Sizov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Книга Excel как набор данных MSSQL для доступа извне.
MAULER
для парсинга эксельки нужно ставить Excel на сервер
Кто вам сказал такую чушь? С каких пор для парсинга набора XML файлов, коим и является xlsx, понадобился сам Excel? А как вариант первый с фалами без Excel работает не думали?
...
Рейтинг: 0 / 0
08.05.2020, 14:09
    #39955303
Владислав Колосов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Книга Excel как набор данных MSSQL для доступа извне.
MAULER,

если это open xml, то проблем с C# не должно быть. По-моему, существуют библиотеки и для потоковых XLS. Вы не знабывает, что если файл кто-то откроет и "забудет", то вы не получите доступ к нему. Лучше использовать SharePoint для такого случая, но это дорого и не у всех есть. Можно отсылать копию файла и применить SSIS. Решений достаточно, но они требуют определённых знаний.
...
Рейтинг: 0 / 0
08.05.2020, 14:14
    #39955306
a_voronin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Книга Excel как набор данных MSSQL для доступа извне.
MAULER
a_voronin


1) Используйте OpenRowset с коннекшин стрингом по одному из форматов отсюда

https://www.connectionstrings.com/excel/

2) Напишите CLR, которая будет парзить ваши Эксельники и выдавать вам результат


№2 не подходит, точнее ситуация такова, что для парсинга эксельки нужно ставить Excel на сервер, с которого всё это будет происходить. Что не желательно. Вопрос с лицензиями на офис и пр. лабуда.


Если вы будете использовать https://docs.microsoft.com/en-us/office/open-xml/open-xml-sdk, то никакой лицензии ни на что не надо. Он открывает Excel просто как файл
...
Рейтинг: 0 / 0
08.05.2020, 14:18
    #39955309
MAULER
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Книга Excel как набор данных MSSQL для доступа извне.
a_voronin,

В моём распоряжении есть подключение к MSSQL и powershell
Я мог бы powershell-ом распарсить книгу, но нужен сам Excel на сервере - это не подходит.

Вот я и подумал, что было бы не плохо сделать SELECT до эксельки. Но её как то надо "прикрутить". В этом и вопрос.
...
Рейтинг: 0 / 0
08.05.2020, 14:23
    #39955314
a_voronin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Книга Excel как набор данных MSSQL для доступа извне.
MAULER,

Прекратите повторять, что " нужен сам Excel на сервере". Ответ не нужен. Уже 17 лет прошло с тех пор как можно читать Excel не имея установленного приложения Excel. https://docs.microsoft.com/en-us/office/open-xml/open-xml-sdk

Разрабатываете CLR и деплоите её.

А где собственно говоря находятся сами Excel-ники, которые вы собрались парзить.
...
Рейтинг: 0 / 0
09.05.2020, 08:30
    #39955522
Ennor Tiegael
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Книга Excel как набор данных MSSQL для доступа извне.
MAULER,

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

Заменил весь dataflow на Script Task, в нем получал SqlDataReader, который потом скармливал объектам из EPPlus.dll . Работает быстро, объектная модель продуманная, мне понравилось. Единственное, эту DLL пришлось устанавливать в GAC на сервере, но это имхо цветочки по сравнению с установкой Офиса.

Вы можете написать CLR, которая будет тянуть данные из файла через эту либу, например. Ну или через SDK, как другие советуют - думаю, большой разницы не будет.
...
Рейтинг: 0 / 0
09.05.2020, 13:45
    #39955542
vikkiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Книга Excel как набор данных MSSQL для доступа извне.
Ennor Tiegael
...но штатный Excel Destination без установленного Excel не работает...

может для доступа просто Access Database Engine драйвер нужен был (Microsoft.ACE.OLEDB..xxx) ? { проверить условия использования, для ТС-а может подойдёт }
т.е. без самого Microsoft Office / Microsoft Excel (получается без необходимости дополнительных лицензий и замусоривания сервера доп. программами)
...
Рейтинг: 0 / 0
09.05.2020, 23:21
    #39955611
Ennor Tiegael
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Книга Excel как набор данных MSSQL для доступа извне.
vikkiv,

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

Ну и мне было интересно посмотреть, что это за штука такая. Я им потом на основе этого кода утилиту написал, которая прогоняет скрипт на сервере и сохраняет результаты в многостраничный эксельник. Заодно с многопоточностью поигрался :)
...
Рейтинг: 0 / 0
12.05.2020, 07:40
    #39956078
MAULER
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Книга Excel как набор данных MSSQL для доступа извне.
По сути не работает первая строка из этого фрагмента:

Код: powershell
1.
2.
3.
$ExcelObject = new-Object -comobject Excel.Application;
$Workbook = $ExcelObject.Workbooks.Open($excelPath); #$excelPath определён заранее
$workSheet = $Workbook.Sheets.Item(1);


Но чувствую, что это уже оффтоп
...
Рейтинг: 0 / 0
12.05.2020, 07:55
    #39956080
a_voronin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Книга Excel как набор данных MSSQL для доступа извне.
MAULER
По сути не работает первая строка из этого фрагмента:

Код: powershell
1.
2.
3.
$ExcelObject = new-Object -comobject Excel.Application;
$Workbook = $ExcelObject.Workbooks.Open($excelPath); #$excelPath определён заранее
$workSheet = $Workbook.Sheets.Item(1);


Но чувствую, что это уже оффтоп


Поражает. Насколько упорно Вы пытаетесь задействовать Excel.Application, хотя уже давно есть OpenXml, которые не использует COM-объекты.
...
Рейтинг: 0 / 0
12.05.2020, 08:15
    #39956087
MAULER
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Книга Excel как набор данных MSSQL для доступа извне.
a_voronin

Поражает. Насколько упорно Вы пытаетесь задействовать Excel.Application, хотя уже давно есть OpenXml, которые не использует COM-объекты.

Есть много чего. Я использую те инструменты, которые знает большинство в моем окружении. И в случае чего, смогут легко и без посторонней помощи поправить.
Вы предлагаете OpenXML - штука, прямо скажем, не тривиальная. По тем ссылкам, что Вы дали, для меня вырисовывается перспектива основательного погружения (как я понял) в основы C# коих у меня не много.

Я уже нашел обходной вариант (без заморочек) и решил задачу с пом. PowerShell и MSSQL. Благо, она из серии "сделал и забыл". В край, любой может поправить.

Спасибо за OpenXML. Уверен, если возникнет что-то серъезное на горизонте, придется изучать вопрос.
...
Рейтинг: 0 / 0
12.05.2020, 09:38
    #39956115
Ennor Tiegael
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Книга Excel как набор данных MSSQL для доступа извне.
MAULER,

Если вы используете продукты Microsoft, то знание C# практ. обязательно. Учите, хуже не будет.
...
Рейтинг: 0 / 0
12.05.2020, 11:27
    #39956174
a_voronin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Книга Excel как набор данных MSSQL для доступа извне.
MAULER
a_voronin

Поражает. Насколько упорно Вы пытаетесь задействовать Excel.Application, хотя уже давно есть OpenXml, которые не использует COM-объекты.

Есть много чего. Я использую те инструменты, которые знает большинство в моем окружении. И в случае чего, смогут легко и без посторонней помощи поправить.


А погуглить 5 минут и найти готовый год -- это очень сложно?

https://stackoverflow.com/questions/23102010/open-xml-reading-from-excel-file

Единственное с чем там надо разобраться -- это как доставать строковые значения из словаря (c.DataType == CellValues.SharedString) -- все остальное там сделано. Добираетесь до листа и читаете его по строкам столбцам клеткам.

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
void Main()
{
    string fileName = @"c:\path\to\my\file.xlsx";

    using (FileStream fs = new FileStream(fileName, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
    {
        using (SpreadsheetDocument doc = SpreadsheetDocument.Open(fs, false))
        {
            WorkbookPart workbookPart = doc.WorkbookPart;
            SharedStringTablePart sstpart = workbookPart.GetPartsOfType<SharedStringTablePart>().First();
            SharedStringTable sst = sstpart.SharedStringTable;

            WorksheetPart worksheetPart = workbookPart.WorksheetParts.First();
            Worksheet sheet = worksheetPart.Worksheet;

            var cells = sheet.Descendants<Cell>();
            var rows = sheet.Descendants<Row>();

            Console.WriteLine("Row count = {0}", rows.LongCount());
            Console.WriteLine("Cell count = {0}", cells.LongCount());

            // One way: go through each cell in the sheet
            foreach (Cell cell in cells)
            {
                if ((cell.DataType != null) && (cell.DataType == CellValues.SharedString))
                {
                    int ssid = int.Parse(cell.CellValue.Text);
                    string str = sst.ChildElements[ssid].InnerText;
                    Console.WriteLine("Shared string {0}: {1}", ssid, str);
                }
                else if (cell.CellValue != null)
                {
                    Console.WriteLine("Cell contents: {0}", cell.CellValue.Text);
                }
             }

             // Or... via each row
             foreach (Row row in rows)
             {
                 foreach (Cell c in row.Elements<Cell>())
                 {
                     if ((c.DataType != null) && (c.DataType ==           CellValues.SharedString))
                     {
                         int ssid = int.Parse(c.CellValue.Text);
                         string str = sst.ChildElements[ssid].InnerText;
                         Console.WriteLine("Shared string {0}: {1}", ssid, str);
                     }
                     else if (c.CellValue != null)
                     {
                         Console.WriteLine("Cell contents: {0}", c.CellValue.Text);
                     }
                 }
             }
         }
     }
 }

...
Рейтинг: 0 / 0
12.05.2020, 11:50
    #39956188
a_voronin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Книга Excel как набор данных MSSQL для доступа извне.
Ennor Tiegael
MAULER,

Если вы используете продукты Microsoft, то знание C# практ. обязательно. Учите, хуже не будет.


Для этой задачи надо знать for foreach if openfile .
...
Рейтинг: 0 / 0
12.05.2020, 12:54
    #39956216
vikkiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Книга Excel как набор данных MSSQL для доступа извне.
MAULER
Есть много чего. Я использую те инструменты, которые знает большинство в моем окружении.
Power Shell (тоже ведь инструмент) если что - тот-же .NET ,
так что в данном случае не будет существенной разницы между PS и C# (за искл. косметики)
а вот какие методы/подходы применять внутри кода - немного другой вопрос.
...
Рейтинг: 0 / 0
12.05.2020, 14:02
    #39956281
a_voronin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Книга Excel как набор данных MSSQL для доступа извне.
vikkiv
MAULER
Есть много чего. Я использую те инструменты, которые знает большинство в моем окружении.
Power Shell (тоже ведь инструмент) если что - тот-же .NET ,
так что в данном случае не будет существенной разницы между PS и C# (за искл. косметики)
а вот какие методы/подходы применять внутри кода - немного другой вопрос.


Не будет разницы???? Опа.... В одном случае надо ставить Excel на сервер, в другом нет. Этот Excel App висит как COM-объект и жрет ресурсы. при неправильном подходе зависает. И самое главное Excel App позволяет парзить лишь в один поток (если вы конечно несколько не откроете с сильнейшим оверхедом).

OpenXml парзит файл просто как файл не опираясь ни на что кроме функций разбора xml, позволяет делать это многопоточно ни от чего не завися.

Есть разница?

Я уже молчу про такой нюанс как безопасность.
...
Рейтинг: 0 / 0
12.05.2020, 14:31
    #39956305
Alexander Us
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Книга Excel как набор данных MSSQL для доступа извне.
MAULER,

напишите (маленькое) .NET приложение, которое считывает данные из элселя и пишет их в таблицу на сервере.
Используйте библиотеку EPPlus (4.5.3.3 . последняя бесплатная версия для коммерческого применения)

Библиотека замечательная, вам понадобится всего несколько строк кода.
...
Рейтинг: 0 / 0
12.05.2020, 14:34
    #39956308
Alexander Us
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Книга Excel как набор данных MSSQL для доступа извне.
Alexander Us
EPPlus - Библиотека замечательная, вам понадобится всего несколько строк кода.

C EPPlus эксель на сервер ставить не надо!
...
Рейтинг: 0 / 0
12.05.2020, 14:38
    #39956311
Alexander Us
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Книга Excel как набор данных MSSQL для доступа извне.
a_voronin
А погуглить 5 минут и найти готовый год -- это очень сложно?
https://stackoverflow.com/questions/23102010/open-xml-reading-from-excel-file

Спасибо, дельный совет , и мне прогодится.
...
Рейтинг: 0 / 0
12.05.2020, 15:18
    #39956329
vikkiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Книга Excel как набор данных MSSQL для доступа извне.
a_voronin
Не будет разницы???? Опа.... В одном случае надо ставить Excel на сервер, в другом нет.
при чём здесь это? читаем внимательней: PS vs C#,
у меня только про разницу между инструментами на которых написана логика извлечения
...
Рейтинг: 0 / 0
12.05.2020, 15:25
    #39956333
a_voronin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Книга Excel как набор данных MSSQL для доступа извне.
vikkiv,

Что такое "PS"? Это PowerShell? Что вы там собрались юзать? COM?

Тогда все что я сказал уместно.
...
Рейтинг: 0 / 0
12.05.2020, 17:03
    #39956380
vikkiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Книга Excel как набор данных MSSQL для доступа извне.
a_voronin,

ещё раз пройдусь во избежании мутирования интерпретаций:
чел говорит что использовать C# у них не по фэн-шую (напр. в паре с OpenXML),
при этом сам приводит PowerShell - т.е. тот-же .NET в немного другом соусе.
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Книга Excel как набор данных MSSQL для доступа извне. / 25 сообщений из 31, страница 1 из 2
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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