我正在编写pl / sql过程,将数据从Oracle导出到Excel。我需要数据格式化,所以我不能使用CSV。我已经尝试过使用XML,但是当我想导出时,它会生成太大的文件,例如700列,50列(几乎300 MB!)。
这就是我决定使用HTML标签生成XLS文件的原因 - 它比XML小,我必须直接定义一些特殊列的格式(字符串,数字和日期由Excel自动格式化)。
它非常简单方便,但我无法定义多个工作表。
您知道如何在使用HTML编写的excel文件中添加/定义多个工作表吗?我尝试使用像<%ActiveWorkbook.Worksheet.Add%>这样的VBScript公式,但它不起作用。
最好的祝福,
Przemek
您可以通过ODBC或OLEDB将Oracle数据提取到现有Excel文档,而不是在Oracle服务器上创建Excel或HTML文件。缺点是,您应该小心用户权限。
https://www.youtube.com/watch?v=Adz0zZFePf8
我遇到了类似的问题,并最终制作了一个电子表格,其中包含一些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
你可以得到Tom Kyte的 OWA-SYLK 实用程序,支持.xls格式功能的子集。
还有另一个项目ORA_EXCEL(www.oraexcel.com)只能使用PL / SQL从Oracle数据库生成Excel文档。
我在网上发现了这个解决方案(不是我发明的),使用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,则可以使用以下连接字符串进行连接:
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的解决方案。