在asp.net中调用Office来制作各种(3D)统计图
1、下载owc11 COM组件
http://www.microsoft.com/downloads/details.aspx?FamilyID=7287252c-402e-4f72-97a5-e0fd290d4b76&displaylang=en
2、注册owc11
在工程中添加 C:/Program Files/Common Files/Microsoft Shared/Web Components/11 文件下的owc11.dll引用 或者按如下图所以添加com

3、在工程中添加
using OWC11;
4、开始coding 举例如下:
public class ChartFactory
{
public ChartFactory()
{
InitTypeMap();
//
// TODO: 在此处添加构造函数逻辑
//
}
protected System.Web.UI.WebControls.Image imgHondaLineup;
private string[] chartCategoriesArr;
private string[] chartValuesArr;
private OWC11.ChartChartTypeEnum chartType = OWC11.ChartChartTypeEnum.chChartTypeColumn3D;//默认值
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 [] {"垂直柱状统计图","3D垂直柱状统计图","水平柱状统计图","3D水平柱状统计图","区域统计图","3D区域统计图","中空饼图","折线统计图","3D折线统计图","折线带点统计图","饼图","3D饼图","网状统计图","弧线统计图"};
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 属性设置
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
}
//调用 首先需要在页面上放置一个Image来显示产生的统计图
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"; //产生图片并保存 页可以是png gif图片
oChartSpace.ExportPicture(path,"jpeg", 745, 500);
Image1.ImageUrl = path; // 显示统计图
}
// 保存统计图请参照上一篇文章
//由于每次生成的统计图都会覆盖原来的图片所以有必要的话可以用日期加时间的方式来作为图片的名字,但是这样将会产生很多图片需及时处理,如不需要只需取同名覆盖原来图片即可。
相关文章:

个人谈谈seo
为什么80%的码农都做不了架构师?>>> 我不知道大家有没有做过seo的工作。以前我是一各技术人员。纯技术开发或技术管理人员。基本上也没有接触过seo的相关工作,整天在写代码或看别人的代码 。干了六年只见他们都在谈友情链接。做推广…
“编程能力差的程序员,90%输在这事上!”谷歌AI专家:都是瞎努力!
Google 人工智能开发者专家彭靖田老师说——超90%的程序员在初学Python 人工智能时,都会遇到下面3个问题:1.想学人工智能,但不知从何学起,也不知道该选择什么方向...2.Python语法、机器学习/深度学习框架、算法都能看懂࿰…

[译]JavaScript中,{}+{}等于多少?
最近,Gary Bernhardt在一个简短的演讲视频“Wat”中指出了一个有趣的JavaScript怪癖:在把对象和数组混合相加时,会得到一些你意想不到的结果.本篇文章会依次讲解这些计算结果是如何得出的. 在JavaScript中,加法的规则其实很简单,只有两种情况:你只能把数字和数字相加,或者字符串…

