Oracle to native excel > 65000. Решение найдено - пользуйтесь

sdibrov
Дата: 14.11.2008 11:13:09
Возникла задача - выгружать данные в excel (причем не в csv не в xml а-ля excel и Microsoft Query тоже не подходит - много ручной работы) а именно в бинарный excel
причем, так как данных много, то нужно разбивать по листам.
Дополнительно нужно было разбивать данные по книгам в зависимости от столбца, например:

в таблице (запросе) есть столбец "код филиала" - нужно все строки "Питер" выгрузить в один файл, "Москва" - в другой и т.п.

Написал приложение. Исходный код и само приложение вкладываю.

Приложение предельно простое. 160 строк кода. Написано на Visual Basic .NET
Приложение весит 40 кб.

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

Ногами не пинать. Обработки исключений нет.
Знаком с .NET только 3 дня (пришлось сесть, т.к. решения на языках, которые знаю оказалось громоздким и неоптимальным)

Кому нужно - доделывать самостоятельно.
miksoft
Дата: 14.11.2008 13:33:40
А что касательно "> 65000" ?
sdibrov
Дата: 14.11.2008 14:42:39
если доходит до 65000
- создает новый лист,
- впечатывает заголовки
- выделяет заголовки жирным
- продолжает впечатывать строки
sdibrov
Дата: 15.11.2008 17:18:17
Собрал консольную версию для использования в пакетных сценариях .bat
Когда нужно последовательно выполнить несколько операций:
- загрузить данные Loader-ом
- разобрать данные процедурой
- выгрузить разные отчеты в разных разрезах в xls

при достижении 65000 строк создает новые листы
выгружает в "настоящий" - бинарный файл Excel
10 000 строк / секунда
mayton
Дата: 15.11.2008 19:30:05
Поманил... подразнил... а исходного кода не дал.
sdibrov
Дата: 15.11.2008 22:32:01
Вкладываю с исходниками.
Не думал, что кому-то будет интересно в них ковыряться.

Все строки тщательно прокомментированы. Разобраться не сложно.
mayton
Дата: 15.11.2008 23:32:10
Ну хитёр.
sdibrov

...
Написал приложение. Исходный код и само приложение вкладываю.
...
Кому нужно - доделывать самостоятельно.
...
sdibrov
Дата: 16.11.2008 10:27:16
Зря, кстати.
Приложение работает. Работает без сбоев.

Если кому-то недостает функций и обработки ошибок (если аргументом передали неправильный запрос, если забыли отсортировать результат по полю - разделителю, нужно чтоб запрос разбирался и ORDER BY дописывался принудительно и т.п), может доделать самостоятельно.
Писал для себя, мне эти функции не нужны.

Нравится - пользуйтесь, не нравится - не пользуйтесь.
По моему, все просто и понятно.
mayton
Дата: 16.11.2008 16:19:28
А что с NCHAR, NVARCHAR, LONG, CLOB ?
sdibrov
Дата: 16.11.2008 17:16:30
Все эти обрабатываются блоком Else по getString

Повторюсь: писал для себя.
Если нужно, допишите секции Сase на обработку других типов самостоятельно и перекомпилируйте.
Это не сложно.