【问题标题】:Writing in ExcelSheet using UTL_FILE package in Oracle使用 Oracle 中的 UTL_FILE 包在 ExcelSheet 中编写
【发布时间】:2026-01-16 01:05:01
【问题描述】:

我在存储在某个预定义目录中的 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;

【问题讨论】:

  • 如何用 UTL_FILE 编写 xls 文件?可以和我们分享一下吗?
  • @florin 代码共享.. :)
  • 好的,这是一个csv文件,不是xls。它是一个平面文本文件,MS Excel 知道可以阅读。在 csv 中,很明显,你不能有工作表。 xls 更复杂。

标签: oracle plsql


【解决方案1】:

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

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

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

【讨论】:

  • 您发布的链接不再有效。不过这个link 到 MSDN 应该是一样的。
【解决方案2】:

您可以使用开源 PL/SQL ExcelDocumentType 来做到这一点。 (虽然我还没有在 9i 上尝试过。)

【讨论】:

    【解决方案3】:

    我最近在 SO (Create an Excel File (.xlsx) using PL/SQL) 上发布了此问题的解决方案。

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

    希望这会有所帮助!

    【讨论】: