4

Excel VBA 関数でファイルを GZip 圧縮できるようにする必要があります。具体的には、'deflate' アルゴリズムを使用できるようにする必要があります。

コマンドラインアプリケーションを実行せずにこれを行う方法はありますか? 外部ツールに依存しないため、コードはより堅牢になります。

理想的には、コードはプリインストールされた VBA または COM ライブラリ関数を使用します。このロジックを自分で実装したり、DLL をインストールしたりする必要はありません。

可能であれば、利用可能な Excel アドインに .xla を追加するだけで機能を簡単にインストールできるようにしたいと考えています。DLL、EXE、レジストリ エントリなどは必要ありません。

編集これを行うために.NET GZipStreamを利用できますか?

4

5 に答える 5

4

VBA (実際には VB6 の方言です) は、この種のアプリケーションでは低速です。VB6 と C で Shannon-Fano アルゴリズムを実装したことがあるのを覚えています。C バージョンは、DLLMain に変換され、コマンドライン実行可能ファイルではなくそこから呼び出された後でも、約 10 倍高速でした。

オープン ソースとシェアウェアの両方の圧縮サービスを提供する COM DLL は多数あり、それらのいくつかは GZIP の圧縮アルゴリズムを実装しています。VBA コードからそのような DLL の 1 つの関数を呼び出して、代わりに圧縮を行うのは非常に簡単です。

アプリケーションの外部で何かを使用することに消極的であることは理解していますが、この場合、パフォーマンスのために例外を適用する必要があるかもしれません。

あなたの楽しみを完全に台無しにするために、windows\system32 にあるファイル ZIPFLDR.DLL を調べてください。次のリンクも参照してください。

グーグルで両方を見つけたので、より多くの/より良い例を見つけることができるはずです。

于 2008-10-03T19:35:48.250 に答える
3

OK、私はあなたに答えがあると思います。

zlibは、実装したくないdeflateアルゴリズムを作成した人によって作成されたライブラリです。利用可能なwin32DLLがあります。Windowsからの使用に関するFAQは次のとおりです。

http://www.zlib.net/DLL_FAQ.txt

質問7を確認してください。作成者はWindowsユーザーにはあまり熱心ではなく、VBユーザーにもまったく熱心ではないようですが、ライブラリを提供するのに十分親切である限り、残りの作業を行うことができます。

これがあなたを助けるのに十分なら、それなら素晴らしい。VBAからCライブラリを呼び出す際にサポートが必要な場合は、コメントを追加してください。私は何年もVBからCへの呼び出しを行っていません-それは楽しそうに聞こえます。

于 2008-10-03T21:29:41.297 に答える
0

アルゴリズムを VBA で実装する場合は、(VBA で) スプレッドシートを保存してから、VB の I/O 関数を使用してファイルを開き、収縮させ、再度保存する必要があります。すべての意図と目的は、ファイルで動作する通常の VB アプリケーションを作成することと同じです。「使用中のファイル」タイプのエラーを回避するために、VBA マクロを別のワークブックに配置する必要がある場合がありますが、ファイルを読み取り専用として再度開き、別のファイル名で保存すると、すべてを 1 つのワークブックに保持しても問題ありません。

しかし、VBA 内から gzip にシェルアウトすることは、機能的には同じであり、はるかに簡単であることはほぼ確実です。

編集:いくつかのコード。私が実行したときは失敗しなかったので、すべてを同じブックに保持しても問題ありません。

Sub main()
    ActiveWorkbook.Save
    Open "macrotest.xls" For Binary Access Read As #1
    Open "newfile.zip" For Binary Access Write As #2
        'do your stuff here
    Close #2
    Close #1
End Sub
于 2008-10-03T17:10:16.500 に答える
0

サードパーティのソフトウェアに依存せずにファイルを圧縮したい場合、通常は COM オブジェクト/DLL として実装し、Excel 以外でも利用できるようにします。誰かが zip 機能を Excel に組み込みたい場合、アルゴリズムを再実装する必要がないように、サードパーティのツールを使用します。だから、あなたは潮に逆らって泳いでいます。でも...

http://www.cpearson.com/excel/SaveCopyAndZip.htm

2 つのバージョンがあります。COM アドイン バージョンでは、「...ディスクに保存された任意のブックを圧縮できます (ただし、保存されていない状態である可能性があります)」。Moonlight Software コンポーネントに依存していますが、すべてのコンポーネントとセットアップはインストーラーに含まれています。パブリック ドメインではありませんが、ライセンスは GPL よりも制限が緩くなっています。最終結果は、Excel アドイン (サードパーティ コンポーネントを使用) です。

しかし、本当に外部ツールに依存したくない場合は、圧縮アルゴリズムを自分で実装するか、Microsoft がその機能を Windows に組み込み、Excel で公開するまで待つ必要があります。

これが役立つことを願っています。

于 2008-10-04T14:52:10.787 に答える
0

あなたはワインのボトルを開けたいと思っているようですが、ボトルオープナーの使用を断固として拒否しています. ファイルの GZipping を許可する VBA 機能がない限り、dll や exe ファイルなどの外部リソースなしではジョブを実行できません。

于 2008-10-03T20:51:00.080 に答える