Oracle в Excel - процедура экспорта PL / SQL - PullRequest
11 голосов
/ 18 ноября 2008

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

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

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

Ответы [ 12 ]

4 голосов
/ 25 января 2009

Я разработал пакет в pl / sql для создания файла Excel с форматированием и несколькими листами, это может быть полезно для вас.

http://sanjeev -oracle-world.blogspot.com / 2007/06 / создать-Excel-книги-на-PLSQL-code.html

С уважением Санджив

4 голосов
/ 18 ноября 2008

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

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

2 голосов
/ 29 мая 2009

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

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

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

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

1 голос
/ 13 декабря 2011

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

1 голос
/ 22 декабря 2010

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

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

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

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

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

1 голос
/ 19 ноября 2008

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

0 голосов
/ 28 декабря 2016

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

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

0 голосов
/ 01 октября 2009

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

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

Спасибо

Bill

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...