可能重複:
How to export the result into different tabs of Excel in Toad for Data Analyst?寫入PL/SQL輸出到多個Excel工作表中一個的excel
我有一個PL/SQL代碼在那裏我有在它的兩個過程(獨立的彼此),並執行該程序我希望輸出寫入一個Excel文件,但其中有兩個工作表。
例:
用於一個程序的輸出應在片材1
用於下一過程中的輸出中應在片2
任何一個可以幫助?我使用utl_file
可能重複:
How to export the result into different tabs of Excel in Toad for Data Analyst?寫入PL/SQL輸出到多個Excel工作表中一個的excel
我有一個PL/SQL代碼在那裏我有在它的兩個過程(獨立的彼此),並執行該程序我希望輸出寫入一個Excel文件,但其中有兩個工作表。
例:
用於一個程序的輸出應在片材1
用於下一過程中的輸出中應在片2
任何一個可以幫助?我使用utl_file
常見的方法是創建與Microsoft XML Spreadsheet (XMLSS)文件,追加內容到VARCHAR
或CLOB
。
例如,寫一個小區,你會做這樣的事情:
xmlBody := xmlBody || '<Cell><Data ss:Type="String">' || stringContent || '</Data></Cell>';
現在,打開一個新的工作表,你會做這樣的事情:
xmlBody := xmlBody || '<Worksheet ss:Name="' || yourWorksheetName || '"><Table>';
將其關閉(附加所有內容後):
xmlBody := xmlBody || '</Table></Worksheet>';
有幾個實用程序包可以讓你做到這一點,或者你可以像我一樣寫自己的。您只需編寫函數來打開和關閉元素,例如openRow,closeRow,openWorkbook,closeWorkbook,openWorksheet等。
有關更多信息和示例,請參閱Oracle PL/SQL Utility Library, codename "Alexandria"。
如果你真的想解決這個問題,這裏有一些我在某處找到的代碼。警告:爲了我的目的,我放棄了這種方法,因爲我發現將XML數據加載到Excel中速度太慢。加載逗號分隔值文件的速度要快得多,儘管你失去了漂亮的格式(在我的情況下不重要)。
要使用:
WORKBOOK_OPEN
初始化表示工作簿中的CLOB。WORKSHEET_OPEN
在本書中創建工作表。ROW_OPEN
創建一行。CREATE_CELL
來創建並填充行中的單元格。ROW_OPEN
和CREATE_CELL
來創建行和單元格。WORKSHEET_CLOSE
。WORKSHEET_OPEN
再次打開另一片,然後使用ROW_OPEN
和CREATE_CELL
來填充它。WORKBOOK_CLOSE
關閉工作簿。EXPORT_WORKBOOK_TO_FILE
寫的工作簿文件。請注意,EXPORT_WORKBOOK_TO_FILE
使用UTL_FILE來編寫它的輸出,滿足您使用UTL_FILE的要求。
分享和享受。
PROCEDURE WORKBOOK_OPEN(pWorkbook IN OUT NOCOPY CLOB) IS
BEGIN
pWorkbook := '<?xml version="1.0" encoding="ISO-8859-9"?>' || chr(10) ||
'<Workbook xmlns="urn:schemas-microsoft-com:office:spreadsheet"' || chr(10) ||
'xmlns:o="urn:schemas-microsoft-com:office:office"' || chr(10) ||
'xmlns:x="urn:schemas-microsoft-com:office:excel"' || chr(10) ||
'xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet"' || chr(10) ||
'xmlns:html="http://www.w3.org/TR/REC-html40">' || chr(10) ||
'<ExcelWorkbook xmlns="urn:schemas-microsoft-com:office:excel">' || chr(10) ||
'<WindowHeight>8580</WindowHeight>' || chr(10) ||
'<WindowWidth>15180</WindowWidth>' || chr(10) ||
'<WindowTopX>120</WindowTopX>' || chr(10) ||
'<WindowTopY>45</WindowTopY>' || chr(10) ||
'<ProtectStructure>False</ProtectStructure>' || chr(10) ||
'<ProtectWindows>False</ProtectWindows>' || chr(10) ||
'</ExcelWorkbook>' || chr(10) ||
'<Styles>' || chr(10) ||
'<Style ss:ID="Default" ss:Name="Normal">' || chr(10) ||
'<Alignment ss:Vertical="Bottom"/>' || chr(10) ||
'<Borders/>' || chr(10) ||
'<Font/>' || chr(10) ||
'<Interior/>' || chr(10) ||
'<NumberFormat/>' || chr(10) ||
'<Protection/>' || chr(10) ||
'</Style>' || chr(10) ||
'<Style ss:ID="s22">' || chr(10) ||
'<Font x:Family="Swiss" ss:Bold="1" ss:Underline="Single"/>' || chr(10) ||
'</Style>' || chr(10) ||
'</Styles>';
END WORKBOOK_OPEN;
PROCEDURE WORKBOOK_CLOSE(pWorkbook IN OUT NOCOPY CLOB) IS
BEGIN
pWorkbook := pWorkbook || '</Workbook>';
END WORKBOOK_CLOSE;
PROCEDURE WORKSHEET_OPEN(pWorkbook IN OUT NOCOPY CLOB,
pstrWorksheet_name IN VARCHAR2) IS
BEGIN
--
-- Create the worksheet
--
pWorkbook := pWorkbook || '<Worksheet ss:Name="' || pstrWorksheet_name || '"><Table>';
END WORKSHEET_OPEN;
PROCEDURE WORKSHEET_CLOSE(pWorkbook IN OUT NOCOPY CLOB) IS
BEGIN
pWorkbook := pWorkbook || '</Table></Worksheet>';
END WORKSHEET_CLOSE;
PROCEDURE ROW_OPEN(pWorkbook IN OUT NOCOPY CLOB) IS
BEGIN
pWorkbook := pWorkbook || '<Row>';
END ROW_OPEN;
PROCEDURE ROW_CLOSE(pWorkbook IN OUT NOCOPY CLOB) IS
BEGIN
pWorkbook := pWorkbook || '</Row>' || chr(10);
END row_close;
PROCEDURE CREATE_CELL(pWorkbook IN OUT NOCOPY CLOB,
pstrCell_contents IN VARCHAR2) IS
BEGIN
pWorkbook := pWorkbook || '<Cell><Data ss:Type="String"> ' ||
pstrCell_contents || ' </Data></Cell>';
END CREATE_CELL;
PROCEDURE EXPORT_WORKBOOK_TO_FILE(pstrDirectory_name IN VARCHAR2,
pstrFilename IN VARCHAR2,
pWorkbook IN CLOB)
IS
nChunk_size CONSTANT BINARY_INTEGER := 32767;
strChunk VARCHAR2(32767);
nPos_chr10 NUMBER;
nWorkbook_len NUMBER;
fHandle UTL_FILE.FILE_TYPE;
nPos NUMBER := 1;
BEGIN
nWorkbook_len := DBMS_LOB.GETLENGTH(pWorkbook);
fHandle := UTL_FILE.FOPEN(pstrDirectory_name, pstrFilename, 'W', nChunk_size);
WHILE nPos < nWorkbook_len LOOP
strChunk := dbms_lob.substr(pWorkbook, nChunk_size, nPos);
EXIT WHEN strChunk IS NULL;
nPos_chr10 := INSTR(strChunk, CHR(10), -1);
IF nPos_chr10 != 0 THEN
strChunk := SUBSTR(strChunk, 1, nPos_chr10 - 1);
END IF;
UTL_FILE.PUT_LINE(fHandle, strChunk, TRUE);
nPos := nPos + LEAST(LENGTH(strChunk)+1, nChunk_size);
END LOOP;
UTL_FILE.FCLOSE(fHandle);
EXCEPTION
WHEN OTHERS THEN
IF UTL_FILE.IS_OPEN(fHandle) THEN
UTL_FILE.FCLOSE(fHandle);
END IF;
RAISE;
END EXPORT_WORKBOOK_TO_FILE;
但我使用utl_file..and我很困惑,使用xml..shall我給你的代碼,你會編輯更改pls ?? .... – user1620464