Oracle в Excel - процедура экспорта PL / SQL

Я пишу процедуру pl / sql, которая экспортирует данные из Oracle в Excel. Мне нужно форматирование данных, поэтому я не могу использовать CSV. Я уже пробовал использовать XML, но он генерирует слишком большие файлы, когда я хочу экспортировать, например 70000 строк по 50 столбцов (почти 300 МБ !!!).

Вот почему я решил использовать HTML-теги для создания файла XLS - он меньше, чем XML, и я должен напрямую определять формат только некоторых специальных столбцов (строки, числа и даты форматируются автоматически в Excel). Это очень просто и удобно, но я не могу определить более одного листа.

Вы знаете, как добавить / определить более одного рабочего листа в файле Excel, написанном с использованием HTML? Я пробовал использовать формулу VBScript, например <% ActiveWorkbook.Worksheet.Add%>, но она не работает.

Может показаться устаревшим, старомодным и, да, немного странным, но все же я предпочитаю использовать OracleReport для этого. Если у вас уже есть инфраструктура Forms / Report IAS, работающая btw.

BigMike 13.12.2011 12:47
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Введение в CSS
Введение в CSS
CSS является неотъемлемой частью трех основных составляющих front-end веб-разработки.
Как выровнять Div по центру?
Как выровнять Div по центру?
Чтобы выровнять элемент <div>по горизонтали и вертикали с помощью CSS, можно использовать комбинацию свойств и значений CSS. Вот несколько методов,...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Travel Booking Angular Template один из лучших Travel & Tour booking template in the world. 30+ валидированных HTML5 страниц, которые помогут...
11
1
61 995
11

Ответы 11

Вместо того, чтобы создавать файлы Excel или HTML на сервере Oracle, вы можете извлекать данные Oracle в существующий документ Excel через ODBC или OLEDB. Недостаток в том, что вы должны быть осторожны с разрешениями пользователей.

https://thewikihow.com/video_Adz0zZFePf8

Вы можете сохранить (небольшой) лист Excel как html в Excel, а затем воспроизвести этот формат.

Вы можете получить утилиту Tom Kyte OWA-SYLK, которая поддерживает подмножество функций формата .xls.

Я использовал это раньше, и он не справляется с несколькими листами

Gary Myers 30.12.2008 23:32

Существует продукт под названием SQL * XL, который позволяет запускать sql-запросы из Excel, а результаты отображаются на рабочем листе (он также может обновляться).

Это коммерческий, не бесплатный, но стоит всего около 50 евро, так что не дорого. Я использую это довольно часто

ExcelDocumentType - отличное решение. Он позволяет создавать полнофункциональные многостраничные документы Excel с помощью PL / SQL. Вы можете найти это здесь:

http://radio.weblogs.com/0137094/2006/10/26.html

http://radio.weblogs.com/0137094/2009/01/02.html

(Уголок разработчика Джейсона Беннета)

У меня были похожие проблемы, и в конце концов я сделал электронную таблицу с некоторым кодом VBA, который запросил и заполнил электронную таблицу для меня. Моя задача заключалась в том, чтобы экспортировать серию таблиц, каждая из которых находится на отдельном листе, но любой флаг можно использовать для переключения на новый лист. В любом случае, дайте мне знать, если вы хотите увидеть код. Вот кусок, который может вам помочь. Просто измените строку TableSQL на то, что вам нужно. Каждая возвращенная запись будет вставлена ​​в виде строки на листе. Затем, основываясь на выбранном вами флаге, вы можете создать и перейти к следующему листу. Пожалуйста, дайте мне знать, если вам нужна дополнительная информация (поскольку этот конкретный пример НЕ ТОЧНО то, что вы делаете)

Private Sub getMyRows(inSchema As String, InTable As String)
    Dim RS As Object
    Dim TableSQL As String
    Dim DataType As String
    Dim DataLength As String
    Dim DataPrecision As String
    Dim DataScale As String
    Dim ColCount As Integer
    Dim WS As Worksheet
' create a sheet with the current table as name
    Worksheets.Add().Name = InTable
    Set RS = CreateObject("ADODB.recordset")
    TableSQL = "Select * from " & inSchema & "." & InTable
' grab the data
    RS.Open TableSQL, conn, adOpenStatic
    For ColCount = 0 To RS.Fields.Count - 1
' set column headings to match table
       ActiveSheet.Cells(1, ColCount + 1).Value = RS.Fields(ColCount).Name
    Next

' copy table data to sheet
     With Worksheets(InTable).Range("A2")
        .CopyFromRecordset RS
    End With
    RS.Close

  End Sub

Мы используем методы OOXML. Сначала мы писали наш собственный метод, чтобы сделать это на PL / SQL, но наш сотрудник нашел этот продукт под названием Excellant. Это вы передаете спецификацию xml с сопоставлениями столбцов и стилями / формулами (работает почти любая формула Excel), запросом, и он дает вам ответ. Таким образом, вы можете запустить gzip на clob, если хотите уменьшить его. Товар довольно дешевый, мой менеджер купил его с картой.

Веб-сайт: www.peak42solutions.com. Мы не могли использовать ODBC, поскольку сотрудники сети не разрешают доступ напрямую к базе данных. И теперь мы рассылаем клиентам счета в формате excel по электронной почте.

Спасибо,

Счет

Я нашел это решение в сети (придуманное не мной), используя SQL plus:

set feed off markup html on spool on
spool c:\table1.xls
select * from table1;
spool off
set markup html off spool off

Есть еще один проект ORA_EXCEL (www.oraexcel.com), который может создавать документы Excel из базы данных Oracle, используя только PL / SQL.

От: MSDN. Если вы хотите, чтобы ваш рабочий лист был переносимым и не полагался на системные DSN, вы можете подключиться с помощью строки подключения, например:

Dim cnn As ADODB.Connection
Set cnn = New ADODB.Connection

cnn.ConnectionString = "Provider=OraOLEDB.Oracle.1;Password=<PASSWORD>;Persist Security Info=True;User ID=<USER ID>;Data Source=<DATABASE NAME>"
cnn.Open

... затем используйте Решение Молебоя.

Ваша проблема кажется похожей на поток здесь, в SO (Запись в ExcelSheet с использованием пакета UTL_FILE в Oracle.), И недавно я смог найти простое решение этой проблемы. Я использовал пакет под названием as_xlsx, созданный Антоном Шеффером (Создать Excel-файл с PL / SQL), и сделал несколько модификаций, поэтому он создает несколько листов внутри одной книги Excel, пропуская его через цикл. Он также поддерживает базовое форматирование, такое как цвет ячейки, стиль шрифта, размер шрифта, границы и т. д. Это довольно изящно. (Создайте файл Excel (.xlsx) с помощью PL / SQL).

Надеюсь это поможет!

Другие вопросы по теме