Запись в ExcelSheet с использованием пакета UTL_FILE в Oracle - PullRequest
4 голосов
/ 07 декабря 2011

У меня нет проблем с записью данных в таблицу Excel, которая хранится в некотором предопределенном каталоге.

Теперь у меня есть 10 наборов данных, и для каждого набора мне нужно создать 10 отдельных листов Excel.Но я хочу создать Workbook conating sheet1, sheet2 ,.Sheet10.Который будет иметь все 10 наборов записей.Если мой вопрос не ясен, дайте мне знать.

Я использую PL / SQL Oracle 9i

Мой код, который будет писать для одного набора данных.Что делать, если у меня есть больше данных и я не хочу иметь несколько листов Excel, а хочу одну книгу с таблицей различий.

CREATE OR REPLACE PROCEDURE SP_ORACLE_EXCEL(I_FILE_NAME    IN VARCHAR2) AS

  FILENAME  UTL_FILE.FILE_TYPE;
  FILENAME1 VARCHAR2(1000);
  CURSOR C1 IS
    SELECT * FROM MY_TABLE;
  VARC1 C1%ROWTYPE;
BEGIN

  FILENAME1   := 'TEST_' || I_FILE_NAME || '_' || SYSDATE || '.CSV';

  FILENAME    := UTL_FILE.FOPEN('TEMP_DIR', FILENAME1, 'W');

  /* THIS WILL CREATE THE HEADING IN EXCEL SHEET */
    UTL_FILE.PUT_LINE(FILENAME,
                   'HEADER1' || ',' || 'HEADER2' || ',' || 'HEADER3' || ',' ||
                    'HEADER4' || ',' || 'HEADER5');
  OPEN C1;
  LOOP
    FETCH C1
       INTO VARC1;
    EXIT WHEN C1%NOTFOUND;
     /*  THIS WILL PRINT THE RECORDS IN EXCEL SHEET AS PER THE QUERY IN CURSOR */
    UTL_FILE.PUT_LINE(FILENAME,
                      '"' || VARC1.COL1 || '"' || ' ,' || '"' ||
                      VARC1.COL2 || '"' || ' ,' || '"' ||
                      VARC1.COL3 || '"' || ' ,' || '"' ||
                      VARC1.COL4 || '"' || ' ,' || '"' ||
                      VARC1.COL5|| '"');


  END LOOP;

  UTL_FILE.FCLOSE(FILENAME);

END SP_ORACLE_EXCEL;

Ответы [ 3 ]

6 голосов
/ 07 декабря 2011

Нет готовой к использованию реализации, о которой я знаю.

Файлы Excel (.xslx), начиная с '07, на самом деле являются zip-архивами, содержащими отдельные xml-файлы для каждого листа.

Используемая ими XML-схема довольно прямолинейна . Вы должны будете использовать Java для создания папок и сжатия zip для записи таких файлов.

3 голосов
/ 16 января 2012

Вы можете сделать это с открытым исходным кодом PL / SQL ExcelDocumentType .(Хотя я не пробовал это на 9i.)

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

Мне удалось найти решение этой проблемы, недавно опубликованное здесь на SO ( Создать файл Excel (.xlsx) с использованием PL / SQL ).

я использовал пакет под названием as_xlsx, созданный Антоном Шеффером, создал Excel-файл с PL / SQL и сделал несколько изменений в пакете поэтому он создает несколько листов в одной книге Excel, пропуская ее через цикл.

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

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