2008-11-18 6 views
11

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

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

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

С наилучшими пожеланиями,

Przemek

+0

Может показаться устаревшим, старым fashoned и да немного выродком, но все же я предпочитаю использовать OracleReport для этого. Если у вас уже есть инфраструктура IAS Forms/Report, работающая под управлением BTT. – BigMike 2011-12-13 08:47:30

ответ

4

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

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

0

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

1

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

+0

Я использовал это раньше и не справляется с несколькими листами – 2008-12-30 20:32:36

0

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

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

2

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

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

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

Спасибо,

Билл

1

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

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

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

1

От: MSDN. Если вы хотите, чтобы ваш рабочий лист, чтобы быть портативным и не полагаться на System 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's solution.

0

Ваша проблема кажется похожей на нить здесь, в SO (Writing in ExcelSheet using UTL_FILE package in Oracle.), И я смог найти простое решение этой проблемы в последнее время. Я использовал пакет под названием as_xlsx, созданный Антоном Шеффером, (Create an Excel-file with PL/SQL) и сделал несколько модификаций, поэтому он создает несколько листов внутри одной книги Excel, помещая ее через Loop. Он также поддерживает некоторые основные форматирования, такие как цвет ячеек, стиль шрифта, размер шрифта, границы и т. Д. Его довольно изящный. (Create an Excel File (.xlsx) using PL/SQL).

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

 Смежные вопросы

  • Нет связанных вопросов^_^