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

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

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

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

Ответ 1

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

https://www.youtube.com/watch?v=Adz0zZFePf8

Ответ 3

У меня были похожие проблемы, и в итоге я сделал таблицу с некоторым кодом 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

Ответ 4

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

Ответ 6

Я нашел это решение в Интернете (не изобретенное мной), используя 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

Ответ 7

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

Ответ 8

От: 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

... затем используйте решение Moleboy.

Ответ 9

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

Ответ 10

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

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

Ответ 11

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

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

Спасибо,

Билл

Ответ 12

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

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