しんと申します。皆様よろしくお願いします。VB6環境で作成したアプリケーションで、xlsファイル(EXCEL2000〜2003形式)を出力しています。VB6で xlsxファイル(EXCEL2007形式)を出力することは可能でしょうか。下記の@〜Bのいずれかで対応となるのでしょうか?@ライブラリをインポートでxlsファイルを出力可能となるAxlsファイル出力後、コンバートソフトをキックして xls→xlsx変換させるBVB6環境をnet環境へ移管し、xlsxファイルで出力するように修正する申し訳ありませんが、よろしくお願いします。
Excel や Access の機能を使わずにという事ですよね。1 と 2 については、あるか? ないか? の話なのでご自分で検索でもして調べてみて下さい。どのような物を想定されているかも解らないし(無償・有償でもいいのか等)私が調べても、貴方が調べても同じ事なので、私が調べた場合は、見つからない=無い であきらめがつくのですが。貴方に対しては、そのような物はありませんと言い切れないので。>xls→xlsx変換させるそもそも 何の為にそのような処理が必要なのでしょうか? 逆なら解らないでもないのですが。3 は、VB6.0 にしろ VB2010 等に移行しようが、Excel を介してでないと VB の機能だけではできないかと。(Excel のフォーマットが解っていてご自分でそのフォーマットに変更でき、著作権等にふれないなら別ですが、又技術的にできてもそれが私や貴方にできるかどうか)一旦、Excel 2007 等に表示してから、xlsx 形式で保存するのが一番無難で簡単な方法かと。
> 3 は、VB6.0 にしろ VB2010 等に移行しようが、Excel を介してでないと VB の機能だけでは> できないかと。(Excel のフォーマットが解っていてご自分でそのフォーマットに変更でき、> 著作権等にふれないなら別ですが、又技術的にできてもそれが私や貴方にできるかどうか)一応,System.IO.Packagingもありますし,ECMA-376も公開されていますし,.xlsxファイルをunzipすれば中身も見えるので,頑張ればできなくもないですね。http://www.ecma-international.org/publications/standards/Ecma-376.htmVB6でも,Zipを扱うライブラリとXMLを扱うライブラリを組み合わせればできなくもない……かと。一からファイルを作るのは非常に大変ですが,既存のファイルを弄るのであれば,ある程度までは力業でなんとかなります。.NET 4 (Full) 用のEPPlusなどのライブラリを使えば,中身を知らなくてもある程度は処理できますし。# OOXML SDKはSystem.IO.Packagingの薄いラッパーなので,使い勝手がよくなかった……。
> VB6環境で作成したアプリケーションで、xlsファイル(EXCEL2000〜2003形式)を出力しています。現状はどのようにして作成していますか?*.xls のバイナリーフォーマットは公開されてはいますが、よもや、Excel ファイルの BIFF バイナリを手動生成しているわけでは無いのですよね?http://www.microsoft.com/openspecifications/en/us/programs/osp/office-file-formats/default.aspxJet I-ISAM Export を使用しているのか、Excel オートメーションを使っているのか、サードパーティー製品(Excel Creator 等)なのか…。(Jet や Excel Creator 等の場合、実行環境に Excel は無くても済みます)> VB6で xlsxファイル(EXCEL2007形式)を出力することは可能でしょうか。可能です。Office Open XML の仕様は公開されていますので、極端な話、手間さえ惜しまなければ xlsx のファイルを自前で生成することも、理論的には可能です。http://ja.wikipedia.org/wiki/Office_Open_XML実際には自己生成は現実的では無いため、何らかのライブラリやツールを併用した方が良いでしょう。> ライブラリをインポートでxlsファイルを出力可能となるVB6に「インポート」という機能があったかどうかはさておき、「参照設定」の意味であれば、Excel オートメーションを使う方法(VB6 から Office 2007/2010 を参照設定して利用)や、サードパーティ製品(Excel Creator 等)を使っての出力などが該当しそうですね。> xlsファイル出力後、コンバートソフトをキックして xls→xlsx変換させるその方法も使えますが、可能であれば最初から xlsx を生成した方が手っ取り早そうです。それに、そもそも xls で事足りるようなドキュメントを、わざわざ xlsx に変換する意味があるのかについても、多少の疑問が残ります。> VB6環境をnet環境へ移管し、xlsxファイルで出力するように修正する.NET からの生成ならば、CodePlex で公開されている「ClosedXML」あたりが有名ですね。http://closedxml.codeplex.com/その他、EPPlus という物もあります。http://epplus.codeplex.com/Java 系から移植されてきた NPOI 2.0 という .NET ライブラリも知名度が高いです。http://npoi.codeplex.com/releases/あとは…市販パッケージになりますが、SmartXLS、SpreadsheetGear、Excel Creator 等々。http://www.smartxls.com/http://www.xlsoft.com/jp/products/SSG/product.htmlhttp://www.adv.co.jp/product/product_excelcreator2012.htmなお、.NET 標準で Excel 出力する機能は用意されていません。この点は VB6 と同じです。ただし、Office を操作するためのライブラリは用意されているため、VB6 と同様にオートメーション操作という形を取ることもできます。ただし、VB6 の頃に比べるとActiveX オブジェクトの解放処理が面倒になっていますので、個人的にはあまりお奨めしません。また、Microsoft 公式で「Open XML SDK」が提供されていますが、OOXML SDK 自体、あまり使いやすいものでは無いため個人的にはお奨めしません。http://www.microsoft.com/ja-jp/download/details.aspx?id=5124(先の ClosedXML 等は、OpenXMLを使いやすくまとめたライブラリです)
質問者のしんです。返事が遅くなり申し訳ありません。VB6でOffice 2007/2010 を参照設定の方法で解決できそうです。皆様から頂いた情報を基にトライしてみます。VBレスキュー(花ちゃん)様、YuO様、魔界の仮面弁士様 ありがとうございました。