11

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

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

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

4

11 回答 11

4

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

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

于 2008-11-18T13:40:30.757 回答
2

我遇到过类似的问题,最终用一些 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
于 2009-05-29T19:16:42.697 回答
1

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

于 2011-12-13T08:42:51.677 回答
1

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

于 2008-11-19T05:17:13.737 回答
1

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

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

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

(Jason Bennett 的开发者专区)

于 2009-05-04T13:24:41.557 回答
1

我在网上找到了这个解决方案(不是我发明的),使用 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
于 2010-12-22T03:35:51.493 回答
1

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

于 2012-04-18T08:14:20.943 回答
0

我们使用 OOXML 方法。我们最初是在 PL/SQL 中编写自己的方法,但一位同事发现了这个名为 Excellant 的产品。它是你传入一个带有列映射和样式/公式的 xml 规范(几乎所有 excel 公式都有效),查询它会给你一个回滚。因此,如果你想让它更小,你可以在 clob 上运行 gzip。该产品非常便宜,我的经理用 pcard 购买了它。

该网站是 www.peak42solutions.com。我们不能使用 ODBC,因为网络人员不允许直接访问数据库。我们现在正在通过电子邮件将 Excel 发票发送给客户。

谢谢,

账单

于 2009-10-01T15:34:24.763 回答
0

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

于 2008-11-18T19:50:15.097 回答
0

There is a product called SQL*XL which allows you to run sql queries from within Excel, and the results appear within the worksheet (it can also update).

It is commercial, not free, but is only about €50, so not expensive. I use it quite a lot

于 2008-12-30T21:04:25.877 回答
0

您的问题似乎类似于 SO 中的一个线程(在 ExcelSheet 中使用 Oracle 中的 UTL_FILE 包编写。),我最近能够找到一个简单的解决方案来解决这个问题。我使用了一个名为as_xlsxAnton Scheffer 创建的包(使用 PL/SQL 创建 Excel 文件)并进行了一些修改,因此它通过循环在单个 Excel 工作簿中创建了多个工作表。它还支持一些基本格式,如单元格颜色、字体样式、字体大小、边框等。它非常漂亮。(使用 PL/SQL 创建 Excel 文件 (.xlsx))。

希望这可以帮助!

于 2016-12-28T05:59:57.420 回答