力 。在广阔的 Internet 环境中 , 虽然不能担保 在用户的桌面上有最新版本的 Excel , 但是 Office
Web Components 仍能为数据提交出相应的高质量
( 8) 用 IMG 标记显示图形 。
4 应用实例
应用实例以某公司 2003 年 1 - 12 月份在全国 的销售量和在湖北省的销售量数据为基础 ,绘制出 销售分析图 。并假定在 ASP. NET Web 服务器上安 装了 MS Office 2003 。为了更好的观察全国及湖北 省的销量趋势 , 对图形做了一定的处理 , 将湖北省 的销售趋势图向上进行了平移操作 。 (1 ) 在 Visual Studio . NET 中 创 建 一 个 新 的
ASP. NET C # Web 应用程序解决方案 ,将解决
方案 命名为 OWC 。 (2) 打开 “项目” 菜单 , 选择 “添加引用” 。在 “添加引用” 对话框中 ,选择 COM” “ 标签 ,在 “组件名 称”
列表中选择 Microsoft Office Web Components 11. “
0” 并双击之 ,然后按 “确定” 按钮 。 ( 3) 在解决方案中添加一个 Web 窗体 ,命名为
图表表示 ,而不再需要复杂的
HTML 表达方式 。 有了 OWC , 我们可以在 ASP. NET Web 服务器 上根据数据库产生的记录集或用户提交的信息产 生各种复杂图表 ,这个组件同时能够把生成的图表 输出为网上
常用的各种图像格式 。我们可以通过 编写一个简单的 COM 组件 , 将输出的图像文件以 一种二进制数据的格式发送到客户端浏览器 。因 为图表是作为图片格式被下载到客户端
的 ,所以并 不需要客户端下载任何 COM 组件 , 也不需要客户
“getchart . aspx” 。 (4) 在 getchart . aspx” “ Web 窗体的后置代码文 件 getchart . aspx. cs ” 引 入 OWC11 ” 名 空 间 : “ 中 “ 命 “using OWC11 ; ” 。 ( 5) 在后置代码文件 getchart . aspx. cs” “Page “ 的
Load () ” 函数中键入如下代码 :
/ / (1) 设置缓冲输出及输出流的 HTTP MIME 类型 Response. Buffer = true ; Response. ContentType = ” image/ gif ” ; / / (2) 从数据库中读取要生成图表的数据 / / SQL Server 连接字符串 string strConnection = ” 数据库连接字符串” ; / / 获取一月份全国销售量的 SQL 命令 string strJanSales = ” SELECT 销 售 量 FROM 全 国 销 售 量 WHERE 月份 = ’’ ; 1 ” / / 获取全国销售量信息的 SQL 命令 string strSales = ” SELECT 月份 , 销售量 FROM 全国销售
端安装 MS Office
软件即可浏览这些图表 , 而每个 客户存取的是一个二进制的数据流 ,输出的图像文 件只是一个临时的过渡品 ,每个用户都可以根据提 交的信息获得一个属于自己的图表图像 ,各个客户 互不影响 ,不存在彼此之间的图表文件交叉覆盖 。
但在 “背后” 图形文件实际上是由服务器上 ASP. , NET 回应客户请求时动态生成的 , 因此 , 这种技术 对客户端没有特殊的要求 ,只要能够显示图形就可 以了 ,即使 Netscape 和 Opera 也不存在任何问题 。
3 在 ASP. NET 中用 OWC 动态绘制
量” ;
/ / 定义数据库连接对象 SqlConnection myConnection = new SqlConnection ( strConnec2 SqlCommand JanSalesCommand = new SqlCommand ( strJanSales , myConnection) ; SqlCommand salesCommand = new SqlCommand ( strSales , my2
图表的步骤
( 1) 型 ( 2) ( 3) ( 4) ( 5)
设置缓冲输出及输出流的 HTTP MIME 类 从数据库中读取要生成图表的数据 创建 OWC 图表 ; 添加必要的数据系列 ; 为每个数据列赋数据 ;
tion) ;
/ / 定义一个获取一月份销售量的命令对象
/ / 定义一个获取全国销售量的命令对象
( 6) 定义外观 ; ( 7) 以 GIF 图形的形式返回图表 ;
Connection) ;
/ / 定义一个 dataReader 对象
第 34 卷 (2006) 第 3 期 计算机与数字工程 99
SqlDataReader dataReader1 ; / / 定义全国 、 湖北省一月份销售量及二者的差值 int countryJan ,provinceJan ,difference ; / / 定义获取月份及销售量信息字符串 Sales2 = ” ; ” string strMonth1 = ” , strMonth2 = ” , strSales1 = ” , str2 ” ” ” strMonth1 + = dataReader1. GetValue (0) . T oString () + ’ t’ \ ; \ t’ ; strJanSales = ” SELECT 销售量 FROM 湖北省销售量 WHERE strSales = ” SELECT 月份 , 销售量 From 湖北省销售量” ; myConnect