- - PR -
サーバー上に用意されたエクセルシートのフォーマットをインポートするには?
1
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 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-07-21 16:58
結果として、どうしたいのでしょうか?
サーバ上のテンプレートを読み込んで、編集し、保存し、保存したExcelファイルをクライアントにダウンロードさせたいのですよね。 サーバ側に保存したExcelファイルを残したくないのでしょうか? 別の端末から同じ処理を同じタイミングでされたら、どうしますか? | ||||||||
|
投稿日時: 2006-07-21 17:20
ひろれいさん返答ありがとうございます。
結果としては サーバー側には編集したエクセルシートは残さないようにします。 同じタイミングで別の端末が処理をされたら、できることなら同じようにエクセルシートをダウウンロードさせたいです。 処理終了後はテンプレートのEXCELファイルを編集されないで、 サーバ上のテンプレートを読み込んで、編集したExcelファイルをクライアントにダウンロードさせたいです。 よろしくお願いします。 | ||||||||
|
投稿日時: 2006-07-21 17:29
えっ?本当に? 再読込みボタンを連打したり、複数クライアントから同時アクセスしても問題ありませんでした?私なら怖くて試す気にもならないですよ。
それで何か問題がありますか?サーバー上に保存されたExcelファイルのURLをクライアントに渡しても良いでしょう。URLを返すことでワンクッション置く事が問題なら、一旦保存したファイルを読込んでResponse.Writeで出力したらよいでしょう。 ファイル名の重複が問題なら、重複しないようなファイル名で保存すればよいでしょう。削除するタイミングが問題なら、別途サービスでも作って一定時間経過したファイルを削除しても良いでしょう。前述のResponse.Writeを使うなら処理が終わった後で削除しても良いでしょうし。 | ||||||||
|
投稿日時: 2006-07-21 17:57
甕星さん返信ありがとうございます。
引用: -------------------------------------------------------------------------------- それで何か問題がありますか?サーバー上に保存されたExcelファイルのURLをクライアントに渡しても良いでしょう。URLを返すことでワンクッション置く事が問題なら、一旦保存したファイルを読込んでResponse.Writeで出力したらよいでしょう。 ファイル名の重複が問題なら、重複しないようなファイル名で保存すればよいでしょう。削除するタイミングが問題なら、別途サービスでも作って一定時間経過したファイルを削除しても良いでしょう。前述のResponse.Writeを使うなら処理が終わった後で削除しても良いでしょうし。 -------------------------------------------------------------------------------- ありがとうございます。 このやり方でプロジェクト責任者と検討してみようと思います。 複数クライアントのアクセスの件ですが、現在このソースはまだサーバーにあげていなく、自分のPC上でテストしている状況です。 このソースでサーバにあげた際にどのような不具合がでるか教えて頂けたらと思いま す。それと図々しいようですがその際、どのように解決すればいいかも教えて頂けたら と・・・ よろしくお願いします。 | ||||||||
|
投稿日時: 2006-07-21 22:14
参照元記事にも書いてありますが、GC.Collect は不要です。というより、これをしなくても Excel が終了するように作ってください。ASP.NET では絶対です。
さて、ダウンロードできるようにするには、Excel からストリームに保存することが出来ないため、静的にファイルを用意してあげる必要があります。このため、「手順 2.5」として、「サーバのローカルに保存する」処理が必要となります。また、「手順 4」として、「作成したファイルを消す」という処理も必要です。 このとき、ウェブ アプリケーションには、同時に多数の人が接続することが見込まれるため、それぞれで別々のファイルを作るようにしなければなりません。System.IO 名前空間のクラスのメソッドを見てみてください。一時ファイル名をつくるメソッドがあります。 保存する場所にも気をつけてください。ASP.NET の実行ユーザは、セキュリティ上、低い権限しか持っていません。 | ||||||||
|
投稿日時: 2006-07-23 00:56
http://support.microsoft.com/default.aspx?scid=kb;JA;257757 |
1