PB中如何得到Crosstab中的列名
如何将pb的交叉报表转换成excel形式用的办法是写一个
如何将PB 的交叉报表转换成EXCEL 形式,用的办法是写一个通用的转换函数。
主函数部分:(还用到了 PFC 的字串处理的一个函数和在本对象中的一个取值 函数)//=========================================================== =========矚慫润厲钐瘗睞枥庑赖賃軔。
// [P UBLIC] Fu nction uf_data2excel 在 u_data2word in herited from n onv isualobject 聞創沟燴鐺險爱氇谴净祸測。
//- --------------------------------------------- 残骛楼諍锩瀨濟溆塹籟婭骤。
//说明:将数据倒入excel 中,支持计算列及显示格式,要求在题头的计算列要写 tag 值// -------------------------------------------- // 参数 1:[value] datawindow adw //说明:数据窗口// -------------------------------------------- //返回:(INTEGER ) 成功返回1,不成功返回0 // -------------------------------------------- // 作者:cwl 日期:2002.03.18 〃==============================================厦礴恳蹒骈時盡继價骚卺癩。
〃变更日志:020515加入对交叉表倒出的支持(主要是修改了保存题头部分)con sta nt in teger pp LayoutBla nk = OLEObject ole_object ole_object = CREATE OLEObjectin teger li_ret,li_crosstab=O long ll_col nu m,ll_row num stri ng ls_valuestri ng ls_objects,ls_obj,ls_objs[],ls_objtag[] long ll_p os,ll_le n,ll_num = 0 //题头区 long ll_head numstri ng ls_head[],ls_headtag[] //合计区long ll_su mnu m,i=1,start po s=1,e ndp os,li_ posstri ng ls_sum[],ls_sumtag[],ls_bi nd,toke n[],list,ls_te mp,l s_crosstabcol茕桢广鳓鯡选 块网羈泪镀齐。
pb数据窗口控件函数canundo、categorycount、categoryname
pb数据窗口控件函数canundo、categorycount、categorynameCanUndo()功能:检测最近的编辑操作能否被取消。
语法:dwcontrol.CanUndo()返回值:如果最近一次操作被取消,该函数返回true,否则返回false。
如果dwcontrol为null,则CanUndo()函数返回Null。
CategoryCount()功能:返回数据控件指定统计图的数据类别数。
语法:dwcontrol.CategoryCount(graphcontrol)参数:graphcontrol:string类型,指定放置在数据窗口对象中的统计图对象名,要得到该统计图的数据类别个数。
返回值:integer。
函数执行成功时返回1,出现错误时返回-1。
如果任何参数的值为null,则Categorycount()函数返回null。
试例:integer:li_countli_count=dwcontrol.categorycount("gr_revenues")CategoryName()功能:返回数据窗口控件指定统计图数据类的名称。
语法:dwcontrol.categoryname(graphcontrol,categorynumber) 参数:graphcontrol:数据窗口控件中统计图对象的名称,用字符串表示。
categorynumber:得到其名称的数据类的编号。
返回值:string。
函数执行成功时,返回数据窗口中统计图对象指定类别编号的类名;执行失败时,返回空字符串(“”),如果任何参数的值为null,则categoryname()函数返回null。
用法:统计图中数据类的编号从1开始连续编号到categorycount()函数返回最大的编号。
当删除统计图中某个类时,余下的类重新编号,以保持编号的连续性。
pb小技巧
pb1.RGB函数计算公式: 颜色值= (65536 * Blue) + (256 * Green) + (Red)2.控件可拖动: send(handle(this),274,61458,0)3.如何用程序控制下拉子数据窗口的下拉和收起用modify或者直接用dw_1.object.col1.dddw.showlist = true4.检索参数有些不需要传入则传%.5.如何屏蔽鼠标滚轮触发在控件的other事件写 if message.number = 522 then return 16.得到数据窗口的语法: string ls_dwsyntax ls_dwsyntax=dw_1.describe("datawindow.syntax" )7.得到数据窗口中各列及标题: long ll_count,i string ls_value,ls_colname ll_colnum = Long(dw_1 .object.datawindow.column.count) for i = 1 to ll_colnum //得到标题头的名字 ls_colname = dw_1.descri be(’#’ + string(i) + ".name") + "_t" ls_ value = dw_1.describe(ls_colname + ".text") next8.在程序中动态设置初始值: ex:dw_contro.object.columnName.initial = ’xxxx’9.如何在DataWindow的SQL语法中不使用SELECT DISTINCT实现删除重复的行起先对你要显示唯一值的列进行排序: ""city A,然后增加如下过滤字符串:" city < > city [-1] or GetRow () = 1"10.如何改变列的字体颜色,提醒用户此列已做修改在列的Color属性中,输入如下表达式IF (column_name < >column_name.Original, RGB(255, 0, 0), RGB(0, 0, 0) )。
powerbuilder(pb)数据窗口(datawindow)缓冲区与状态解释
PowerBuilder数据窗口缓冲区与状态详解Powerbuilder(pb)的datawindow(数据窗口)的各个缓冲区和状态是pb数据窗口的非常重要的,对这些概念的理解,将有助于我们认识pb数据窗口的优势。
基本概念数据窗口的三个缓冲区:Primary!Delete!Filter!Getitemstatus(row,列名或者列号,缓冲区)当要取整个行的状态时,列名或者列号用0表示数据窗口中数据项状态Notmodified! 从数据retrieve出来后没有改变过Datamodified! 数据retrieve出来后有过改变New! 数据窗口增加了一列但没有录入过数据,该列的状态就是new!Newmodified! 数据窗口增加了一列,同时改列被录入了数据,该列的状态就是newmodified!retrieve出来后,结果如下:所有的行和数据项状态都是notmodified用geitemstatus(行号,列名,primary!)取每一数据项状态用getitemstatus(行号,0,primary!)去行状态001,002,ddd三个格子所在的数据项状态仍旧是notmodifiedAAA(原是Ccc)所在格子的数据项状态是datamodified第一行(001,AAA)的行状态是datamodified第二行(001,ddd)的行状态时notmodified后,如下:2点。
第三行状态就是new!请用getitemstatus(3,0,primary!)取第三行状态第三行的每一项将变为datamodified!开发中实例:表1(因为是举例,请不要考虑数据库设置中的冗余概念,如表2中的姓名没必要等)需求一、删除表1中的数据的同时,把表2的数据也删除,必须删除,不考虑约束条件。
如把表1中001,002删除了,需要把表2中所有001,002的记录删除,(【删除】和【保存】是两个按钮或菜单,就是说【删除】只是删除了前台的内容,不【保存】数据库中数据是没有被删除的,数据库需要【保存】执行的时候才真正执行删除),怎么做?1、可以使用触发器;2、可以在删除之前把表1记录下来,【保存】时对比表1,看那些数据缺少了;3、……..DeletedCount ( )Getitemstring(row,列名,delete!,true)(为什么用true,不用false呢?,true是从数据库取出来的默认值,false是当前值,如果删之前用户修改过编号,但是没有保存,用false就会有问题)需求二、把表1中编号001改为了A01,002改为001,003改为B05,004,005不变(没有任何规律的),要求表二的编号也这么改过来。
pb中怎么获取数据窗口的列名
ls_colname = ldwcቤተ መጻሕፍቲ ባይዱDescribe("#" + String(i) +".Name")
Case datastore!
ls_colname = lds.Describe("#" + String(i) +".Name")
Return -1
End If
as_columns[i] = Upper(ls_colname)
Next
string str_column//存放列名
string str_column_text//存放列标题名称
//取列数
Choose Case TypeOf(apo_data)
Case datawindow!
uo_datawindow_cics ldw
ldw = apo_data
li_colcount = Integer(ldw.Describe("DataWindow.Column.Count"))
Case Else
as_error = '调用GetColumns时入参错误:powerobject的类型不正确'
Return -1
End Choose
If Not li_colcount > 0 Then
//得到数据窗口的总列数
lng_column_count = long(dw_1.Describe("DataWindow.Column.Count"))
//循环依次读取
for i = 1 to lng_column_count
pb数据窗口及事件
Pb数据窗口1.Pb数据窗口介绍(结合实例进行讲解):数据窗口控件数据窗口对象数据窗口对象分为:常用的数据窗口类型:Composite 复合报表数据窗口Crosstab 交叉报表数据窗口Freeform 自由模式数据窗口Graph 图形报表数据窗口Grid 网格数据窗口Group 分组数据窗口n-up 多列显示数据窗口分别举例说明各个数据窗口:杏林妙手中的体检报告中保护上述数据窗口类型。
2.数据窗口数据源类型介绍:Quick select、sql select 、query、external、stored procedure 分别为:通过单表查询,通过多表查询,通过查询对象,通过自定义的字段,通过存储过程。
3.数据窗口控件常用函数介绍:Setredraw(boolean) :设置是否自动刷新报表,true 自动刷新,false不自动刷新。
Describe(string):获取数据窗口指定对象的属性,string为数据窗口表达式例如:“t_1.text“等Modify(string):设置数据窗口指定对象的属性,和describe配合使用,string为数据窗口表达式例如“t_1.text=’123’“描述查找相关设置的方法。
Getitemstring(int,string)、Getitemstring(int,int)Setitem (int,string,string)、Setitemstring(int,int,string)获取数据窗口指定行的字符串列的值,参数:行号,列名(或列值)设置数据窗口指定行的字符串列的值,参数:行号,列名(或列值),设置值(还有获取其他数据类型的类似函数不做赘述!,还可以通过object.列名[行号] 来获取和设置指定行列的值)Deleterow(int)删除行指定行的操作,和循环配合使用的注意事项。
Insertrow(0)插入行,参数0表示在最后一行插入Rowcount()当前数据窗口的行数。
pb中getrow函数
pb中getrow函数
pb中的getrow函数是一个非常实用的函数,它可以用来获取表格中指定行的数据。
在使用该函数时,我们需要指定表格的名称和行号,函数会返回该行的所有数据。
在使用getrow函数时,需要注意以下几点:
1. 表格名称需要使用双引号括起来,例如:'table1'。
2. 行号从1开始,而不是0。
3. 如果指定的行号不存在,函数会返回空值。
4. 如果需要获取多行数据,可以使用循环语句来实现。
下面是一个示例代码,用于获取表格'table1'中第3行的数据: ```
datawindow ldw
integer li_row
string ls_data
ldw = this.DataWindow
li_row = 3
ls_data = ldw.GetRow('table1', li_row)
MessageBox('Row Data', ls_data)
```
在执行该代码时,会弹出一个消息框,显示第3行的数据。
如果需要获取多行数据,可以将代码放入循环语句中,依次获取每一行的数据。
总之,pb中的getrow函数是一个非常实用的函数,可以帮助我们快速获取表格中的数据,提高开发效率。
用iReport制作交叉表(CrossTabs)
用iReport制作交叉表(CrossTabs) 立方开源商业智能一个CrossTabs是一种在设计的时候既不确定行数和也不确定列数的一种表格,在运行环境下它会像下面显示的不同年份的一个销售报表一样。
CrossTabs在jasperresports中从1.1.0版本时开始提供,同时iReport也从1.1.0开始支持CrossTabs。
Jasperreports的CrossTabs工具允许对行和列的数据进行分组、汇总和自定义每一个cell里的内容。
填充CrossTab的数据可以来自主报表里的dataset或来自subDataset。
使用iReport里提供的向导我们可以简单快速的创建功能强大的交叉报表组件。
一个CrossTabs本质上是一个表格,行和列的数量取决于填充这个表格的数据。
行和列也可以在groups里做聚合操作。
对于每一个行或列的group我们都可以得到一个细节信息和一个可选的行列数据的汇总。
16.1 交叉表向导 (Crosstab wizard)为了说明怎么让一个crosstab工作起来,我们将使用向导创建一个crosstab,当我们在工具条里选择crosstab元素并将其添加到报表中时crosstab的向导会自动启动。
还是以DoradoSample里提供的hsql数据里的employee报为例,我们使用包含下面查询语句的空报表开始:Select * from employee我们把crosstab放在报表的底部:summary band图16.1在第一步里我们需要选择一个dataset来填充crosstab,我们这里使用主报表里提供的dataset,点击下一步继续。
图16.2在第二步里我们需要定义至少一个行分组.我们这里选择对所有记录使用DEPT_ID进行分组。
这样就意味着crosstab的每一行将会采用一个明确的部门编号,这样JasperReports将会使用部门编号对数据集里的数据进行重新整理计算。
PB的数据窗口操作
Composite 复合报表型的.就是可以由几个DW组合成的Crosstab 交叉报表型. 这个很少用.Freeform 自由风格,就是里面的列可以自已改变的. 常用Graph 统计图,你知道的Grid 网格,类似EXCEL的最常用Group 分组的.有分组小计要用的那种常用Label 标签的就是一个大格子一个大格子排列显示的那种N-Up 分栏显示的.这个少用.Tabular 列表的,这个列表不是太好用.这个也少用★SetTransObject语法:dwcontrol.SetTransObject ( transaction )功能:给数据窗口或者datastore控件dwcontrol设置事务对象transaction,缺省事务对象是SQLCA。
返回值:成功设置事务对象则返回1,执行过程中发生了错误则返回-1,有任意参数为Null时返回Null。
★Retrieve语法:dwcontrol.Retrieve ( {, argument, argument . . . } )功能:使用数据窗口控件的当前事务对象检索数据库中的数据。
如果数据窗口控件对应的数据窗口对象定义了检索参数,则应该在该函数中指定检索参数,参数的个数和数据窗口对象的检索变量个数相等,对应的数据类型相兼容。
返回值:返回数据窗口控件主缓存区(PrimaryBuffer)中的记录数,如果检索数据时发生错误则返回-1,如果任意参数为Null则返回Null*该函数的参数和数据窗口对象定义的参数的顺序要相同,类型要兼容。
个数不能少于数据窗口对象定义的参数,即可以等于和多于数据窗口对象定义的参数,多的参数忽略。
★DeleteRow语法:dwcontrol.DeleteRow ( row )功能:删除数据窗口dwcontrol中的第row行数据,如果row为0则表示删除当前行的数据。
返回值:执行成功则返回1,执行错误则返回-1,如果任意参数为Null则返回Null。
pb从数据窗口获得数据的方法总结
string ls_name
ls_name = dw_1.Object.emp_name.Delete[14]This statement gets the original
下面语句得到emp_name列在delete缓冲区的第14行的初始值(数据库中的值)
dw_1.Object.emp_name.Selected
dw_1.Object.emp_name.Primary.Selected
dw_1.Object.emp_name.Current.Selected
dw_1.Object.emp_name.Primary.Current.Selected
1)在知道列或计算域名时得到数据得到某列中一行或全部的值,
表达式:(如果rownum忽略,则可得到缓冲区或数据源的值)
dwcontrol.Object.columnname {.buffer } {.datasource } { [ rownum ] }
其中datasource 参数表示数据源,它有两个可选项,Current(缺省)和Original,由此参数我们可以指定数据是从当前数据窗口上还是从数据库中得到。对于计算域,它不能被改变也没有当前值,所以我们必须指定为此参数为Original。
得到一定范围的值
返回指定列的一个范围的行的值,并将它们放入数组
表达式:
dwcontrol.Object.columnname {.buffer } {.datasource } [ startrownum,
endrownum ]
示例:
由于Primary缓冲区和当前数据是缺省选项,下面的语句式等价的
python crosstab参数
一、概述Python是一种高级编程语言,广泛应用于数据分析、科学计算等领域。
在Python中,pandas库提供了丰富的数据操作和处理功能,其中crosstab函数是一种用于创建交叉表的重要工具。
本文将详细介绍Python中crosstab函数的参数及其用法。
二、crosstab函数的基本用法crosstab函数是pandas库中的一个重要函数,用于创建交叉表。
交叉表是一种用于统计分组频数的表格形式,可以帮助我们快速了解两个变量之间的相关性。
crosstab函数的基本语法如下:```pythonpd.crosstab(index, columns, values=None, rownames=None, colnames=None, aggfunc=None, margins=False,margins_name='All')```crosstab函数的参数解释如下:- index: 必填参数,指定交叉表的行索引。
- columns: 必填参数,指定交叉表的列索引。
- values: 可选参数,指定要统计的值。
默认为None,表示只统计频数。
- rownames: 可选参数,指定行索引的名称。
- colnames: 可选参数,指定列索引的名称。
- aggfunc: 可选参数,指定对values进行聚合计算的函数。
默认为None,表示不进行聚合计算。
- margins: 可选参数,是否显示行、列的汇总统计。
默认为False,不显示汇总统计。
- margins_name: 可选参数,指定汇总统计的索引名称。
默认为'All'。
通过crosstab函数,我们可以快速创建交叉表,进行多维度的统计分析,并且可以方便地根据实际需求设置各种参数。
三、crosstab函数的参数详解1. index和columnsindex和columns参数分别指定了交叉表的行索引和列索引。
在实际应用中,我们可以根据需要选择适当的字段作为行索引和列索引,从而生成符合需求的交叉表。
pb中截取混排字符串
pb中截取混排字符串宋铭pb数据窗口没有提供调整计算域行间距的方法,甚至利用richtext类型的数据窗口也不行。
我们设想,在计算域各行之间增加回车换行符来调整行间距。
但由于计算域的内容是动态可变的,为此,我们设计了一个全局函数fun—string—intercept,解决了这个问题。
该函数有两个参数:text和len,其中text为需要处理的字符串,len为截取长度。
函数按长度len把text 截取成一行行的字符串,行与行之间增加一个空行,使正文部分疏落有致。
一、主要问题及解决方案由于字符串由字母、数字和汉字混排组成,简单按固定长度截取会出现问题。
需要考虑以下几个问题:1. 如果截取字符串的最后一个字符刚好落到汉字中间,则会显示半个汉字,形成该行及下一行乱码。
解决方案:为截取字符串设计了半个汉字计数器,如计数器为奇数,则去掉最后一位字符。
2. 如果截取字符串最后一个字符刚好落到英文单词中间,则会把单词生硬地分割。
解决方案:此种情况该单词移到下一行。
3. 如果截取字符串最后一个字符刚好落到数字中间(如1999),则会把数字生硬地分割。
解决方案:此种情况该数字移到下一行。
4. 如果截取字符串最后一个字符刚好落到回车符(~r~n)上,则会多空一行。
解决方案:如果截取字符串已包含回车换行符,或者该行是最后一行且下行第一个字符是回车换行符,则截取字符串不加回车换行符。
二、程序清单全局函数fun—string—intercept(text string,len integer)程序清单如下:/*ltext:text从左边截取len长度字符串*//*ntext:处理后带回车换行符的text*//*i: ltext长度计数器*//*num: ltext中半个汉字计数器*//*rasc: ltext最右边字符的asc码*//*lasc: ltext下一个字符的asc码*/integer i, num, rasc, lascstring ltext, ntextif len〈2 then return textdo while text〈〉″″/*初始化num,重新计算ltext*/num=0ltext=left(text,len)/*计算半个汉字数量*/for i=1 to len(ltext)if asc(mid(ltext,i,1))〉=160 thennum=num+1end ifnextfor i=1 to len(ltext)rasc=asc(right(ltext,1))lasc=asc(mid(text,len+1,1))/*如果ltext最右边的字符和下一个字符均为字母数字,且该行包括汉字,则ltext截掉最后一位字符*/if rasc〈160 and rasc〈〉10 and rasc〈〉13 and rasc〈〉32 and num〉0 and & lasc〈160 and lasc〈〉10 and lasc〈〉13 and lasc〈〉32 thenltext=left(ltext,len(ltext)-1)i=i -1else/*如果ltext最右边的字符是半个汉字,则ltext截掉最后一位字符*/if rasc〉=160 and mod(num,2)=1 thenltext=left(ltext,len(ltext)-1)i=i-1end ifexitend ifnexttext=right(text,len(text)-len(ltext))/*如果 ltext不包含回车换行符,该行不是最后一行,且下一个字符不是回车换行符,则ntext增加两个回车换行符*/if pos(ltext,″~r″)=0 and pos(ltext,″~n″)=0 and &lasc〈〉10 and lasc〈〉13 and text〈〉″ ″ thenntext=ntext+ltext+″~r~n~r~n″elsentext=ntext+ltextend ifloopreturn ntext调用方法:在数据窗口中,建立计算域notice1、notice2,notice1表达式内容为书写的内容,notice2表达式内容为fun—string—intercept (notice1,x),第二个参数x根据页宽需要可任意调整。
用iReport制作交叉表(CrossTabs)
用iReport制作交叉表(CrossTabs) 立方开源商业智能一个CrossTabs是一种在设计的时候既不确定行数和也不确定列数的一种表格,在运行环境下它会像下面显示的不同年份的一个销售报表一样。
CrossTabs在jasperresports中从1.1.0版本时开始提供,同时iReport也从1.1.0开始支持CrossTabs。
Jasperreports的CrossTabs工具允许对行和列的数据进行分组、汇总和自定义每一个cell里的内容。
填充CrossTab的数据可以来自主报表里的dataset或来自subDataset。
使用iReport里提供的向导我们可以简单快速的创建功能强大的交叉报表组件。
一个CrossTabs本质上是一个表格,行和列的数量取决于填充这个表格的数据。
行和列也可以在groups里做聚合操作。
对于每一个行或列的group我们都可以得到一个细节信息和一个可选的行列数据的汇总。
16.1 交叉表向导 (Crosstab wizard)为了说明怎么让一个crosstab工作起来,我们将使用向导创建一个crosstab,当我们在工具条里选择crosstab元素并将其添加到报表中时crosstab的向导会自动启动。
还是以DoradoSample里提供的hsql数据里的employee报为例,我们使用包含下面查询语句的空报表开始:Select * from employee我们把crosstab放在报表的底部:summary band图16.1在第一步里我们需要选择一个dataset来填充crosstab,我们这里使用主报表里提供的dataset,点击下一步继续。
图16.2在第二步里我们需要定义至少一个行分组.我们这里选择对所有记录使用DEPT_ID进行分组。
这样就意味着crosstab的每一行将会采用一个明确的部门编号,这样JasperReports将会使用部门编号对数据集里的数据进行重新整理计算。
Pandas基础(13)-Crosstab交叉列表取值
Pandas基础(13)-Crosstab交叉列表取值这⼩节的题⽬看起来还挺晦涩的, crosstab 是 pandas 的⼀个函数, 作⽤还蛮强⼤的, ⼀起来看⼀下吧~~~⾸先还是先引⼊⼀个例⼦⽂件:import pandas as pddf = pd.read_excel('/Users/rachel/Sites/pandas/py/pandas/13_crosstab/survey.xls')df输出:好, 下⾯看⼀下 crosstab 的功⼒:pd.crosstab(df.Nationality, df.Handedness)输出:crosstab 第⼀个参数是列, 第⼆个参数是⾏. 还可以添加第三个参数:pd.crosstab(df.Sex, df.Handedness, margins = True)输出:同时, ⾏和列都可以是复合的:pd.crosstab(df.Sex, [df.Handedness, df.Nationality], margins = True)输出:pd.crosstab([df.Nationality, df.Sex], df.Handedness, margins = True)输出:ok, 上⾯介绍了 crosstab() 函数最基本的功能, 其实它还可以通过很多参数的配置实现不同的功能. 这⾥分享⼀个⼩技巧, 把光标点到 crosstab 单词书, 按下 shift + tab 键, 就可以弹出对这个函数的详情, 主要是参数的使⽤说明, 发现真的还有好多参数啊, 下⾯再选两个讲⼀下:求百分⽐:pd.crosstab(df.Sex, df.Handedness, normalize='index')输出:求指定列的平均值:import numpy as nppd.crosstab(df.Sex, df.Handedness, values=df.Age, aggfunc=np.average)输出:最后⼀个参数看起来有点多, 有点复杂, 那也是因为我们刚开始接触 crosstab 函数, 所以可以结合上⾯介绍的⽅法, 打开函数说明, 对照着⾥⾯的参数⽤法, 多看⼏遍就懂了. 如果还有不明⽩, 就给我留⾔吧~~~~。
PowerBuilder培训(初级)
谁需要 PowerBuilder
PB可以做的事情很多,因此也就成为现在各软件公司进行系统开发的一 种常用工具,如果你将从事下列工作或有这些需求,则最好了解或通晓PB: 1、数据库系统前端开发中的程序设计; 2、开发咨询或技术支撑; 3、数据库系统分析及设计; 4、需要掌握VB,Delphi,Developer 2000以外的其他工具; 5、了解Internet网站建设中可以保护现有PB资源的开发方式; …… 注意: PB与数据库系统是不可分离的,因此,你只有对DBMS有基本的理解才 可能用好PB,精通当然最好。 如果你不知道DBMS是什么东西,请先学习相关内容,南京大学<数据库 系统概论>是非常好的入门教材,各流行数据库系统的基本概念都涵盖了。
PowerBuilder应用场合
1、大型数据库系统C/S模式前端开发工具或B/S模式应用服务器开发工具, 一般应用于需要大型或中型数据库系统支持(如ORACLE,Sybase,MS SQL Server,DB2,Informix)作为后台数据支撑平台的管理类系统,一 般可以承受千万级纪录量的系统,如: · MRPII系统 – 物料资源计划 · ERP系统 – 企业资源计划 · CRM – Customer Relation Management(客户关系管理) · Call Center – 呼叫中心(Haier) 2、中、小型数据库系统开发,一般数据量为10万左右,支持并发或仅单机 用户,如中、小型企业的内部信息管理、各种小型软件、共享软件等; 3、与Sybase的PowerDynamo,Jaguar CTS,PowerSite等集成,建立电子商 务应用服务支撑平台; 4、与PHP,Java,ASP集成,作为Intranet或Internet的后台数据库系统维护 工具,如异种平台(Unix,Linux,Solaris,NT)上的ORACLE,MySQL,DB2 等的Client方式维护。
PB操作Excel详解
run("notpad.exe") ////pb 运行记事本run("calc.exe") ////pb运行计算器记住:当我们用PB导出数据到EXCEL时,不管是用Saveas 还是clipboard 它输出的数据是定义了字段类型的列的数据,也就是说,不管列是可见还是不可见,只要该列定义了列属性,在查询时主缓冲区中该列有数据,则就会导出出来~用方法得到列名或其他属性也是一样的~及时隐藏了也可以得到当中间的某列给隐藏时,下次打开后它会显示在末尾的位置,但是用Saveas输出数据时,不管它是否隐藏,是否改变了位置,它仍可输出数据而且位置还是不变的~也就是说没有改变数据窗口对象的源,数据窗口对象上显示的列位置只会影响我们在程序界面上看到的位置,而不会影响它在后台存储的实际位置。
但是这样会改变界面显示的位置,记住,没有改变源如何用PB程序在excel画表格边框线,如何改变文字大小1.创建Excel对象eole=CREATEOBJECT(′Excel.application′)2.添加新工作簿eole.Workbooks.add3.设置第3个工作表为激活工作表eole.Worksheets(″sheet3″).Activate4.打开指定工作簿eole.Workbooks.Open(″c:\temp\ll.xls″)5.显示Excel窗口eole.visible=.t.6.更改Excel标题栏eole.Caption=″VFP应用程序调用Microsoft Excel″7.给单元格赋值eole.cells(1,4).value=XM(XM为数据库字段名)8.设置指定列的宽度(单位:字符个数)eole.ActiveSheet.Columns(1).ColumnWidth=59.设置指定行的高度(单位:磅)eole.ActiveSheet.Rows(1).RowHeight=1/0.035(设定行高为1厘米,1磅=0.035厘米)10.在第18行之前插入分页符eole.Worksheets(″Sheet1″).Rows(18).PageBreak=111.在第4列之前删除分页符eole.ActiveSheet.Columns(4).PageBreak=012.指定边框线宽度(Borders参数如下)ole.ActiveSheet.Range(″b3:d3″).Borders(2).Weight=313.设置四个边框线条的类型eole.ActiveSheet.Range(″b3:d3″).Borders(2).LineStyle=1(其中Borders参数:1-左、2-右、3-顶、4-底、5-斜、6-斜/;LineStyle值:1与7-细实、2-细虚、4-点虚、9-双细实线)14.设置页眉eole.ActiveSheet.PageSetup.CenterHeader=″报表1″15.设置页脚eole.ActiveSheet.PageSetup.CenterFooter=″第&P页″16.设置页眉到顶端边距为2厘米eole.ActiveSheet.PageSetup.HeaderMargin=2/0.03517.设置页脚到底边距为3厘米eole.ActiveSheet.PageSetup.FooterMargin=3/0.03518.设置顶边距为2厘米eole.ActiveSheet.PageSetup.TopMargin=2/0.03519.设置底边距为4厘米eole.ActiveSheet.PageSetup.BottomMargin=4/0.03520.设置左边距为2厘米veole.ActiveSheet.PageSetup.LeftMargin=2/0.03521.设置右边距为2厘米eole.ActiveSheet.PageSetup.RightMargin=2/0.03522.设置页面水平居中eole.ActiveSheet.PageSetup.CenterHorizontally=.t.23.设置页面垂直居中eole.ActiveSheet.PageSetup.CenterVertically=.t.24.设置页面纸张大小(1-窄行8511 39-宽行1411) eole.ActiveSheet.PageSetup.PaperSize=125.打印单元格网线eole.ActiveSheet.PageSetup.PrintGridlines=.t.26.拷贝整个工作表edRange.Copy27.拷贝指定区域eole.ActiveSheet.Range(″A1:E2″).Copy28.粘贴eole.WorkSheet(″Sheet2″).Range(″A1″).PasteSpecial 29.在第2行之前插入一行eole.ActiveSheet.Rows(2).Insert30.在第2列之前插入一列eole.ActiveSheet.Columns(2).Insert31.设置字体eole.ActiveSheet.Cells(2,1)=″黑体″32.设置字体大小eole.ActiveSheet.Cells(1,1).Font.Size=2533.设置字体为斜体eole.ActiveSheet.Cells(1,1).Font.Italic=.t.34.设置整列字体为粗体eole.ActiveSheet.Columns(1).Font.Bold=.t.35.清除单元格公式eole.ActiveSheet.Cells(1,4).ClearContents36.打印预览工作表eole.ActiveSheet.PrintPreview37.打印输出工作表eole.ActiveSheet.PrintOut38.工作表另为eole.ActiveWorkbook.SaveAs(″c:\temp\22.xls″)39.放弃存盘eole.ActiveWorkbook.saved=.t.40.关闭工作簿eole.Workbooks.close41.退出Exceleole.quit先把标题放到剪贴板上,再PASTE()到EXCEL中,代码如下:::clipboard(ls_value)ao_object.range(ls_col+string(1)+":"+ls_col+string(1)).select()ao_object.activesheet.Paste()/*************************************************************下面的函数f_excel_hb,可以实现“将工作簿filename_s中的工作表sheetname_s以新的工作表名称sheetname_t,复制到工作簿filename_t的最后”1.public function boolean f_excel_hb (string filename_s, string filename_t, string sheetname_s, string sheetname_t);2.//==========================================================3.// 合并两个工作簿中的某个工作表4.//==========================================================5.// 作者:yyoinge 2011-10-12 18:006.//==========================================================7.// 将工作簿filename_s中的工作表sheetname_s以新的8.// 工作表名称sheetname_t,复制到工作簿filename_t的最后9.//==========================================================10.if not fileexists(filename_s) then11. messagebox('','工作簿【' + filename_s + '】(源)不存在')12.return false13.end if14.if not fileexists(filename_t) then15. messagebox('','工作簿【' + filename_t + '】(目标)不存在')16.return false17.end if18.long ll_val19.//声明ole对象20.oleobject ole_object_s21.//创建ole对象22.ole_object_s=create oleobject23.//连接到excel24.ll_val = ole_object_s.connecttonewobject("excel.application")25.if ll_val <> 0 then26. messagebox('','ole无法连接Excel!')27.goto error28.end if29.//打开源和目标工作簿30.ole_object_s.workbooks.open(filename_s)31.ole_object_s.workbooks.open(filename_t)32.string ls_t33.ls_t = filename_t34.filename_s = of_splitpath(filename_s, 2)35.filename_t = of_splitpath(filename_t, 2)36.//隐藏excel37.ole_object_s.visible = false38.ole_object_s.displayalerts = false39.int n,t40.int li41.boolean isexists=false42.oleobject lworksheet43.//判断源工作簿中的工作表是否存在44.try45. lworksheet = ole_object_s.Workbooks(filename_s).sheets(sheetname_s)46. isexists = true47.catch( oleruntimeerror er)48. isexists = false49.end try50.if isexists=false then51. messagebox('','工作簿【' + filename_s + '】中工作表不存在工作表[' + sheetname_s + ']')52.goto error53.end if54.//当目标工作簿中存在sheet名为sheetname_t的工作表时,为sheetname_t增加后缀(1),然后再重复进行判断,直到表名不存在55.isexists = true56.do while isexists57.try58. lworksheet = ole_object_s.Workbooks(filename_t).sheets(sheetname_t)59. isexists = true60. sheetname_t += '(1)'61.catch( oleruntimeerror er1)62. isexists = false63. end try64.loop65.//进行工作表合并(移到目标工作簿的最后)66.//int li67.setnull(li)68.ole_object_s.workbooks(filename_s).Sheets(sheetname_s).copy(li, ole_object_s.workbooks(filename_t).Sheets(long(ole_object_s.workbooks(filename_t).Sheets.count)))69.//重命名工作表70.ole_object_s.workbooks(filename_t).sheets(long(ole_object_s.workbooks(filename_t).Sheets.count)).name = sheetname_t71.//保存目标工作簿72.isexists = true73.//ole_object_s.visible = true74.//ole_object_s.displayalerts = true75.//messagebox('', '')76.try77. ole_object_s.workbooks(filename_t).save()78.catch( oleruntimeerror er2)79. messagebox('提示', '无法保存工作簿【' + filename_t + '】')80. isexists = false81.end try82.if not isexists then goto error83.//关闭工作簿84.ole_object_s.workbooks(filename_s).close85.ole_object_s.workbooks(filename_t).close86.//退出excel87.ole_object_s.workbooks.close88.ole_object_s.Application.quit();89.//断开连接90.ole_object_s.disconnectobject();91.//注销ole对象92.destroy ole_object_s;93.return true94.error:95.ole_object_s.workbooks(filename_s).close96.ole_object_s.workbooks(filename_t).close97.ole_object_s.workbooks.close98.ole_object_s.Application.quit();99.ole_object_s.disconnectobject();100.destroy ole_object_s;101.return false102.103.104.end function/**********************************************************//*函数名称:uf_dwsaveas_excel功能:将数据窗口数据导出EXCEL文件,并将EXCEL文件默认英文标题替换成中文。
pb的主要控件函数及其作用
pb的主要控件函数及其作用函数返回值AcceptT ext Integer CanUndo Boolean CategoryCount Integer CategoryName StringClear IntegerClearValues Integer Clipboard Integer Copy IntegerCopyRTF String Create Integer CrosstabDialog Integer Cut Integer DataCount Long DBCancel Integer DBErrorCode Long DBErrorMessage String DeletedCount Long DeleteRow Integer Describe String Drag Integer Filter Integer FilteredCount Integer Find Long FindCategory Integer FindGroupChange Long FindNext Integer FindRequired Integer FindSeries Integer GenerateHTMLForm Integer GetBandAtPointer String GetBanderStyle Border GetChild Integer GetClickedColum Integer GetClickedRow Long GetColum Integer GetColumnName StringGetContextService Integer GetData Double GetDataPieExplode IntegerGetDataStyle IntegerGetDataValue Integer GetFormat String GetItemDate Date GetItemDateTime DateTime GetItemDecimal Decimal GetItemNumber Double GetItemStatus dwItemStatus GetItemString String GetItemTime Time GetMessageT ext String GetNextModified Long GetObjectAtPointer String GetParent PowerObject GetRow Long GetSelectedRow Integer GetSeriesStyle Integer GetSQLPreview String GetSQLSelect String GetText String GetTrans Integer GetUpdateStatus Integer GetValidate String GetValue String GroupCalc Integer Hide Integer ImportClipboard Long ImportFile Long ImportString Long InsertDocument IntegerInsertRow Long IsSelected Boolean LineCount Integer ModifiedCount LongModify StringMove Integer ObjectAtPointer grObjectTypeOLEActivate Integer Paste Integer PasteRTE Long PointerX Integer PointerY IntegerPosition IntegerPostEvent Boolean Print Integer PrintCancel Integer ReplaceText Integer ReselectRow Integer Reset Integer ResetDataColors Integer ResetTransObject Integer ResetUpdate Integer Resize Integer Retrieve LongRowCount Long RowsCopy Integer RowsDiscard Integer RowsMove Integer SaveAs Integer Scroll Integer ScrollNextPage Long ScrollNextRow Long ScrollPriorPage Long ScrollPriorRow Long ScrollT oRow Integer SelectedLength Integer SelectedLine Integer SelectedStart Integer SelectedText String SelectRow IntegerSelectText Integer SelectTextAll Integer SelectTextLine Integer SelectTextWord IntegerSeriesCount Integer SeriesName String SetActionCode Integer SetBorderStyle Integer SetColumn Integer SetDataPieExplode IntegerSetDataStyle IntegerSetDetailHeight Integer SetFilter Integer SetFocus Integer SetFormat Integer SetItem Integer SetItemStatus Integer SetPosition IntegerSetRedraw Integer SetRow Integer SetRowFocusIndicatorInteger SetSeriesStyle IntegerSetSort Integer SetSQLPreview Integer SetSQLSelect Integer SetTabOrder Integer SetText Integer SetTrans IntegerSetTransObject Integer SetValidate Integer SetValue Integer ShareData Integer ShareDataOff Integer Show Integer ShowHeadFoot IntegerSort Integer TextLine String TriggerEvent Integer TypeOf Object Undo Integer Update Integer功能将数据窗口控件中“漂浮”在当前行/列上的编辑框内的内容放入数据窗口缓冲区的当前项中(编辑框的内容必须通过数据有效性规则检查)检测最近一次编辑操作能否被取消.放回值为Ture时表示能够撤消,为False时表示不能撤消返回数据窗口控件指定统计图的数据类别数返回数据窗口控件的名称删除数据窗口控件的编辑框中所选内容,对RichText风格的数据窗口来说,删除数据窗口中所选内容删除数据窗口控件指定列的代码表中的所有值,该函数不影响指定列的数据值将数据窗口控件中指定的统计图复制到系统剪贴板将数据窗口控件当前行列上编辑框中的所选内容复制到系统剪贴板.对RichText风格的数据窗口来说,把数据窗口控件中所选内容复制到系统剪贴板将数据窗口控件中所选的文本,图像,输入字段作为一个超文本格式的字符串返回,位图和输入字段包括在字符串中使用指定的源代码创建窗口对象,并用新的数据窗口对象取代数据窗口控件中原有的数据窗口对象显示Crosstab Definition对话框,这样用户能够在运行时修改Crosstab风格的数据窗口对象的定义将数据窗口控件当前行列上编辑框中的所选内容复制到系统剪贴板.对RichText风格的数据窗口来说,把数据窗口控件中所选内容复制到系统剪贴板返回数据窗口控件指定图形,指定序列的数据点数取消数据库数据检索进程得到数据库访问出错时的错误编号(即将废弃)得到数据库访问出错时的错误信息(即将废弃)返回数据窗口控件中已经被删除但尚未做数据库更新的行的数量删除数据窗口控件中的指定行返回数据窗口控件的指定信息开始或结束数据窗口控件的拖动在数据窗口控件中显示满足当前过滤条件的行返回过滤缓冲区中数据行数在数据窗口控件中查找满足条件的下一行.对RichText风格的数据窗口来说,在该控件中查找满足条件的文本,搜索到后将其加亮.可以指定查找方向以及指定是否需要大小写匹配和单词匹配返回数据窗口控件中指定图形,指定类别的类别号从指定行开始,在数据窗口控件中查找指定分组的第一个分组位置使用Find()函数的条件继续查找,该函数只适用于RichText风格的数据窗口标识用户未填充的所需列返回数据窗口控件中指定图形,指定序列的号根据数据窗口的内容生成HTML Form语法返回一个字符串,字符串由带名,Tab字符(~t)和行号组成,指示当前鼠标指针位于哪个带的那个行上返回数据窗口控件指定列的边框类型,有效值为Box!, Lowered!, NoBorder!, Raised!, ResizeBorder!, ShadowBox!, Underline!得到指定列子数据窗口的名称并将其保存到变量中返回用户在数据窗口控件中单击或双击列的列号(即将废弃)返回用户在数据窗口控件中单击或双击列的行号(即将废弃)返回数据窗口控件当前列的列号返回数据窗口控件当前列的列名创建指定服务(包括ContextInformation, Internet以及Keyword)的上下文相关实例返回数据窗口控件指定图形,指定序列和指定数据点的值返回饼图中切开部分所占的百分比得到统计图中数据点的外观数据.序列中的每一个数据点都可以有不同的外观设置.该函数有3种语法形式得到数据窗口控件指定统计图,指定序列和指定数据点的值返回数据窗口控件指定列的显示格式返回数据窗口控件中指定行,指定列的Date型(日期型)数据值返回数据窗口控件中指定行,指定列的DateTine型(日期时间型)数据值返回数据窗口控件中指定行,指定列的Decimal型(十进制数字型)数据值返回数据窗口控件中指定行,指定列的数值型(包括decimal,double,Integer,Long或real)数据值返回数据窗口控件中指定行,指定列数据型的状态,有效值为DataModified!, New!, NewModified!和NotModified!返回数据窗口控件中指定行,指定列的String型(字符串型)数据值返回数据窗口控件中指定行,指定列的Time型(时间型)数据值得到数据窗口控件中crosstab风格的数据窗口对象产生的消息文本(即将废弃)返回数据窗口控件指定缓冲区中位于指定行之后的第一个被修改过的行的行号返回一个字符串,字符串由列名或统计图对象名,tab字符(~t)和行号组成,指示当前鼠标指针位于哪个列或统计图对象的哪个行上返回父对象的名称返回数据窗口当前行的行号返回数据窗口控件中指定行之后的第一个被选行的行号返回统计图中某个序列的风格,该函数有四种语法格式返回当前数据窗口控件提交给数据库的SQL语句(即将废弃)返回数据窗口控件当前的SELECT语句返回数据窗口控件中悬浮在当前行,列之上的编辑框中的文本返回数据窗口事务对象的值将要被更新的行的行号保存在一个变量中,将缓冲区的类型保存在另一个变量中(即将废弃)返回数据窗口控件指定列的有效性规则得到数据窗口中指定列的值或代码表指定项的值让数据窗口控件重新计算分组隐藏数据窗口控件把系统剪贴板中的数据复制到数据窗口控件中把文件中的数据复制到数据窗口控件中把字符串中的数据复制到数据窗口控件中将超文本格式的文件或普通文件的内容插入到数据窗口控件中.利用该函数的参数可以指定下述插入方法:在插入点位置插入,取代现有的所有内容.这个函数只能应用与RichText风格的数据窗口在数据窗口控件指定行前面插入一行当数据窗口控件中指定行被选择时返回Ture,当指定行未被选择或指定的行号大于数据窗口控件中的行数时返回False得到悬浮于当前行列上编辑框中数据的行数返回数据窗口控件中已经修改但尚未给新相应数据库表的行数修改数据窗口控件的属性将数据窗口移动到指定位置返回当前鼠标指针位于统计图的哪个区域并将相应的序列和数据点值保存到指定变量中将系统剪贴板的内容插入到数据窗口中"悬浮"于当前行/列的编辑框中将字符串中的超文本数据粘贴到RichText风格的数据窗口控件中返回当前鼠标指针离数据窗口控件左边缘的距离返回当前鼠标指针离数据窗口控件上边缘的距离返回数据窗口控件中悬浮在当前行/列的编辑框的插入点位置,对RichText风格的数据窗口控件返回当前插入点的行/列位置或所选文本的起始与结束位置将某个事件添加到数据窗口控件消息队列的尾部将数据窗口控件的内容发送到打印机上,这个函数有几种语法格式当数据窗口控件的内容发送到打印机后,该函数检查是否有要取消打印工作,查找到后,删除对应的脱机打印文件用指定字符串代替编辑框中所选内容访问数据库,重新选择所有被修改的列。
crosstab函数
crosstab函数在Python中,pandas库提供了一个非常方便的crosstab函数,可以快速生成交叉表。
其语法如下:```pythonpandas.crosstab(index, columns, values=None, rownames=None, colnames=None, aggfunc=None, margins=False, normalize=False) ```其中,参数index和columns是必需的,分别用于指定交叉表的行和列。
参数values是可选的,用于指定交叉表中的值。
rownames和colnames用于为行和列指定名称。
aggfunc是一个可选的参数,用于指定如何聚合值,默认情况下使用计数。
margins参数用于设置是否在交叉表中包含边际总计。
normalize参数用于指定是否对交叉表进行归一化。
接下来,让我们通过一个具体的示例来说明crosstab函数的使用。
假设我们有一个名为sales的数据集,其中包含了每个销售员在不同城市的销售数据。
数据集如下:```pythonimport pandas as pddata ='Salesperson': ['Alice', 'Bob', 'Alice', 'Bob', 'Alice','Charlie', 'Charlie', 'Dave', 'Dave'],'City': ['New York', 'Los Angeles', 'Chicago', 'New York', 'Chicago', 'Chicago', 'Los Angeles', 'New York', 'New York'], 'Amount': [1000, 2000, 3000, 4000, 5000, 6000, 7000, 8000, 9000]df = pd.DataFrame(data)```我们可以使用crosstab函数来生成每个销售员在不同城市的销售总额交叉表。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
PB中如何得到Crosstab中的列名
Crosstab是数据窗口中一种用于统计、分析数据的显示风格,其含义为Cross Tabulation,即横向制表。
它可以将检索到的数据分类或分组,进行累计求和或求平均值等运算,编制统计表格。
---- 但是,开发者在使用Crosstab数据窗口时会碰到一个问题:如果开发者想对其中的列内容进行处理时,不能用通用的方法得到Crosstab中的列名,使该操作无法运行。
这是因为:Crosstab数据窗口中行列定义不同于其它的数据窗口,而且其列数是变化的。
因此要得到Crosstab中的列名必须采用其它办法。
---- 下面以一个统计各工资段作者人数,按男女性别分别统计的Crosstab数据窗口静态风格为例探讨得到Crosstab中的列名。
---- 1、选择显示风格,定义数据源后,选择表”auths”中的列”author_code”、”salary”和”sex”;用鼠标拖动Source Data列表框中的“sex”列到Columns列表框中,使“sex”列成为数据窗口的纵向统计列;用鼠标拖动Source Data列表框中的“salary”列到Rows列表框中,使“salary”列成为数据窗口的横向统计列,将salary改为int(salary/100)*100;用鼠标拖动Source Data列表框中的“author_code”列到列表框中,使“count(author_code for Crosstab)”列成为数据窗口的统计值,此时“CrossTab Definition”对话框显示如下:(图略)
---- 2、单击OK按钮,数据窗口显示如下:(图略)
---- 3、Crosstab数据窗口中的列名
---- Crosstab显示风格有静态和动态。
如采用静态风格,则在“CrossTab Definition”对话框中取消选中“Rebuild columns at runtime”复选框。
数据窗口的列名在Detail栏中,有一定规律可循:
---- 第一栏的列名分两种情况:一、“CrossTab Definition”对话框中的所选的Rows的列名为表中的字段,如Rows=salary则第一栏的列名为”salary”;二、如“CrossTab Definition”对话框中的所选的Rows的列名为计算表达式,如int(salary/100)*100,则第一栏的列名均为”row_column”。
---- 其余各栏依次为所选Value的列名的排列,如Value为author_Code,则各栏依次”author_Code”,”author_code_1”, “author_code_2”,……栏的数目根据所选的Columns 所能产生的数目而定,如Columns=sex,则只有两栏”author_Code”,”author_code_1”;
---- 最后一列的列名为“grand_count_”+所选Value名,如在此例中为”grand_count_author_code”。
如采用动态风格,则在“CrossTab Definition”对话框中选中“Rebuild columns at runtime”复选框。
数据窗口的列名在Detail栏中:(图略)第一栏和最后一列的列名情况类似静态风格所述,也就不雷同了。
中间各栏的列名情况与静态风格有所不
同,依次为所选rows列名的排列,如rows为”salary”,在此例中各栏依次为”salary”,”salary_1”;。