DOBON.NET DOBON.NETプログラミング掲示板過去ログ

EXCELファイルのダウンロード

環境/言語:[Win 2000 Pro VB.NET]
分類:[ASP.NET]

いつもお世話になります。

今回教えていただきたいことなんですが、
・ASP.NETでサーバー側で作成したEXCELファイルをダウンロード
 したいのですが、その際にサーバー側にEXCELファイルを保存
 せずにダウンロードさせることは可能でしょうか? 既存のEXCEL
 ファイルをダウンロードすることはできそうなのですが・・・
 
・やったこと。
 インターネットなどで調べたところCSVファイルに対していいサンプル
 があったので、それににせてやってみたのですがだめでした。

 Dim xls As Excel.Application
Dim xbook As Excel.Workbook
Dim xsheet As Excel.Worksheet
Dim i As Integer
Dim j As Integer

xls = CType(CreateObject("Excel.Application"), Excel.Application)
xbook = CType(xls.Workbooks.Add, Excel.Workbook)
xsheet = CType(xbook.Worksheets(1), Excel.Worksheet)
xsheet.Cells(1, 1) = "整理"

Response.AddHeader("Content-Disposition", "attachment;filename=ailight.xls")
Response.ContentType = "application/octet-stream"
'System.Text.Encoding = System.Text.Encoding.GetEncoding("Shift-JIS"))
Response.Write(xls)

 知っている方がおられましたら宜しくお願いします。
お世話になります。

■No13633に返信(こうさんの記事)
こんな感じはいかがでしょうか。

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

  Dim dt As DataTable = New DataTable
  dt.Columns.Add("Field1", GetType(String))
  dt.Columns.Add("Field2", GetType(String))
  dt.Rows.Add(New String() {"全角文字", "半角カタカナ"})
  For i As Integer = 1 To 10
    dt.Rows.Add(New String() {i.ToString(), (i + 1000).ToString()})
  Next

  Dim sb As System.Text.StringBuilder = New System.Text.StringBuilder
  For Each row As DataRow In dt.Rows
    For j As Integer = 0 To dt.Columns.Count - 1
      If j > 0 Then sb.Append(ControlChars.Tab)
      sb.Append(row(j))
    Next
    sb.Append(ControlChars.NewLine)
  Next

  Response.ContentType = "application/vnd.ms-excel"
  Response.AddHeader("Content-Disposition", "attachment; filename=" + "test.xls")
  Response.BinaryWrite(System.Text.Encoding.Default.GetBytes(sb.ToString()))
  Response.End()
End Sub
■No13637に返信(なおこ(・∀・)さんの記事)

なおこさん早速のお返事ありがとうございます。
本当に感謝感謝です。

教えてもらったようにやれば順にデータを出力することは
可能だと思うのですが

'A列の設定
.Columns._Default("A:A").ColumnWidth = 14 : .Range("A1:A" & (ds.Tables(0).Rows.Count + 1)).Borders.LineStyle = Excel.XlLineStyle.xlContinuous

上記のようにexcel特有の設定などを行いたい場合でもこのような
処理はかのうでしょうか?
それともサーバー上にいったん保存したのちにデータをダウンロード
しなければならないのでしょうか?

宜しくお願いします。
> サーバー側で作成したEXCELファイル
そのシステムは、イントラ用でしょうか? それとも Web公開でしょうか?
不特定多数からの接続の場合は、IIS 上での Excel を操作については、
ライセンス(使用許諾契約)上の問題が生じる可能性があるようです。
http://support.microsoft.com/kb/257757/ja/

> 上記のようにexcel特有の設定などを行いたい場合でもこのような
> 処理はかのうでしょうか?
XML スプレッドシートを使うとか。
http://codezine.jp/a/article.aspx?aid=194
お世話になります。

■No13640に返信(こうさんの記事)
> 'A列の設定
> .Columns._Default("A:A").ColumnWidth = 14 : .Range("A1:A" & (ds.Tables(0).Rows.Count + 1)).Borders.LineStyle = Excel.XlLineStyle.xlContinuous
>
> 上記のようにexcel特有の設定などを行いたい場合でもこのような
> 処理はかのうでしょうか?
それは上記方法では出来ないです。

魔界の仮面弁士さんのおっしゃっている
↓の方法なら出来そうですね。
http://codezine.jp/a/article.aspx?aid=194
魔界の仮面弁士さん なおこさん

お返事ありがとうございます
またまた感謝感謝です。

このシステムは一般公開せずお客様のところ
でだけ使用するようになっています。

XMLのやり方ですが大変ためになりました。
(でもEXCEL2003が必要?なのが少し残念です。)

それではまたです。
解決済み!
EXCELのダウンロードなんですが またまた問題が
出てきたのですが

EXCELのダウンロードを行う事は出来たのですが
一つ問題がおこりました。 商品名という項目
があるのですがその項目で 

333

などの全角で出力される部分がEXCELの機能で
333
と半角に変換されてしまいます。

普通のEXCELでは頭に'をつけて文字列として
判断させていたのでプログラムで’をつける
ようにしたのですが、出力した結果
'333
と表示されてしまいました。

これを333と出力したいのですがどうで
しょうか??

わかる方がおられましたら宜しくお願い
します。

DOBON.NET | プログラミング道 | プログラミング掲示板