OracleからExcelにデータをエクスポートするpl/sqlプロシージャを作成しています。 CSVを使用できないように、データの書式設定が必要です。すでにXMLを試しましたが、エクスポートするときに生成されるファイルが大きすぎます。 50列の70000行(ほぼ300MB !!!)。
そのため、HTMLタグを使用してXLSファイルを生成することにしました。これはXMLよりも小さく、一部の特別な列のみの形式を直接定義する必要があります(文字列、数値、日付はExcelによって自動的にフォーマットされます)。非常にシンプルで便利ですが、複数のワークシートを定義することはできません。
HTMLを使用して記述されたExcelファイルに複数のワークシートを追加/定義する方法を知っていますか? <%ActiveWorkbook.Worksheet.Add%>のようなVBScript式を使用しようとしましたが、機能しません。
書式設定と複数のワークシートを含むExcelファイルを生成するためのパッケージをpl/sqlで開発しました。これはあなたにとって役立つかもしれません。
http://sanjeev-Oracle-world.blogspot.com/2007/06/create-Excel-workbook-by-plsql-code.html
よろしくサンジーブ
OracleサーバーでExcelまたはHTMLファイルを作成する代わりに、ODBCまたはOLEDBを介して既存のExcelドキュメントにOracleデータをフェッチできます。欠点は、ユーザー権限に注意する必要があることです。
同様の問題が発生し、最終的には、スプレッドシートにクエリを実行してデータを入力する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形式の機能のサブセットをサポートします。
差出人: [〜#〜] 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のソリューション を使用します。
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
ExcelDocumentTypeは優れたソリューションです。 PL/SQLを使用して完全に機能するマルチシートExcelドキュメントを生成できます。あなたはここでそれを見つけることができます:
http://radio.weblogs.com/0137094/2006/10/26.html
http://radio.weblogs.com/0137094/2009/01/02.html
(ジェイソンベネットの開発者コーナー)
PL/SQLのみを使用してOracleデータベースからExcelドキュメントを生成できる別のプロジェクトORA_Excel( www.oraexcel.com )があります。
Excel内からSQLクエリを実行できるSQL * XLという製品があり、結果はワークシート内に表示されます(更新することもできます)。
これは商用であり、無料ではありませんが、たったの約50ユーロなので、高価ではありません。よく使う
(小さな)ExcelシートをhtmlとしてExcelに保存し、その形式を再現することができます。
OOXMLメソッドに使用します。 PL/SQLでそれを行うための独自のメソッドを最初に作成していましたが、同僚がExcellantと呼ばれるこの製品を見つけました。列マッピングとスタイル/数式(ほとんどすべてのExcel数式が機能します)を含むxml仕様を渡すと、クエリが返され、clobが返されます。したがって、clobを小さくしたい場合は、clobでgzipを実行できます。私のマネージャーがpcardでそれを買った製品はかなり安いです。
Webサイトはwww.peak42solutions.comです。ネットワーク関係者がデータベースへの直接アクセスを許可していないため、ODBCを使用できませんでした。現在、Excelで請求書を顧客に電子メールで送信しています。
ありがとう、
ビル
あなたの問題はここのスレッドに似ているようですSO( OracleのUTL_FILEパッケージを使用してExcelSheetで書く 。)そして私は最近この問題の簡単な解決策を見つけることができました。AntonSchefferによって作成されたas_xlsx
というパッケージを使用し( PL/SQLでExcelファイルを作成 )、いくつかの変更を加えて、単一のExcelワークブック内に複数のシートを作成しました。ループに通します。セルの色、フォントスタイル、フォントサイズ、境界線などの基本的な書式設定もサポートします。かなり気の利いたものです。( PL/SQLを使用してExcelファイル(.xlsx)を作成 =)。
お役に立てれば!