- - PR -
【ASP.NET】Webサーバ側で複数Excelを圧縮したい
1|2|3
次のページへ»
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2006-03-22 16:39
ASP.NET(VB.NET)で開発しています。
クライントからボタンが押されたタイミングで、 Webサーバ上にある複数のExcelファイルをZIP形式で圧縮して1つのファイルにし、そのファイルをクライアント側にダウンロードさせるような仕組みを考えております。 http://www.atmarkit.co.jp/fdotnet/dotnettips/361aspzipfile/aspzipfile.html で、やり方は分かったのですが、上記ページの例ではテキストファイルを読み込み、バイト配列に出力していますが、私の場合、既に存在するExcelファイルをそのまま圧縮したいので、どのように変更すればよいのか困っています。 zipStream.write の第1引数はバイト配列であることから、既存Excelファイルをバイト配列にセットし直さないといけないのでしょうか・・・ 何かヒントでもいただけると幸いです。よろしくお願い致します。 | ||||||||
|
投稿日時: 2006-03-22 16:57
ふむ、J# の ZipOutputStream ですか。 zipStream.putNextEntry メソッドで ZipEntry のインスタンスを加えていくことになるかな。 Reader でファイルの中身を読み取り、Writer で zipStream を指定して Write していく。 試したいところなんですが、環境がないので試せません。 多分、こんな感じでしょうということで。 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||||||
|
投稿日時: 2006-03-22 17:36
じゃんぬさん、お返事ありがとうございます。
すいません。あまりイメージが湧かないもので・・・ こんな感じなのでしょうか。 Dim zipStream As New ZipOutputStream(New FileOutputStream(Server.MapPath(ZIPファイル名))) 圧縮したいExcelファイルがある間、以下の処理を行なう。 Dim zEntry As New ZipEntry(Excelファイル名) zEntry.setMethod(ZipOutputStream.DEFLATED) zipStream.putNextEntry(zEntry) ExcelファイルをOPEN Excelファイルにデータがある間、以下の処理を行なう。 Excelファイルからデータを読み込む zipStream.write(読み込んだデータ) ここまで繰り返し ExcelファイルをCLOSE zipStream.closeEntry() ここまで繰り返し zipStream.flush() zipStream.close() イメージ出来てますか? この場合、ExcelファイルはバイナリモードでOPENしなければいけないんですよね? | ||||||||
|
投稿日時: 2006-03-22 17:59
ええ、そんな感じだと思います。 Entry は Close しなくて良かったかな? > closeEntry();
ですかね、このあたりは試してみてください。(試したことがないのでワカリマセンw) _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||||||
|
投稿日時: 2006-03-23 11:51
早速試しているのですが、どうもうまく読み込めません。単純に、
とすると、FileGet時に読み込む「s_ExcelData」がNothingになり、無限ループに陥ります(;_;) FileGetして取得したデータは、バイト配列に設定する必要があるのでしょうか? と言うより、ExcelファイルからFileGetでデータを取得できるのでしょうか? | ||||||||
|
投稿日時: 2006-03-23 12:15
FileGet ときましたか... (;^-^) BufferedInputStream などを使いましょう。 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||||||
|
投稿日時: 2006-03-23 14:26
じゃんぬさん、ご指摘ありがとうございます(^o^) BufferedInputStream を勉強しまして、以下のページを参考にソースを変更しましたが、やはりうまくいきません。 [参考]http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=13200&forum=7
やはり、While内でループしてしまいます。 データの取得方法が間違っているのでしょうか? <li_byteCount=0、buf.Length=4097> | ||||||||
|
投稿日時: 2006-03-23 14:48
怒られる前に、訂正します。
そりゃ、動きません(^_^;) 以下のように修正しました。
修正したところ、処理は終了しましたが、作成されたZIPファイルの中身は空でした。read もしくは write で失敗しているってことでしょうか。もう少し調べてみます。 |
1|2|3
次のページへ»