Oracle到Excel – PL / SQL导出过程

我正在写数据从Oracle导出到Excel的pl / sql过程。 我需要数据格式,所以我不能使用CSV。 我已经尝试过使用XML,但是当我想要导出例如70000行50列(几乎300 MB !!!)时,它会生成太大的文件。

这就是为什么我决定使用HTML标记生成XLS文件 – 它比XML小,我必须直接定义格式只有一些特殊的列(string,数字和date由Excel自动格式化)。 这是非常简单和方便,但我不能定义多个工作表。

你知道如何在使用HTML编写的excel文件中添加/定义多个工作表吗? 我试图使用VBScript公式,如<%ActiveWorkbook.Worksheet.Add%>,但它不起作用。

最好的祝福,

Przemek

我已经在pl / sql中开发了一个包含格式和多个工作表的excel文件的包,可能对你有用。

http://sanjeev-oracle-world.blogspot.com/2007/06/create-excel-workbook-by-plsql-code.html

问候Sanjeev

而不是在Oracle服务器上创buildExcel或HTML文件,您可以通过ODBC或OLEDB将Oracle数据提取到现有的Excel文档。 缺点是,你应该小心用户权限。

https://www.youtube.com/watch?v=Adz0zZFePf8

我遇到过类似的问题,最终做了一个电子表格,里面有一些VBA代码,为我查询和填充电子表格。 我的任务是导出一系列表格,每个表格都在不同的表格上,但是可以使用任何标志来切换到新的表格。 无论如何,让我知道如果你想看到的代码。 这是一个可以帮助你的块。 只要将TableSQLstring更改为您所select的内容即可。 每个返回的logging将作为一行插入到工作表中。 然后,根据您决定的任何标志,您可以创build并移至下一张表格。 请让我知道,如果你需要更多的信息(因为这个特殊的例子不完全是你在做什么)

Private Sub getMyRows(inSchema As String, InTable As String) Dim RS As Object Dim TableSQL As String Dim DataType As String Dim DataLength As String Dim DataPrecision As String Dim DataScale As String Dim ColCount As Integer Dim WS As Worksheet ' create a sheet with the current table as name Worksheets.Add().Name = InTable Set RS = CreateObject("ADODB.recordset") TableSQL = "Select * from " & inSchema & "." & InTable ' grab the data RS.Open TableSQL, conn, adOpenStatic For ColCount = 0 To RS.Fields.Count - 1 ' set column headings to match table ActiveSheet.Cells(1, ColCount + 1).Value = RS.Fields(ColCount).Name Next ' copy table data to sheet With Worksheets(InTable).Range("A2") .CopyFromRecordset RS End With RS.Close End Sub 

您可以获得Tom Kyte的OWA-SYLK实用程序,该实用程序支持.xls格式function的子集。

ExcelDocumentType是一个很好的解决scheme。 它允许您使用PL / SQL生成function齐全的多页Excel文档。 你可以在这里find它:

http://radio.weblogs.com/0137094/2006/10/26.html

http://radio.weblogs.com/0137094/2009/01/02.html

(Jason Bennett的开发者angular落)

还有另外一个项目ORA_EXCEL( http://www.oraexcel.com ),它只能使用PL / SQL从Oracle数据库生成Excel文档。

我在网上find了这个解决scheme(不是我自己发明的),使用SQL plus:

 set feed off markup html on spool on spool c:\table1.xls select * from table1; spool off set markup html off spool off 

来自: MSDN 。 如果您希望工作表是可移植的,而不依赖于系统DSN,则可以使用以下连接string进行连接:

 Dim cnn As ADODB.Connection Set cnn = New ADODB.Connection cnn.ConnectionString = "Provider=OraOLEDB.Oracle.1;Password=<PASSWORD>;Persist Security Info=True;User ID=<USER ID>;Data Source=<DATABASE NAME>" cnn.Open 

然后使用Moleboy的解决scheme 。

您可以在Excel中将(小)Excel工作表保存为html,然后重现该格式。

有一种叫做SQL * XL的产品,它允许你在Excel中运行SQL查询,结果出现在工作表中(它也可以更新)。

这是商业的,不是免费的,但只有大约50欧元,所以不贵。 我用了很多

我们使用OOXML方法。 我们首先用PL / SQL编写自己的方法,但同事发现了这个叫做Excellant的产品。 它是你传入一个xml规范与列映射和样式/公式(几乎所有的Excel公式作品),查询和它给你一个clob回来。 所以你可以在clob上运行gzip,如果你想缩小它的话。 这个产品非常好,我的经理用一张pcard买了它。

该网站是www.peak42solutions.com。 我们不能使用ODBC,因为networking人员不允许直接访问数据库。 我们现在正在向客户发送excel发票。

谢谢,

法案

你的问题似乎与SO中的一个线程类似( 在Oracle中使用UTL_FILE包在ExcelSheet中编写 ),而且我最近能够find这个问题的简单解决scheme。 我使用了由Anton Scheffer( 使用PL / SQL创buildExcel文件 ) 创build的名为as_xlsx的软件包,并进行了一些修改,以便通过将其放入一个循环来在单个Excel工作簿中创build多个工作表。 它也支持一些基本的格式,如单元格颜色,字体样式,字体大小,边框等,它非常漂亮。 ( 使用PL / SQL创buildExcel文件(.xlsx) )。

希望这可以帮助!