问题 Oracle到Excel - PL / SQL导出过程


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

这就是我决定使用HTML标签生成XLS文件的原因 - 它比XML小,我必须直接定义一些特殊列的格式(字符串,数字和日期由Excel自动格式化)。 它非常简单方便,但我无法定义多个工作表。

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

最好的祝福,

Przemek


1680
2017-11-18 12:52


起源

可能看起来已经过时,过时了,有点怪异,但我还是喜欢使用OracleReport来做到这一点。如果您已经启动了Forms / Report IAS基础架构并运行btw。 - BigMike


答案:


我在pl / sql中开发了一个包,用于生成带有格式和多个工作表的excel文件,它可能对您有用。

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

问候 Sanjeev


4
2018-01-25 06:40





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

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


4
2017-11-18 13:40





我遇到了类似的问题,并最终制作了一个电子表格,其中包含一些VBA代码,可以查询并填充电子表格。 我的任务是导出一系列表,每个表在不同的表上,但任何标志都可用于切换到新表。 无论如何,如果您想查看代码,请告诉我。这是一个可以帮助你的块。 只需将TableSQL字符串更改为您应该选择的任何内容。 返回的每条记录将作为一行插入到工作表中。 然后,根据您决定的任何标志,您可以创建并移动到下一个工作表。 如果您需要更多信息,请告诉我(因为这个特殊的例子并不完全是您在做什么)

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

2
2018-05-29 19:16





你可以得到Tom Kyte的 OWA-SYLK 实用程序,支持.xls格式功能的子集。


1
2017-11-19 05:17



我之前使用过,它不能处理多个工作表 - Gary Myers


ExcelDocumentType是一个很好的解决方案。它允许您使用PL / SQL生成功能齐全的多页Excel文档。你可以在这里找到它:

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

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

(Jason Bennett的开发者角)


1
2018-05-04 13:24





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


1
2017-12-13 08:42





我在网上发现了这个解决方案(不是我发明的),使用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

1
2017-12-22 03:35





从: MSDN。如果您希望工作表可移植而不依赖于系统DSN,则可以使用以下连接字符串进行连接:

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的解决方案


1
2018-04-18 08:14