大数量查询分页显示
微软的解决办法 using System; using System.Data; using System.Data.SqlClient; using System.Drawing; using System.Windows.Forms; public class PagingSample: Form { // Form controls. Button prevBtn new Button(); Button nextBtn new Button(); static DataGrid …

Sep 26 09:22:41 ck01 kernel: Buffer I/O error on device sda2, logical block 2
错误 kernel: sd 0:2:0:0: SCSI error: return code kernel: end_request: I/O error, dev sda, sector 2308509 kernel: Buffer I/O error on device sda2, logical block 2 kernel: Buffer I/O error on device sda2, logical block 2 硬盘扇区问题? 更换一块硬盘…

启信宝CEO陈青山:AI+大数据驱动下的金融新生态
人工智能怎样潜移默化影响金融业务?合合信息联合创始人、启信宝CEO陈青山在2020世界人工智能大会云端峰会.未来金融论坛上做了“AI大数据,共创金融新生态”的主题演讲,讲述了如何通过数字化构建一个虚拟世界,协助金融类企业建立新…

新手安装ruby on rails(ror)的成功必备手册
2019独角兽企业重金招聘Python工程师标准>>> 如何快速正确的安装 Ruby, Rails 运行环境 每一位使用windows系统来进行ROR开发项目的都是这个世界上折翼的天使。对于新入门的开发者,如何在windows系统上安装 Ruby, Ruby Gems 和 Rails 的运行环境可能会是…

Logback学习笔记1
Logback介绍 Logback 分为三个模块:Core、Classic 和 Access。Core模块是其他两个模块的基础。 Classic模块扩展了core模块。 Classic模块相当于log4j的显著改进版。Logback-classic 直接实现了 SLF4J API。 要引入logback,由于Logback-classic依赖slf4j…
微软亚洲研究院副院长刘铁岩:AI如何助力节能减排?
7月10日,在微软举办的WAIC●2020人工智能予力永续未来论坛,微软亚洲研究院副院长刘铁岩围绕 AI 在节能减排领域的应用,探讨了如何推进整个社会的可持续发展。 刘铁岩指出,人工智能在助力节能环保方面具有巨大潜力。例如ÿ…

如何在域控制器上安装asp.net?
作者:网际浪子专栏(曾用名littlehb) http://blog.csdn.net/littlehb/在域控制器或备份域控制器上安装 Microsoft Visual Studio .NET 或 Microsoft .NET 框架后,如果您尝试运行 ASP.NET 应用程序,则浏览器…

前端思想实现:面向UI编程_____前端框架设计开发
引子,我去小说看多了,写博客竟然写引子了!!!不过,没引子不知道怎么写了。言归正传吧,前端这个职业,也就这几年刚刚火起来的职业,以前那个混乱的年代,前端要么…

如何检查当TextBox设置为多行时是不是超长了?
<asp:RegularExpressionValidator id"revTextBox1" runat"server" ForeColor"Red" Display"Dynamic" ControlToValidate"textBox1" ValidationExpression"(/w|/W){1,100}">格式错误-只能输入不超过100个字符…
仅用2年过渡到自研ARM芯片,苹果的底气从何而来?
作者 | Steven Sinofsky译者 | 弯月,责编 | 屠敏题图 | 东方 IC出品 | CSDN(ID:CSDNnews)今年 WWDC 2020 上,苹果宣布自研 ARM 芯片——Apple Silicon,对于苹果而言,Apple Silicon很重要&#…

从“创业输家”到“创智赢家”
年轻就是创业的资本,但同时还要不怕失败,经得起挫折!”在上海财经大学的演讲厅内,彭震以自己亲身的经历,向在场的学生们介绍了自己创业背后的艰辛。彭震,现任项丰投资公司董事长,作为首届“ 创智…

2.正则表达式
在计算机科学中,正则表达式是这样解释的:它是指一个用来描述或者匹配一系列符合某个句法规则的字符串的单个字符串。在很多文本编辑器或其他工具里,正则表达式通常被用来检索和/或替换那些符合某个模式的文本内容。许多程序设计语言都支持利用…
基于监督学习+自监督学习的智能抠图,精确到发丝 | CVPR 2020
来源 | AI算法与图像处理(ID:AI_study)华盛顿大学的研究者最近发表的论文在CVPR 2020提供了一个新的和简单的智能抠图方法。你可以在家里做这些日常设置,使用固定或手持相机。我们的方法也是最先进的,给出的输出可比专业的结果。在…

安装Jpype
1、下载JPype-0.5.4.2 2、 python setup.py install error: gcc -pthread -fno-strict-aliasing -DNDEBUG -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE2 -fexceptions -fstack-protector --paramssp-buffer-size4 -m64 -mtunegeneric -D_GNU_SOURCE -fPIC -fPIC -I/usr/lib/jvm…

SQL SERVER中带参数的返回
作者:网际浪子专栏(曾用名littlehb) http://blog.csdn.net/littlehb/ CREATE PROCEDURE LoginUser loginUN char(50) OUTPUT, loginPW char(40)ASif loginPW (select [password] from users where usernameloginUN) return 0;else ret…

Android Studio 编译单个module
前期自己要把gradle环境变量配置好 在Terminal中gradle命令行编译apk 输入gradle assembleRelease 会编译全部module编译单个modulecd ./xiruan //xiruan是module的名字 //意思是进入module目录gradle assembleRelease //编译出自己签名的apk //签名环境也要配置好gradle ass…

linux下文件字符集转化实战篇
linux下文件字符集转化实战篇------------------------------------------为什么转换编码,起因:分析应用程序日志,文件编码格式gb2312(含中文字符),通过linux shell脚本从日志中提取出需要的字段并生成有固…

如何得到数据库中所有表字段及字段中文描述
如何得到数据库中所有表字段及字段中文描述以下资料,通过csdn的一位师兄从SQL版主那得到:sql中SELECT (case when a.colorder1 then d.name else end) N表名, a.colorder N字段序号, a.name N字段名, (case when COLUMNPROPERTY( a.id,a.name,IsIdentity)1 then √else end)…
它估值25亿!被马云领投,是华为“老战友”,网友:也许股价能超茅台!
最近一条新闻被炒的沸沸扬扬:十年以来中国最大IPO,中芯国际将融资532亿元!何为IPO?翻译即为一家公司第一次向全社会公开售出它的股份。买的人越多,代表着社会对其信心越大。为什么2020年,能爆发这样1场最大…

改變人生的21種好習慣
當一個人生活枯燥的時候, 他忘了用心體會是一種習慣。 當一個人覺得人生乏味的時候, 他忘了培養幽默是一種習慣。 當一個人體力日差的時候, 他忘了運動建身是一種習慣。 當一個人工作疲憊的時候, 他忘了認真休息是一種習慣。 當一…
Python 编程语言的核心是什么?
作者 | Brett Cannon译者 | 弯月,责编 | 王晓曼头图 | CSDN下载自视觉中国出品 | CSDN(ID:CSDNnews)为什么要问这个问题?我想要用Python实现WebAssembly,这并不是什么秘密。这不仅可以让Python进入浏览器&a…

关闭页面不用提示的方法
Response.Write("<script>window.openernull;window.close();</script>") ;

VIM 必知必会12大类型操作
2019独角兽企业重金招聘Python工程师标准>>> VIM是在unix/linux系统下最常用的文本编辑器,呵呵……这就不用我再强调了,现在直接贴上vim的最常用的操作,方便日后温习及查阅! 1、插入 i 在光标前插入 I 在行首插入 a 在光标后插入 …

前后端分离的思考与实践(三)
Midway-ModelProxy — 轻量级的接口配置建模框架前言使用Node做前后端分离的开发模式带来了一些性能及开发流程上的优势(见《前后端分离的思考与实践 一》), 但同时也面临不少挑战。在淘宝复杂的业务及技术架构下,后端必须依赖Java搭建基础架构,同时提供…

替换HTML代码
将一些HTML替换掉 eg:strContentstrContent.Replace("&","&");strContentstrContent.Replace("","");strContentstrContent.Replace("<","<");strContentstrContent.Replace(">&quo…

什么是线程安全?
http://baike.baidu.com/view/1298606.htm 线程安全 目录 什么是线程安全?举例线程安全性线程安全程度不可变线程安全有条件的线程安全线程兼容线程对立什么是线程安全?举例线程安全性线程安全程度不可变线程安全有条件的线程安全线程兼容线程对立展开编…
中国开源大爆发进行时,你没掉队吧?
作者 | 陈利鑫头图 | CSDN 下载自东方 IC出品 | CSDN(ID:CSDNnews)从开源(Open Source)一词提出到如今,开源的概念越来越成熟,作为一种创造及协作模式,开源已经不仅仅局限于软件技术…