2009年1月15日木曜日

[ASP.NET]サーバでExcelのグラフを作ったり(OWC)

こんなものがあったんですね。
Office Web Components 2003 (OWC)
2000版もXP版もあるらしい。

これを使うと、簡単にExcelファイルを生成してダウンロードさせたり、
Excelのグラフを書き出して表示したり。。。

ってちっとも簡単じゃない。
Comオブジェクトだし。

VS2005で試したのですが、単純にインストールして「Microsoft Office Web Components 11.0」を参照設定すればOKっぽいです。(PCにはOffice 2007のみインストール状態)

で、あとはここの真似してC#で書いてみました。

  1. Response.Buffer = true;  
  2. Response.ContentType = "image/gif";  
  3.   
  4. int[] aX = new int[10];  
  5. int[] aY = new int[10];  
  6.   
  7. Random r = new Random();  
  8.   
  9. ChartSpace cs = new ChartSpace();  
  10. ChChart chc = cs.Charts.Add(0);  
  11. ChSeries chs = chc.SeriesCollection.Add(0);  
  12. chs.Type = ChartChartTypeEnum.chChartTypeScatterLineMarkers;  
  13. chs.SetData( ChartDimensionsEnum.chDimSeriesNames   
  14.  , (int)ChartSpecialDataSourcesEnum.chDataLiteral, "Chart1_Series1");  
  15. chs.SetData(ChartDimensionsEnum.chDimXValues  
  16.  , (int)ChartSpecialDataSourcesEnum.chDataLiteral, aX);  
  17. chs.SetData(ChartDimensionsEnum.chDimYValues  
  18.  , (int)ChartSpecialDataSourcesEnum.chDataLiteral, aY);  
  19.   
  20. chc.HasLegend = true;  
  21. chc.Legend.Position = ChartLegendPositionEnum.chLegendPositionBottom;  
  22. chc.HasTitle = true;  
  23. chc.Title.Caption = "Chart1";  
  24.   
  25. chc.Axes[0].HasTitle = true;  
  26. chc.Axes[0].Caption = "Y axis";  
  27.   
  28. chc.Axes[1].HasTitle = true;  
  29. chc.Axes[1].Caption = "X axis";  
  30.   
  31.   
  32. Response.BinaryWrite((byte[])cs.GetPicture("gif", 500, 400));  
  33. Response.End();  


ReleaseComObjectとかはひとまず入れてないですが、必須ですよね。
っていってもうまく表示されないぞ。。。まぁいっか。気が向いたらもうちょっと見てみます。


あと、Excelを生成してダウンロードさせる方法が、

  1. //Excelのダウンロード  
  2. SpreadsheetClass xlsheet = new SpreadsheetClass();  
  3. // ダミーデータ  
  4. for(int i = 1 ; i< 11 ; i++)  
  5. {  
  6.     xlsheet.ActiveSheet.Cells[i, i] = i.ToString();  
  7. }  
  8. String xlFileName  = System.DateTime.Now.Ticks.ToString() + ".xls";  
  9. xlsheet.Export(Server.MapPath(".") + "\\" + xlFileName  
  10.  , SheetExportActionEnum.ssExportActionNone  
  11.  , SheetExportFormat.ssExportHTML);  
  12. Response.ContentType = "application/x-msexcel";  
  13. Response.WriteFile(Server.MapPath(".") + "\\" + xlFileName);  


こっちは使い道があるかな。

0 件のコメント: