tagCANDY CGI VBレスキュー(花ちゃん)の Visual Basic 6.0用 掲示板 [ツリー表示へ]   [Home]
一括表示(VB6.0)
タイトルVB6環境で xlsxファイルの出力
記事No15700
投稿日: 2013/06/13(Thu) 10:45
投稿者しん
しんと申します。
皆様よろしくお願いします。

VB6環境で作成したアプリケーションで、xlsファイル(EXCEL2000〜2003形式)を出力しています。VB6で xlsxファイル(EXCEL2007形式)を出力することは可能でしょうか。

下記の@〜Bのいずれかで対応となるのでしょうか?
@ライブラリをインポートでxlsファイルを出力可能となる
Axlsファイル出力後、コンバートソフトをキックして xls→xlsx変換させる
BVB6環境をnet環境へ移管し、xlsxファイルで出力するように修正する

申し訳ありませんが、よろしくお願いします。

[ツリー表示へ]
タイトルRe: VB6環境で xlsxファイルの出力
記事No15701
投稿日: 2013/06/13(Thu) 19:09
投稿者VBレスキュー(花ちゃん)
Excel や Access の機能を使わずにという事ですよね。

1 と 2 については、あるか? ないか? の話なのでご自分で検索でもして調べてみて下さい。
どのような物を想定されているかも解らないし(無償・有償でもいいのか等)
私が調べても、貴方が調べても同じ事なので、私が調べた場合は、見つからない=無い で
あきらめがつくのですが。
貴方に対しては、そのような物はありませんと言い切れないので。

>xls→xlsx変換させる
そもそも 何の為にそのような処理が必要なのでしょうか? 逆なら解らないでもないのですが。

3 は、VB6.0 にしろ VB2010 等に移行しようが、Excel を介してでないと VB の機能だけでは
できないかと。(Excel のフォーマットが解っていてご自分でそのフォーマットに変更でき、
著作権等にふれないなら別ですが、又技術的にできてもそれが私や貴方にできるかどうか)

一旦、Excel 2007 等に表示してから、xlsx 形式で保存するのが一番無難で簡単な方法かと。

[ツリー表示へ]
タイトルRe^2: VB6環境で xlsxファイルの出力
記事No15702
投稿日: 2013/06/14(Fri) 04:27
投稿者YuO
> 3 は、VB6.0 にしろ VB2010 等に移行しようが、Excel を介してでないと VB の機能だけでは
> できないかと。(Excel のフォーマットが解っていてご自分でそのフォーマットに変更でき、
> 著作権等にふれないなら別ですが、又技術的にできてもそれが私や貴方にできるかどうか)

一応,System.IO.Packagingもありますし,ECMA-376も公開されていますし,
.xlsxファイルをunzipすれば中身も見えるので,頑張ればできなくもないですね。
http://www.ecma-international.org/publications/standards/Ecma-376.htm

VB6でも,Zipを扱うライブラリとXMLを扱うライブラリを組み合わせればできなくもない……かと。


一からファイルを作るのは非常に大変ですが,既存のファイルを弄るのであれば,ある程度までは力業でなんとかなります。
.NET 4 (Full) 用のEPPlusなどのライブラリを使えば,中身を知らなくてもある程度は処理できますし。
# OOXML SDKはSystem.IO.Packagingの薄いラッパーなので,使い勝手がよくなかった……。

[ツリー表示へ]
タイトルRe: VB6環境で xlsxファイルの出力
記事No15703
投稿日: 2013/06/17(Mon) 10:52
投稿者魔界の仮面弁士
> VB6環境で作成したアプリケーションで、xlsファイル(EXCEL2000〜2003形式)を出力しています。
現状はどのようにして作成していますか?

*.xls のバイナリーフォーマットは公開されてはいますが、よもや、
Excel ファイルの BIFF バイナリを手動生成しているわけでは無いのですよね?
http://www.microsoft.com/openspecifications/en/us/programs/osp/office-file-formats/default.aspx

Jet 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.html
http://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を使いやすくまとめたライブラリです)

[ツリー表示へ]
タイトルRe: VB6環境で xlsxファイルの出力
記事No15704
投稿日: 2013/06/18(Tue) 13:13
投稿者しん
質問者のしんです。
返事が遅くなり申し訳ありません。

VB6でOffice 2007/2010 を参照設定の方法で解決できそうです。
皆様から頂いた情報を基にトライしてみます。

VBレスキュー(花ちゃん)様、YuO様、魔界の仮面弁士様 ありがとうございました。

[ツリー表示へ]