• 締切済み

UTL_FILEにて既存のExcelに追加書き込みできますか?

いつもお世話になっております。 他にも質問をしており申し訳ないですが、どうしても困っておりまして新たに質問させていただきます。 UTL_FILEパッケージにて、予め用意しておいた雛形のExcelファイルに対して、入出力モード='A'にて追加書き込みしたいのですが、「PL/SQLプロシージャは正常に完了しました」は表示されますが、実際のファイルには全く追加書き込みされません。 入出力モード='W'にて新たなファイルを作成し、そのファイルに一切触れないまま、入出力モード='A'で書き込みを行うと、最終行に確かに追加されております。ただ、その新たなファイルをオープンして何か加工するとそれだけで追加書き込みができなくなるようです。 そもそも既存のExcelに追加書き込みできるものなのでしょうか? どなたかご教授いただけませんでしょうか? 宜しくお願い致します。

みんなの回答

回答No.2

Windows版のオラクルは、PL/SQLでCOMオートメーションを利用できますので、 EXCELを起動し、セルに情報を追記することは、可能です。(標準機能) オラクルサーバにEXCELがインストールされている必要がありますけどね。 ただ、EXCELで統計資料を作成するのが目的なら、EXCEL側にVBAでオラクルデータを 読み出して、資料を作成する方が簡単かつ事例がたくさんあるように思いますよ。

ryozyryozy
質問者

お礼

ご回答ありがとうございます! COMオートメーションで色々と検索してみましたが、正直難しくてよくわかりません。なにか良いサイトか、もしよろしければサンプルコードなどをご提示いただくことは可能でしょうか? どうか宜しくお願い致します。

  • sshiba
  • ベストアンサー率69% (73/105)
回答No.1

「雛形のExcelファイル」と書いているところが気になるのですが、 その「Excelファイル」の拡張子って*.xlsですか? それとも*.xlsxとか*.csvでしょうか? *.xlsフォーマットはバイナリですし、*.xlsxもXML形式ですから、 単純にそれらの形式のファイルの後ろに追加書き込みしても Excel上では反映されませんよ。 ですから、それは「追加書き込みされていない」のではなくて、 「書き込みはされているがExcelで開いても見えていない」という話では ないかと思います。 単純にファイルの後ろに追加書き込みした結果がExcelで反映できるのは *.csvフォーマットじゃないと無理で、それ以外のフォーマットの Excelファイルを(Excelを使わずに)読み書きするためには、.NETやVB、 perl, pythonなどのプログラム開発環境向けに準備されている Excelファイルを取り扱うためのライブラリを併用する必要があります。 OracleのUTL_FILE単体だと、元々何らかのデータが入っている Excelファイルを更新するのは無理だと思いますが。

ryozyryozy
質問者

お礼

ご回答ありがとうございます! >その「Excelファイル」の拡張子って*.xlsですか? まさに*.xlsです。 >*.xlsフォーマットはバイナリですし、*.xlsxもXML形式ですから、 単純にそれらの形式のファイルの後ろに追加書き込みしても Excel上では反映されませんよ。 ですから、それは「追加書き込みされていない」のではなくて、 「書き込みはされているがExcelで開いても見えていない」という話では ないかと思います。 なるほど、そういうことだったんですね。 >Excelファイルを(Excelを使わずに)読み書きするためには、.NETやVB、 perl, pythonなどのプログラム開発環境向けに準備されている Excelファイルを取り扱うためのライブラリを併用する必要があります。 OracleのUTL_FILE単体だと、元々何らかのデータが入っている Excelファイルを更新するのは無理だと思いますが。 PL/SQLのみを使用して、簡単な統計が作れれば工数削減になるかと思って思いついたのですが、ムリなようですね。。 csvファイルに記号(===等)を使用して、枠線っぽく書いて加工するしかなさそうですね?

関連するQ&A