创建或获取数据透视表以后,可以对数据透视表中的元素进行编辑,如添加或修改字段、设置表中数据的数字格式、设置表中单元格区域的格式等。[大谦Excel,dqexcel点com]
添加字段
对于已有数据透视表,可以添加字段。添加页字段、列字段和行字段使用PivotTable对象的AddFields方法,添加值字段使用PivotTable对象的AddDataField方法。
【Excel VBA】
示例文件的存放路径为Samples\ch19\Excel VBA\添加字段.xlsm。CreatePVT过程创建一个简单的数据透视表,将“产品”设置为列字段,将“产地”设置为行字段,如下面代码中所示。
Sub CreatePVT()
'前面代码省略
'…
'设置字段
With pvt
.PivotFields("产品").Orientation = xlColumnField '列字段
.PivotFields("产品").Position = 1
.PivotFields("产地").Orientation = xlRowField '行字段
.PivotFields("产地").Position = 1
End With
End Sub
运行过程,生成数据透视表如图7-4所示。
图7-4 创建简单的数据透视表
AddField过程向刚刚创建的数据透视表中添加字段,用PivotTable对象的AddFields方法将“类别”添加为页字段,用AddDataField方法将“金额”添加为值字段。
Sub AddFields()
'省略,获取数据透视表pvt
'…
With pvt
.AddFields PageFields:=”类别”, AddToTable:=True ‘页字段
.AddDataField .PivotFields(“金额”), “求和项:金额”, xlSum ‘值字段
End With
End Sub
运行过程,生成图7-2所示的数据透视表。
【Python】
编写Python脚本,脚本文件的存放路径为Samples\ch19\Python\添加字段.py。
#前面代码省略,请参见Python文件
#......
先创建一个简单的数据透视表,将“产品”设置为列字段,将“产地”设置为行字段。
#创建透视表
pvt=sht_pvt.api.PivotTableWizard(\
SourceType=xw.constants.PivotTableSourceType.xlDatabase,\
SourceData=rng_data)
pvt.Name='透视表'
#设置字段
pvt.PivotFields('产品').Orientation=\
xw.constants.PivotFieldOrientation.xlColumnField #列字段
pvt.PivotFields('产品').Position=1
pvt.PivotFields('产地').Orientation=\
xw.constants.PivotFieldOrientation.xlRowField #行字段
pvt.PivotFields('产地').Position=1
用PivotTable对象的AddFields方法将“类别”添加为页字段,用AddDataField方法将“金额”添加为值字段。
#添加页字段
pvt.AddFields(PageFields='类别',AddToTable=True) #页字段
#添加值字段
pvt.AddDataField(pvt.PivotFields('金额'),'求和项:金额',\
xw.constants.ConsolidationFunction.xlSum) #值字段
运行脚本,生成图7-2所示的数据透视表。
修改字段
可以修改已有数据透视表中字段对象的属性。例如创建数据透视表时将“金额”指定为值字段,则默认时会生成名为“求和项:金额”的活动字段,如图7-2所示工作表中A3单元格所示。现用PivotField对象的Name属性修改该字段名称为“ 金额 ”。注意,“金额”是已有字段名称,所以新名称在”金额”前后添加了一个空格。
【Excel VBA】
示例文件的存放路径为Samples\ch19\Excel VBA\修改字段.xlsm。CreatePVT过程创建数据透视表,RenameField过程修改字段名称。CreatePVT过程的代码省略,先运行该过程生成数据透视表。
图7-5 修改数据透视表中的字段名称
RenameField过程的代码如下所示。用PivotField对象的Name属性修改字段“求和项:金额”的名称为“ 金额 ”。
Sub RenameField()
'省略,获取数据透视表pvt
'…
pvt.PivotFields("求和项:金额").Name = " 金额 " '修改字段名称
End Sub
运行过程,生成数据透视表如图7-5所示。注意单元格A3中的字段名称已经改变。
【Python】
编写Python脚本,脚本文件的存放路径为Samples\ch19\Python\修改字段.py。脚本首先创建数据透视表,将“金额”作为值字段,自动生成活动字段“求和项:金额”,用PivotField对象的Name属性将该名称修改为“ 金额 ”。
#前面代码省略,请参见Python文件
#......
#设置字段
…
pvt.PivotFields(‘金额’).Orientation=\
xw.constants.PivotFieldOrientation.xlDataField #值字段
#修改字段名称
pvt.PivotFields(‘求和项:金额’).Name=’ 金额 ‘
运行脚本,完成字段名称的修改。
设置字段的数字格式
使用PivotField对象的NumberFormat属性可以修改指定字段的数字格式。例如,下面创建数据透视表,将其中活动字段“求和项:金额”的数字格式设置为保留两位小数。
【Excel VBA】
示例文件的存放路径为Samples\ch19\Excel VBA\数字格式.xlsm。先运行CreatePVT过程生成数据透视表。
图7-6 设置字段的数字格式
NumberFormat过程设置活动字段“求和项:金额”的数字格式为保留两位小数。
Sub NumberFormat()
'省略,获取数据透视表pvt
'…
pvt.PivotFields("求和项:金额").NumberFormat = "0.00" '保留2位小数
End Sub
运行过程,生成数据透视表如图7-6所示。
【Python】
编写Python脚本,脚本文件的存放路径为Samples\ch19\Python\数字格式.py。
#前面代码省略,请参见Python文件
#......
#设置数字格式
pvt.PivotFields('求和项:金额').NumberFormat='0.00'
运行过程,生成数据透视表如图7-6所示。
数据透视表的单元格区域属性设置
使用PivotTable对象的DataBodyRange属性可以设置数据区单元格区域的属性,包括单元格区域背景色、字体属性等;使用PivotField对象的DataRange属性可以设置字段对应单元格区域的属性。
下面创建数据透视表,将数据区设置为灰色,字体设置为"Times New Roman",将“产品”字段单元格区域设置为绿色,将“产地”字段单元格区域设置为黄色。
【Excel VBA】
示例文件的存放路径为Samples\ch19\Excel VBA\单元格区域属性.xlsm。先运行CreatePVT过程生成数据透视表。
RangeFormat过程设置数据区背景色为灰色,设置数据区字体为"Times New Roman"。
Sub RangeFormat()
'省略,获取数据透视表pvt
'…
'设置数据区背景色为灰色
pvt.DataBodyRange.Interior.Color = RGB(200, 200, 200)
'设置数据区字体为"Times New Roman"
pvt.DataBodyRange.Font.Name = "Times New Roman"
End Sub
RangeFormat2过程设置“产品”字段单元格区域背景色为绿色,设置“产地”字段单元格区域背景色为黄色。
Sub RangeFormat2()
'省略,获取数据透视表pvt
'…
'设置“产品”字段单元格区域背景色为绿色
pvt.PivotFields("产品").DataRange.Interior.Color = RGB(0, 255, 0)
'设置“产地”字段单元格区域背景色为黄色
pvt.PivotFields("产地").DataRange.Interior.Color = RGB(255, 255, 0)
End Sub
运行上面两个过程,生成数据透视表如图7-7所示。
图7-7 设置数据透视表单元格区域的属性
【Python】
编写Python脚本,脚本文件的存放路径为Samples\ch19\Python\单元格区域属性.py。
#前面代码省略,请参见Python文件
#......
#设置数据区单元格区域的属性
pvt.DataBodyRange.Interior.Color = xw.utils.rgb_to_int((200,200,200))
pvt.DataBodyRange.Font.Name = "Times New Roman"
#设置“产品”字段单元格区域背景色为绿色
pvt.PivotFields("产品").DataRange.Interior.Color=\
xw.utils.rgb_to_int((0,255,0))
#设置“产地”字段单元格区域背景色为黄色
pvt.PivotFields("产地").DataRange.Interior.Color=\
xw.utils.rgb_to_int((255,255,0))
运行脚本,生成数据透视表如图7-7所示。[大谦Excel,dqexcel点com]