使用Oracle中的UTL_FILE包在Excel Sheet中编写

时间:2011-12-07 10:45:11

标签: oracle plsql

我在excel表中写入数据没有问题,这些数据存储在一些预定义的目录中。

现在我有10组数据,每组我必须创建10个单独的excel表。 但我想要的是创建工作簿conating sheet1,sheet2。 Sheet10。这将有10套记录。如果我的问题不明确,请告诉我。

我正在使用PL / SQL Oracle 9i

我的代码将为一组数据写入excel。如果我有更多数据集并且我不想拥有多个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 个答案:

答案 0 :(得分:6)

我不知道有任何现成的实现。

自07年以来的Excel文件(.xslx)实际上是包含每个工作表的单独xml文件的zip存档。

他们使用的XML架构是pretty straight forward。您必须使用Java来创建文件夹并执行zip压缩才能编写此类文件。

答案 1 :(得分:3)

您可以使用开源PL/SQL ExcelDocumentType执行此操作。 (虽然我没有在9i上试过它。)

答案 2 :(得分:0)

我能够在SO(Create an Excel File (.xlsx) using PL/SQL)上找到最近发布的这个问题的解决方案。

我使用了由Anton Scheffer Create an Excel-file with PL/SQL创建的名为as_xlsx的软件包,并对软件包进行了一些修改 因此,它通过循环将其创建在单个Excel工作簿中。

希望这有帮助!