web-dev-qa-db-ja.com

OracleからExcelへ-PL / SQLのエクスポート手順

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

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

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

11
Przemek

書式設定と複数のワークシートを含むExcelファイルを生成するためのパッケージをpl/sqlで開発しました。これはあなたにとって役立つかもしれません。

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

よろしくサンジーブ

4
Sanjeev

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

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

4
user38123

同様の問題が発生し、最終的には、スプレッドシートにクエリを実行してデータを入力する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
moleboy

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

差出人: [〜#〜] 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
vbence

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
1
gWay

ExcelDocumentTypeは優れたソリューションです。 PL/SQLを使用して完全に機能するマルチシートExcelドキュメントを生成できます。あなたはここでそれを見つけることができます:

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

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

(ジェイソンベネットの開発者コーナー)

1
Jason Bennett

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

1
ora_excel

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

これは商用であり、無料ではありませんが、たったの約50ユーロなので、高価ではありません。よく使う

0
JonS

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

0
Matthew Farwell

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

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

ありがとう、

ビル

0
Bill Perry

あなたの問題はここのスレッドに似ているようですSO( OracleのUTL_FILEパッケージを使用してExcelSheetで書く 。)そして私は最近この問題の簡単な解決策を見つけることができました。AntonSchefferによって作成されたas_xlsxというパッケージを使用し( PL/SQLでExcelファイルを作成 )、いくつかの変更を加えて、単一のExcelワークブック内に複数のシートを作成しました。ループに通します。セルの色、フォントスタイル、フォントサイズ、境界線などの基本的な書式設定もサポートします。かなり気の利いたものです。( PL/SQLを使用してExcelファイル(.xlsx)を作成 =)。

お役に立てれば!

0
Migs Isip