惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

博客园 - 三生石上(FineUI控件)
S
SegmentFault 最新的问题
Jina AI
Jina AI
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
IT之家
IT之家
美团技术团队
V
Visual Studio Blog
人人都是产品经理
人人都是产品经理
博客园 - 叶小钗
有赞技术团队
有赞技术团队
GbyAI
GbyAI
宝玉的分享
宝玉的分享
腾讯CDC
M
MIT News - Artificial intelligence
博客园 - 【当耐特】
Google DeepMind News
Google DeepMind News
月光博客
月光博客
MyScale Blog
MyScale Blog
Last Week in AI
Last Week in AI
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
博客园 - 司徒正美
Recent Announcements
Recent Announcements
MongoDB | Blog
MongoDB | Blog

博客园 - 指南针

EpCloud开发日志 为服务创建安装程序 winform 通过WCF上传Dataset数据 opcrcw.da.dll 和.net 4.0 .net中线程同步的典型场景和问题(1) 如何取消后台线程的执行 python中使用汉字 Ext对基本类型的扩展 OWC ChartSpace控件的使用 Sql Server 生成数据透视表 wince5.0 key 修改IP地址后,原来的连接还有存在吗? Window下减少重绘的方法 .Net精简框加下子类化控件 Wince5.0中修改IP地址需不重启即可生效 Extjs combobox Windows workflow中的IEventActivity接口 使MSSql Server 视图可更新 javascript中的基本数据类型
OWC PivotTable的使用方法
指南针 · 2010-12-11 · via 博客园 - 指南针

OWC(Office Web Component)是微软提供的一组Activex组件,其中的PivotTable控件提供了数据透视的功能。OWC既可以在WinForm程序中使用,也可以在嵌入在IE中使用。

一. 安装

如果系统中已经安装了Office 2003,则系统已经自动安装好OWC11.0了,否则可以从网上下载安装包来安装。安装完成后可以在C:\Program Files\Common Files\Microsoft Shared\Web Components\11\2052目录下找到OWC的帮助和API参考手册。不过其中的API手册是及其难用。

二. 嵌入到浏览器中使用

将以下代码加入到源程序中即可,控件的大小也可以使用CSS来控制。 

<object id="PivotTable1" style="margin: 5px;" classid="clsid:0002E55A-0000-0000-C000-000000000046">
</object>
image 
上面的是OWC11版本的控件,如果是其它的版本,则它的Classid是不一样的。可以在注册表中查找PivotTable来找到该控件相应的classid.
PivotTable自身带有工具栏,右键菜单,还可以在运行时通过对话框来配置控件,方便了用户的使用。不过有时我们希望只提供给用户受限的功能,比如隐藏工具栏和菜单什么的。这可以通过控件提供的一组属性来控制,这些属性包括:
  • DisplayAlerts,是否允许在运行时显示警告和消息
  • DisplayDesignTimeUI, 是否显示“命令和选项”对话框
  • DisplayExpandIndicator, 是否显示细节展开指示器
  • DisplayFieldList,是否显示字段列表
  • DisplayScreenTips,是否显示屏幕提示
  • DisplayToolbar, 是否显示工具栏
  • AutoFit, 是否根据内容自动调整控件大小
要屏蔽菜单的话,必须处理近件的BeforeContextMenu(x, y, Menu, Cancel)事件,并设置其中的Cancle参数为True. 示例的Javascrip代码如下。
var beforeContextMenu = function(x,y,menu,cancle){
        cancle.Value = true;
}
this.pivotTable.attachEvent('BeforeContextMenu',beforeContextMenu);

二. 数据源

通过给PivotTable的DataSource属性赋值来指定它的数据源。PivotTable控件支持多种数据源。

  • 关系数据库
  • Excel工作表
  • OLAP数据库

对于后两种数据源,我没有试过,就不说了。下面只以关系数据库为例。由于我是在IE中使用PivotTable控件的,所以只能使用离线数据。基本的思路是

image

客户端的脚本示例如下:

var xml = ...; // 从服务器端发过来的Xml文本
var rs = new ActiveXObject('ADODB.Recordset');			
var doc = new ActiveXObject('MSXML2.DOMDocument');			
doc.loadXML(xml);
rs.Open(doc);
PivotTable1.DataSource = rs;	

但是且慢,还有一个问题要解决。现在我的服务器是基于Asp.net的,所有数据库访问也是基于ADO.net的,而不是ADO。ADO.Recordset和DataSet都可以直接保存为Xml文件,但不幸的是,它们的格式是不兼容的。要解决这个问题,要么在服务器端使用ADO来访问数据,要么想办法将DataSet的保存为和Recordset相容的XML格式文档。经过一番Baidu,发现微软的一篇文章,点击这儿查看原文。文章所列的VB.net 代码如下:

DataSet 转换为 Recordset

所以,基本上服务器端的代码就变成了下面这样(C#代码):

DataTable table = pt.Query("userName");
var convert
= new ConvertToRs();
DataSet dataSet
= new DataSet();
dataSet.Tables.Add(table);
var xml
= convert.GetADORS(dataSet, "db");

Response.Clear();
Response.ContentType

= "text/xml";
Response.Write(xml);
Response.End();

三. 设置透视字段

设置好数据源后,就要设置相关的字段了。有四种字段:

    • 行字段, 用于行分类的字段
    • 列字段, 用于列分类的字段
    • 值字段, 要进行分析的字段
    • 分页字段, 用于筛选的字段

这个步骤比较简单

通过PivotTable.ActiveView.FieldSets属性可以访问到所有的FieldSet对象,可以通过字段名称来获得相应的Fieldset对象。然后使用ActiveView.RowAxis.InsertFieldSet方法增加一个行字段。相应的通过ColumnAxis,DataAxis,PageAxis的InsertFieldSet方法来设置字段。

四. 设置汇总的显示方式

字段的汇总可以以多种方式显示。

  • plShowAsPercentOfColumnParent 以相对于每项的父列总计的百分比显示总计。
  • plShowAsPercentOfColumnTotal 以相对于每项的列总计的百分比显示总计。
  • plShowAsPercentOfGrandTotal 以相对于所有数据总计的百分比显示总计。
  • plShowAsPercentOfRowParent 以相对于每项的父行总计的百分比显示总计。
  • plShowAsPercentOfRowTotal 以相对于每项的行总计的百分比显示总计。

可以通过PivotTotal对象的ShowAs属性指定汇总的显示方式,ActiveView.DataAxis.Totals集合中包含了所有的PivotTotal对象。

OWC中的PivotTable控件的功能非常强大,不过它的模型也比较复杂,加上自带的示例比较少,所以我也只是简单的使用,还有一些问题没能解决。下面一张PivotTable在IE中的使用的实例截个图:

image