在Oracle中使用UTL_FILE包在ExcelSheet中编写内容

4
我没有问题将数据写入预定义目录中存储的 Excel 工作表中。
现在我有 10 组数据,对于每组数据,我需要创建 10 个单独的 Excel 工作表。 但我想要创建一个包含 sheet1、sheet2、...、sheet10 的工作簿,其中包含所有 10 组记录。如果我的问题不清楚,请告诉我。
我正在使用 PL/SQL Oracle 9i。
以下是适用于一组数据的代码。如果我有更多的数据集,我不想有多个 Excel 工作表,而是想要一个具有不同 sheet 的工作簿。
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;

你怎样用UTL_FILE写xls文件?能和我们分享一下吗? - Florin Ghita
@florin 分享了代码.. :) - Avi
3
好的,那是一个csv文件,不是xls。它是一个平面文本文件,MS Excel知道如何读取。在csv中,显然你不能有工作表。xls更为复杂。 - Florin Ghita
3个回答

6

据我所知,目前没有现成的实现。

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

他们使用的XML模式非常直截了当。您需要使用Java创建文件夹并进行zip压缩,以便编写此类文件。


您发布的链接已失效。不过,这个 链接 到 MSDN 应该是同样的内容。 - Corwin01

3

0

我最近在SO上找到了一个关于此问题的解决方案(使用PL/SQL创建Excel文件(.xlsx))。

我使用了一个名为as_xlsx的包,由Anton Scheffer创建,使用PL/SQL创建Excel文件并对该包进行了一些修改,以便通过循环在单个Excel工作簿中创建多个工作表。

希望这可以帮到你!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接