powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Книга Excel как набор данных MSSQL для доступа извне.
31 сообщений из 31, показаны все 2 страниц
Книга Excel как набор данных MSSQL для доступа извне.
    #39955256
MAULER
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здравствуйте.

Версия сервера:
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
Книга Excel как набор данных MSSQL для доступа извне.
    #39955262
Фотография a_voronin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MAULER,

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

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

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


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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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


Но чувствую, что это уже оффтоп
...
Рейтинг: 0 / 0
Книга Excel как набор данных MSSQL для доступа извне.
    #39956080
Фотография a_voronin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Книга Excel как набор данных MSSQL для доступа извне.
    #39956087
MAULER
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
a_voronin

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

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

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

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

Если вы используете продукты Microsoft, то знание C# практ. обязательно. Учите, хуже не будет.
...
Рейтинг: 0 / 0
Книга Excel как набор данных MSSQL для доступа извне.
    #39956174
Фотография a_voronin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Книга Excel как набор данных MSSQL для доступа извне.
    #39956188
Фотография a_voronin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ennor Tiegael
MAULER,

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


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


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

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

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

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

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

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

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

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

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

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

ещё раз пройдусь во избежании мутирования интерпретаций:
чел говорит что использовать C# у них не по фэн-шую (напр. в паре с OpenXML),
при этом сам приводит PowerShell - т.е. тот-же .NET в немного другом соусе.
...
Рейтинг: 0 / 0
Книга Excel как набор данных MSSQL для доступа извне.
    #39956382
Фотография a_voronin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vikkiv
a_voronin,

ещё раз пройдусь во избежании мутирования интерпретаций:
чел говорит что использовать C# у них не по фэн-шую (напр. в паре с OpenXML),
при этом сам приводит PowerShell - т.е. тот-же .NET в немного другом соусе.


Вы до сих пор не поняли о чем я. Я ни разу не о .NET. Я о двух способах чтения Excel 1) Через COM-объект Excel 2) Через библиотеку OpenXml.

оба способа можно задействовать и через PowerShell.

1) должен иметь установленный Excel и по сути он открывает Excel в фоновом режиме на сервере
2) просто открывает файл на чтение и читает

1) Тормозной и однопоточный
2) оптимальный и параллельный

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

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

оба способа можно задействовать и через PowerShell.
Лично я работал и с тем и с другим.


Отлично. Можно Способ 2. Через PowerShell?
...
Рейтинг: 0 / 0
Книга Excel как набор данных MSSQL для доступа извне.
    #39956421
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
a_voronin
1) должен иметь установленный Excel и по сути он открывает Excel в фоновом режиме на сервере
2) просто открывает файл на чтение и читает
Могут быть ограничения со стороны подразделения эксплуатации. Ставить Эксель на сервер они не хотят, но ставить какую то прогу на сервер, и ставить компонент в GAC, они могут не захотеть ещё больше. Тут нужно учитывать предрассудки конкретных админов.

Кроме того, "оптимальность" так же должна учитывать затраты на персонал, всё таки с OpenXML не каждый справится.
...
Рейтинг: 0 / 0
Книга Excel как набор данных MSSQL для доступа извне.
    #39956437
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В случае простой формы XLS можно использовать SSIS.
...
Рейтинг: 0 / 0
Книга Excel как набор данных MSSQL для доступа извне.
    #39956642
Фотография a_voronin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexeyvg
a_voronin
1) должен иметь установленный Excel и по сути он открывает Excel в фоновом режиме на сервере
2) просто открывает файл на чтение и читает
Могут быть ограничения со стороны подразделения эксплуатации. Ставить Эксель на сервер они не хотят, но ставить какую то прогу на сервер, и ставить компонент в GAC, они могут не захотеть ещё больше. Тут нужно учитывать предрассудки конкретных админов.

Кроме того, "оптимальность" так же должна учитывать затраты на персонал, всё таки с OpenXML не каждый справится.


OpenXml SDK поставляется с сайта Майкрософт. Это не прога, а dll. Они владеют кодом, причем уже очень давно. Я даже не удивлюсь, что он уже находиться в GAC (преинсталлирована) под win10 или последних серверных системах.
...
Рейтинг: 0 / 0
Книга Excel как набор данных MSSQL для доступа извне.
    #39956648
Фотография a_voronin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MAULER
a_voronin

оба способа можно задействовать и через PowerShell.
Лично я работал и с тем и с другим.


Отлично. Можно Способ 2. Через PowerShell?


А можно попросить вас научиться ГУГЛИТЬ?

https://hinchley.net/articles/read-a-microsoft-excel-workbook-using-powershell-and-the-open-xml-sdk/
...
Рейтинг: 0 / 0
31 сообщений из 31, показаны все 2 страниц
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Книга Excel как набор данных MSSQL для доступа извне.
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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