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