在Oracle中使用UTL_文件包在ExcelSheet中编写

在Oracle中使用UTL_文件包在ExcelSheet中编写,oracle,plsql,Oracle,Plsql,我在excel表格中写入数据没有问题,excel表格存储在一些预定义的目录中 现在我有10组数据,每一组我必须创建10个单独的excel表格。 但我想要的是创建工作簿,包括sheet1,sheet2,。第10页。这将有全部10组记录。如果我的问题不清楚,请告诉我 我正在使用PL/SQL Oracle 9i 我的代码将为一组数据写入excel。如果我有更多的数据集,我不希望有多个excel工作表,而是希望有一个带有不同工作表的工作簿,该怎么办 CREATE OR REPLACE PROCEDURE

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

现在我有10组数据,每一组我必须创建10个单独的excel表格。 但我想要的是创建工作簿,包括sheet1,sheet2,。第10页。这将有全部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;

据我所知,还没有现成的实现

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


他们正在使用的XML模式是。为了编写这样的文件,您必须使用Java创建文件夹并进行zip压缩

您可以通过开源软件来实现这一点。(虽然我还没有在9i上尝试过。)

我找到了解决这个问题的方法,最近发布在SO()上

我使用了由Anton Scheffer创建的名为
as_xlsx
的包,并对该包进行了一些修改 因此,它通过循环在单个Excel工作簿中创建多个工作表


希望这有帮助

如何使用UTL_文件编写xls文件?你能和我们分享吗?@florin code shared.:)好的,这是一个csv文件,不是xls。这是一个平面文本文件,MS Excel知道如何读取。在csv中,很明显,您不能拥有图纸。xls更复杂。你发布的链接不再有效。但这对MSDN来说应该是一样的。