在asp.net中调用Office来制作各种(3D)统计图
?
?
1、下載owc11 COM組件
http://www.microsoft.com/downloads/details.aspx?FamilyID=7287252c-402e-4f72-97a5-e0fd290d4b76&displaylang=en?
2、注冊(cè)owc11
? 在工程中添加 C:/Program Files/Common Files/Microsoft Shared/Web Components/11? 文件下的owc11.dll引用? 或者按如下圖所以添加com
?
3、在工程中添加
??? using OWC11;
4、開(kāi)始coding? 舉例如下:
?
?public class ChartFactory
?{
??public ChartFactory()
??{
???InitTypeMap();
???//
???// TODO: 在此處添加構(gòu)造函數(shù)邏輯
???//
??}
??protected System.Web.UI.WebControls.Image imgHondaLineup;
??private string[] chartCategoriesArr;
??private string[] chartValuesArr;
??private OWC11.ChartChartTypeEnum chartType =? OWC11.ChartChartTypeEnum.chChartTypeColumn3D;//默認(rèn)值
??private static Hashtable chartMap = new Hashtable();
??private static string chartTypeCh = "垂直柱狀圖" ;
??private static string chartTitle = "";
??private void InitTypeMap()
??{
???chartMap.Clear();
???OWC11.ChartChartTypeEnum[] chartTypes = new OWC11.ChartChartTypeEnum[]{ ChartChartTypeEnum.chChartTypeColumnClustered,
????????????????????ChartChartTypeEnum.chChartTypeColumn3D,
????????????????????ChartChartTypeEnum.chChartTypeBarClustered,
????????????????????ChartChartTypeEnum.chChartTypeBar3D,
????????????????????ChartChartTypeEnum.chChartTypeArea,
????????????????????ChartChartTypeEnum.chChartTypeArea3D,
????????????????????ChartChartTypeEnum.chChartTypeDoughnut,
????????????????????ChartChartTypeEnum.chChartTypeLineStacked,
????????????????????ChartChartTypeEnum.chChartTypeLine3D,
????????????????????ChartChartTypeEnum.chChartTypeLineMarkers,
????????????????????ChartChartTypeEnum.chChartTypePie,
????????????????????ChartChartTypeEnum.chChartTypePie3D,
????????????????????ChartChartTypeEnum.chChartTypeRadarSmoothLine,
????????????????????ChartChartTypeEnum.chChartTypeSmoothLine};
???string[] chartTypesCh = new string [] {"垂直柱狀統(tǒng)計(jì)圖","3D垂直柱狀統(tǒng)計(jì)圖","水平柱狀統(tǒng)計(jì)圖","3D水平柱狀統(tǒng)計(jì)圖","區(qū)域統(tǒng)計(jì)圖","3D區(qū)域統(tǒng)計(jì)圖","中空餅圖","折線統(tǒng)計(jì)圖","3D折線統(tǒng)計(jì)圖","折線帶點(diǎn)統(tǒng)計(jì)圖","餅圖","3D餅圖","網(wǎng)狀統(tǒng)計(jì)圖","弧線統(tǒng)計(jì)圖"};
???
???for(int i=0;i<chartTypes.Length;i++)
???{
????chartMap.Add(chartTypesCh[i],chartTypes[i]);
???}
??}
??public ChartSpaceClass BuildCharts ()
??{
???string chartCategoriesStr = String.Join ("/t", chartCategoriesArr);
???string chartValuesStr = String.Join ("/t", chartValuesArr);
???OWC11.ChartSpaceClass?????? oChartSpace = new OWC11.ChartSpaceClass ();
???// ------------------------------------------------------------------------
???// Give pie and doughnut charts a legend on the bottom. For the rest of
???// them let the control figure it out on its own.
???// ------------------------------------------------------------------------
???chartType = (ChartChartTypeEnum)chartMap[chartTypeCh];
???if (chartType == ChartChartTypeEnum.chChartTypePie ||
????chartType == ChartChartTypeEnum.chChartTypePie3D ||
????chartType == ChartChartTypeEnum.chChartTypeDoughnut)
???{
????oChartSpace.HasChartSpaceLegend = true;
????oChartSpace.ChartSpaceLegend.Position = ChartLegendPositionEnum.chLegendPositionBottom;
???}
???oChartSpace.Border.Color = "blue";
???oChartSpace.Charts.Add(0);
???oChartSpace.Charts[0].HasTitle = true;
???oChartSpace.Charts[0].Type = chartType;
???oChartSpace.Charts[0].ChartDepth = 125;
???oChartSpace.Charts[0].AspectRatio = 80;
???oChartSpace.Charts[0].Title.Caption = chartTitle;
???oChartSpace.Charts[0].Title.Font.Bold = true;
???oChartSpace.Charts[0].SeriesCollection.Add(0);
???oChartSpace.Charts[0].SeriesCollection[0].DataLabelsCollection.Add ();
???// ------------------------------------------------------------------------
???// If you're charting a pie or a variation thereof percentages make a lot
???// more sense than values...
???// ------------------------------------------------------------------------
???if (chartType == ChartChartTypeEnum.chChartTypePie ||
????chartType == ChartChartTypeEnum.chChartTypePie3D ||
????chartType == ChartChartTypeEnum.chChartTypeDoughnut)
???{
????oChartSpace.Charts[0].SeriesCollection[0].DataLabelsCollection[0].HasPercentage = true;
????oChartSpace.Charts[0].SeriesCollection[0].DataLabelsCollection[0].HasValue = false;
???}
????// ------------------------------------------------------------------------
????// Not so for other chart types where values have more meaning than
????// percentages.
????// ------------------------------------------------------------------------
???else
???{
????oChartSpace.Charts[0].SeriesCollection[0].DataLabelsCollection[0].HasPercentage = false;
????oChartSpace.Charts[0].SeriesCollection[0].DataLabelsCollection[0].HasValue = true;
???}
???????????????
???// ------------------------------------------------------------------------
???// Plug your own visual bells and whistles here
???// ------------------------------------------------------------------------
???oChartSpace.Charts[0].SeriesCollection[0].Caption = String.Empty;
???oChartSpace.Charts[0].SeriesCollection[0].DataLabelsCollection[0].Font.Name = "verdana";
???oChartSpace.Charts[0].SeriesCollection[0].DataLabelsCollection[0].Font.Size = 10;
???oChartSpace.Charts[0].SeriesCollection[0].DataLabelsCollection[0].Font.Bold = true;
???oChartSpace.Charts[0].SeriesCollection[0].DataLabelsCollection[0].Font.Color = "red";
???oChartSpace.Charts[0].SeriesCollection[0].DataLabelsCollection[0].Position = ChartDataLabelPositionEnum.chLabelPositionCenter;
???
???if (chartType == ChartChartTypeEnum.chChartTypeBarClustered ||
????chartType == ChartChartTypeEnum.chChartTypeBar3D ||
????chartType == ChartChartTypeEnum.chChartTypeColumnClustered ||
????chartType == ChartChartTypeEnum.chChartTypeColumn3D)
???{
????oChartSpace.Charts[0].SeriesCollection[0].DataLabelsCollection[0].Position = ChartDataLabelPositionEnum.chLabelPositionOutsideEnd;
???}
???
???oChartSpace.Charts[0].SeriesCollection[0].SetData (OWC11.ChartDimensionsEnum.chDimCategories,
????Convert.ToInt32(OWC11.ChartSpecialDataSourcesEnum.chDataLiteral), chartCategoriesStr);
???oChartSpace.Charts[0].SeriesCollection[0].SetData (OWC11.ChartDimensionsEnum.chDimValues,
????Convert.ToInt32(OWC11.ChartSpecialDataSourcesEnum.chDataLiteral), chartValuesStr);
???return oChartSpace;
??}
??#region? 屬性設(shè)置
??public string[] chartCategoriesArrValue
??{
???get
???{
????return chartCategoriesArr;
???}
???set
???{
????chartCategoriesArr = value;
???}
??}
??public string[] chartValuesArrValue
??{
???get
???{
????return chartValuesArr;
???}
???set
???{
????chartValuesArr = value;
???}
??}
??public string chartTypeValue
??{
???get
???{
????return chartTypeCh;
???}
???set
???{
????chartTypeCh = value;
???}
??}
??public string chartTitleValue
??{
???get
???{
????return chartTitle;
???}
???set
???{
????chartTitle = value;
???}
??}
??#endregion
?}
?
//調(diào)用?? 首先需要在頁(yè)面上放置一個(gè)Image來(lái)顯示產(chǎn)生的統(tǒng)計(jì)圖
??public void ShowChart()
??{
//初始化賦值
???chartFactory.chartCategoriesArrValue = chartCategories;
???chartFactory.chartValuesArrValue = chartValues;
???chartFactory.chartTitleValue = chartTitle;
???chartFactory.chartTypeValue = chartType;
???OWC11.ChartSpaceClass oChartSpace = chartFactory.BuildCharts();
???string path = Server.MapPath(".") + @"/images/Chart.jpeg";??//產(chǎn)生圖片并保存 頁(yè)可以是png?gif圖片
???oChartSpace.ExportPicture(path,"jpeg", 745, 500);
???Image1.ImageUrl = path;??// 顯示統(tǒng)計(jì)圖
??}
// 保存統(tǒng)計(jì)圖請(qǐng)參照上一篇文章
//由于每次生成的統(tǒng)計(jì)圖都會(huì)覆蓋原來(lái)的圖片所以有必要的話可以用日期加時(shí)間的方式來(lái)作為圖片的名字,但是這樣將會(huì)產(chǎn)生很多圖片需及時(shí)處理,如不需要只需取同名覆蓋原來(lái)圖片即可。
總結(jié)
以上是生活随笔為你收集整理的在asp.net中调用Office来制作各种(3D)统计图的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。