@IT会議室は、ITエンジニアに特化した質問・回答コミュニティ「QA@IT」に生まれ変わりました。ぜひご利用ください。
- PR -

サーバー上に用意されたエクセルシートのフォーマットをインポートするには?

1
投稿者投稿内容
あつし
会議室デビュー日: 2006/07/21
投稿数: 3
投稿日時: 2006-07-21 16:38

こんにちはあつしと申します。
ASP.netは初心者です。
過去スレを読んでも解決することができなかったので投稿しました。
ただいま ASP.net #vb.net でwebアプリケーションを構築しています。

やりたいことは↓
1:サーバー上に用意されたエクセルシートのフォーマットを読み込む。
2:読み込んだフォーマットのセルに値を入れる
3:2で作られたエクセルファイルをダウンロードできるようにする

現在書いているソースで1と2はできたのですが3の部分につなげることができません。

ソースは下記に記します。

Dim xlApp As New Excel.Application

Dim xlBooks As Excel.Workbooks = xlApp.Workbooks
'既存のファイルを開く場合
Dim xlFilePath As String = "サーバー上に用意されたエクセルシート.xls"
Dim xlBook As Excel.Workbook = xlBooks.Open(xlFilePath)
Dim xlSheets As Excel.Sheets = xlBook.Worksheets
Dim xlSheet As Excel.Worksheet = xlSheets.Item(1)
xlApp.Visible = True 'Excelを表示(必ずとも表示しなくてもよい)

'データの入力処理
Dim xlRange As Excel.Range
Dim strDat(2, 0) As Object
xlRange = xlSheet.Range("A5:A7") 'データの入力セル範囲
strDat(0, 0) = "12" 'データの作成
strDat(1, 0) = "34"
strDat(2, 0) = "=A5+A6" '計算式
xlRange.Value = strDat 'セルへデータの入力
System.Runtime.InteropServices.Marshal.ReleaseComObject(xlRange) 'xlRange の解放
'ファイルの保存処理
xlApp.DisplayAlerts = True '保存時の問合せのダイアログを非表示に設定
xlSheet.SaveAs("保存先.xls") 'ファイルに保存
xlApp.DisplayAlerts = True '元に戻す

' 終了処理
System.Runtime.InteropServices.Marshal.ReleaseComObject(xlSheet) 'xlSheet の解放
System.Runtime.InteropServices.Marshal.ReleaseComObject(xlSheets) 'xlSheets の解放
xlBook.Close(False) 'xlBook を閉じる
System.Runtime.InteropServices.Marshal.ReleaseComObject(xlBook) 'xlBook の解放
System.Runtime.InteropServices.Marshal.ReleaseComObject(xlBooks) 'xlBooks の解放
xlApp.Quit() 'Excelを閉じる
System.Runtime.InteropServices.Marshal.ReleaseComObject(xlApp) 'xlApp を解放
System.GC.Collect()

これではサーバー上にファイルを保存することになってしまいます。
このソースは他のサイトから引用しました。

説明が下手で申し訳ございません。
ご教授をお願いします。
ひろれい
ぬし
会議室デビュー日: 2006/03/02
投稿数: 486
お住まい・勤務地: 万博開催地
投稿日時: 2006-07-21 16:58
結果として、どうしたいのでしょうか?

サーバ上のテンプレートを読み込んで、編集し、保存し、保存したExcelファイルをクライアントにダウンロードさせたいのですよね。

サーバ側に保存したExcelファイルを残したくないのでしょうか?
別の端末から同じ処理を同じタイミングでされたら、どうしますか?
あつし
会議室デビュー日: 2006/07/21
投稿数: 3
投稿日時: 2006-07-21 17:20
ひろれいさん返答ありがとうございます。

結果としては
サーバー側には編集したエクセルシートは残さないようにします。
同じタイミングで別の端末が処理をされたら、できることなら同じようにエクセルシートをダウウンロードさせたいです。

処理終了後はテンプレートのEXCELファイルを編集されないで、
サーバ上のテンプレートを読み込んで、編集したExcelファイルをクライアントにダウンロードさせたいです。

よろしくお願いします。
甕星
ぬし
会議室デビュー日: 2003/03/07
投稿数: 1185
お住まい・勤務地: 湖の見える丘の上
投稿日時: 2006-07-21 17:29
引用:

あつしさんの書き込み (2006-07-21 16:38) より:
1:サーバー上に用意されたエクセルシートのフォーマットを読み込む。
2:読み込んだフォーマットのセルに値を入れる
3:2で作られたエクセルファイルをダウンロードできるようにする

現在書いているソースで1と2はできたのですが3の部分につなげることができません。


えっ?本当に?
再読込みボタンを連打したり、複数クライアントから同時アクセスしても問題ありませんでした?私なら怖くて試す気にもならないですよ。

引用:

これではサーバー上にファイルを保存することになってしまいます。


それで何か問題がありますか?サーバー上に保存されたExcelファイルのURLをクライアントに渡しても良いでしょう。URLを返すことでワンクッション置く事が問題なら、一旦保存したファイルを読込んでResponse.Writeで出力したらよいでしょう。

ファイル名の重複が問題なら、重複しないようなファイル名で保存すればよいでしょう。削除するタイミングが問題なら、別途サービスでも作って一定時間経過したファイルを削除しても良いでしょう。前述のResponse.Writeを使うなら処理が終わった後で削除しても良いでしょうし。
あつし
会議室デビュー日: 2006/07/21
投稿数: 3
投稿日時: 2006-07-21 17:57
甕星さん返信ありがとうございます。

引用:
--------------------------------------------------------------------------------

それで何か問題がありますか?サーバー上に保存されたExcelファイルのURLをクライアントに渡しても良いでしょう。URLを返すことでワンクッション置く事が問題なら、一旦保存したファイルを読込んでResponse.Writeで出力したらよいでしょう。

ファイル名の重複が問題なら、重複しないようなファイル名で保存すればよいでしょう。削除するタイミングが問題なら、別途サービスでも作って一定時間経過したファイルを削除しても良いでしょう。前述のResponse.Writeを使うなら処理が終わった後で削除しても良いでしょうし。

--------------------------------------------------------------------------------

ありがとうございます。
このやり方でプロジェクト責任者と検討してみようと思います。

複数クライアントのアクセスの件ですが、現在このソースはまだサーバーにあげていなく、自分のPC上でテストしている状況です。

このソースでサーバにあげた際にどのような不具合がでるか教えて頂けたらと思いま
す。それと図々しいようですがその際、どのように解決すればいいかも教えて頂けたら
と・・・

よろしくお願いします。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2006-07-21 22:14
 参照元記事にも書いてありますが、GC.Collect は不要です。というより、これをしなくても Excel が終了するように作ってください。ASP.NET では絶対です。

 さて、ダウンロードできるようにするには、Excel からストリームに保存することが出来ないため、静的にファイルを用意してあげる必要があります。このため、「手順 2.5」として、「サーバのローカルに保存する」処理が必要となります。また、「手順 4」として、「作成したファイルを消す」という処理も必要です。
 このとき、ウェブ アプリケーションには、同時に多数の人が接続することが見込まれるため、それぞれで別々のファイルを作るようにしなければなりません。System.IO 名前空間のクラスのメソッドを見てみてください。一時ファイル名をつくるメソッドがあります。
 保存する場所にも気をつけてください。ASP.NET の実行ユーザは、セキュリティ上、低い権限しか持っていません。
todo
ぬし
会議室デビュー日: 2003/07/23
投稿数: 682
投稿日時: 2006-07-23 00:56
引用:

このソースでサーバにあげた際にどのような不具合がでるか教えて頂けたらと思いま
す。



http://support.microsoft.com/default.aspx?scid=kb;JA;257757
1

スキルアップ/キャリアアップ(JOB@IT)