11

Oracle から Excel にデータをエクスポートする pl/sql プロシージャを作成しています。データの書式設定が必要なため、CSV を使用できません。私はすでに XML を試しましたが、50 列で 70000 行 (ほぼ 300 MB !!!) などをエクスポートしようとすると、大きすぎるファイルが生成されます。

そのため、HTML タグを使用して XLS ファイルを生成することにしました。これは XML よりも小さく、いくつかの特別な列のみの形式を直接定義する必要があります (文字列、数値、および日付は Excel によって自動的に形式設定されます)。とてもシンプルで便利ですが、複数のワークシートを定義することはできません。

HTML を使用して記述された Excel ファイルに複数のワークシートを追加/定義する方法を知っていますか? <% ActiveWorkbook.Worksheet.Add %> のような VBScript 式を使用しようとしましたが、うまくいきません。

4

11 に答える 11

4

Oracle サーバーで Excel または HTML ファイルを作成する代わりに、ODBC または OLEDB を介して Oracle データを既存の Excel ドキュメントにフェッチできます。欠点は、ユーザー権限に注意する必要があることです。

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

差出人: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 に答える
1

SQL plusを使用して、このソリューションをWeb上で見つけました(私が発明したものではありません)。

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

.xls 形式の機能のサブセットをサポートするTom Kyte のOWA-SYLKユーティリティを入手できます。

于 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

PL/SQL のみを使用して Oracle データベースから Excel ドキュメントを生成できる別のプロジェクト ORA_EXCEL ( www.oraexcel.com ) があります。

于 2011-12-13T08:42:51.677 に答える
0

OOXML メソッドを使用します。最初は PL/SQL で独自のメソッドを作成していましたが、同僚が Excellant という製品を見つけました。列マッピングとスタイル/式 (ほとんどすべての Excel 式が機能します) を含む xml 仕様、クエリを渡すと、clob が返されます。そのため、サイズを小さくしたい場合は、clob に対して gzip を実行できます。この製品は非常に安価で、マネージャーが pcard で購入しました。

Web サイトは www.peak42solutions.com です。ネットワーク関係者はデータベースへの直接アクセスを許可していないため、ODBC を使用できませんでした。また、現在、Excel で請求書を顧客にメールで送信しています。

ありがとう、

明細書

于 2009-10-01T15:34:24.763 に答える
0

(小さい) Excel シートを Excel で html として保存し、その形式を再現することができます。

于 2008-11-18T19:50:15.097 に答える
0

Excel 内から SQL クエリを実行できる SQL*XL という製品があり、結果はワークシート内に表示されます (更新することもできます)。

これは商用であり、無料ではありませんが、わずか 50 ユーロなので、高くはありません。結構使ってます

于 2008-12-30T21:04:25.877 に答える