MSSQL网页设计将DW数据窗口导出为EXCEL文件的办法(整...
线上或者测试环境经常出现的误操作总是让DBA同学那么闹心。excel|数据本文为摘自CSDN论坛帖子搜集收拾后汇总版本:
---2004年9月3日收拾
---原贴见:
http://community.csdn.net/Expert/topic/3328/3328715.xml?temp=8.050799E-04
鉴于如今良多伴侣扣问pb数据导出到excel中的成绩,导进来后格局和数据
范例不合错误了,本人写了几个用户工具,
但愿能举一反三,增强手艺交换,失掉人人的撑持。
1.nvo_excel只需是两个接口函数
导出数据存储的数据,能够界说excel的题目
publicfunctionintegeruf_toexcel(datastoreads_data,readonlystringas_title)
导出数据窗口的数据,能够界说excel的题目
publicfunctionintegeruf_toexcel(datawindowadw_data,readonlystringas_title)
2.上面是两个用户工具的sru文件,本人导进到工程中
$PBExportHeader$uo_ds_base.sru
$PBExportComments$数据存储基类
forward
globaltypeuo_ds_basefromdatastore
endtype
endforward
globaltypeuo_ds_basefromdatastore
stringdataobject="d_expression"
endtype
globaluo_ds_baseuo_ds_base
forwardprototypes
publicfunctionanyuf_getitemvalue(longal_row,stringas_colname)
publicfunctionstringuf_about()
publicfunctionstringuf_globalreplace(stringas_source,stringas_old,stringas_new)
endprototypes
publicfunctionanyuf_getitemvalue(longal_row,stringas_colname);
//*************************************************//
//function:失掉恣意的列的值
//parm:
//1.al_row:指定行
//2.as_colname:指定列的列名
//return:-1isfailorsuccessisvaluetoyou
//author:hzh
//date:2002.11.05
//************************************************//
Strings_tempcoltype
anya_ret
s_tempcoltype=Lower(THIS.Describe(as_colname+".coltype"))
//forstringtype
IFLeft(s_tempcoltype,4)="char"ORLeft(s_tempcoltype,4)="varc"then
a_ret=THIS.GetItemString(al_row,as_colname)
ENDIF
//fordecimaltype
IFLeft(s_tempcoltype,7)="decimal"then
a_ret=THIS.GetItemDecimal(al_row,as_colname)
ENDIF
//fordatetype
IFs_tempcoltype="date"THEN
a_ret=THIS.GetItemDate(al_row,as_colname)
ENDIF
//fordatetimetype
IFs_tempcoltype="datetime"THEN
a_ret=THIS.GetItemDateTime(al_row,as_colname)
ENDIF
//fornumbertype
IFs_tempcoltype="number"THEN
a_ret=THIS.GetItemNumber(al_row,as_colname)
ENDIF
//fortimetype
IFs_tempcoltype="time"THEN
a_ret=THIS.GetItemTime(al_row,as_colname)
ENDIF
//fortimestamptype
IFs_tempcoltype="timestamp"THEN
a_ret=THIS.GetItemTime(al_row,as_colname)
ENDIF
//forintorlong
IFs_tempcoltype="int"ORs_tempcoltype="long"THEN
a_ret=THIS.GetItemnumber(al_row,as_colname)
ENDIF
IFIsNull(a_ret)THEN
RETURN-1
ENDIF
RETURNa_ret
endfunction
publicfunctionstringuf_about();
strings_func=""
s_func="1.求得表达式的值(uf_evaluate)"+&
"2.依据SQL,创立数据存储(uf_setsqlselect)~r~n"+&
"3.失掉恣意列的值(uf_getitemvalue)~r~n"
//s_func+=SUPER::uf_about()
RETURN"uo_ds_baseobjectmembersfunctions:~r~n"+s_func
endfunction
publicfunctionstringuf_globalreplace(stringas_source,stringas_old,stringas_new);
//**************************************************************//
//function:用指定的字符串交换指定字符串
//parm:
//1.as_source:本来的字符串
//2.as_old:将要被交换的字符串
//3.as_new:用来交换的字符串
//return:新的字符串
//author:hzh
//date:2002.11.14
//*************************************************************//
Longl_newlen,l_oldlen,l_start
Strings_null,s_source
IFIsNull(as_source)ORIsNull(as_old)ORIsNull(as_new)THEN
SetNull(s_null)
RETURNs_null
ELSE
l_oldlen=Len(as_old)
l_newlen=Len(as_new)
as_Old=Lower(as_old)
s_Source=Lower(as_source)
ENDIF
l_start=Pos(s_source,as_old)
DOWHILEl_start>0
as_source=Replace(as_source,l_start,l_oldlen,as_new)
s_source=Lower(as_Source)
l_start=Pos(s_source,as_old,(l_start+l_newlen))
LOOP
RETURNas_source
endfunction
onuo_ds_base.create
callsuper::create
TriggerEvent(this,"constructor")
endon
onuo_ds_base.destroy
TriggerEvent(this,"destructor")
callsuper::destroy
endon
-----------------------------------------------------------------
$PBExportHeader$nvo_excel.sru
$PBExportComments$和excel通信的功效函数
forward
globaltypenvo_excelfromnonvisualobject
endtype
endforward
globaltypenvo_excelfromnonvisualobject
endtype
globalnvo_excelnvo_excel
typeprototypes
Private:
FunctionuintGetModuleFileNameA(ulonghModule,refstringlpFilename,ulongnSize)Library"kernel32.dll"
endprototypes
typevariables
Private:
//存储要导出的数据
uo_ds_baseids_data
//列名
Stringis_columnname[]
//列的题目
Stringis_columntitle[]
//列的显现格局
Stringis_columnformat[]
//列的范例
Stringis_columntype[]
endvariables
forwardprototypes
publicfunctionintegeruf_toexcel(datastoreads_data,readonlystringas_title)
publicfunctionintegeruf_toexcel(datawindowadw_data,readonlystringas_title)
privatefunctionintegeruf_setdatasource(datawindowadw_data)
privatefunctionintegeruf_setdatasource(datastoreads_data)
privatefunctionintegeruf_datatoexcel(stringas_title)
publicfunctionstringuf_about()
privatefunctionintegeruf_initcolumn()
endprototypes
publicfunctionintegeruf_toexcel(datastoreads_data,readonlystringas_title);
/**********************************************************/
//Function:转换数据到excel
//parm:
//1.ads_data:包括源数据的工具
//2.as_title:excel的题目
//return:1issuccessand-1isfail
//Author:hzh
//date:2003.12.08
/**********************************************************/
IFTHIS.uf_setdatasource(ads_data)1THENRETURN-1
IFNOTIsValid(ids_data)THENRETURN-1
IFids_data.RowCount()<1THENRETURN-1
THIS.uf_initcolumn()
THIS.uf_datatoexcel(as_title)
RETURN1
endfunction
publicfunctionintegeruf_toexcel(datawindowadw_data,readonlystringas_title);
/**********************************************************/
//Function:转换数据到excel
//parm:
//1.adw_data:包括源数据的工具
//2.as_title:excel的题目
//return:1issuccessand-1isfail
//Author:hzh
//date:2003.12.08
/**********************************************************/
IFTHIS.uf_setdatasource(adw_data)1THENRETURN-1
IFNOTIsValid(ids_data)THENRETURN-1
IFids_data.RowCount()<1THENRETURN-1
THIS.uf_initcolumn()
THIS.uf_datatoexcel(as_title)
RETURN1
endfunction
privatefunctionintegeruf_setdatasource(datawindowadw_data);/**********************************************************/
//Function:设置数据存储
//parm:None
//return:
//Author:hzh
//date:2003.12.08
/**********************************************************/
ids_data.dataobject=adw_data.dataobject
//ids_data.uf_setddobject()
RETURNadw_data.ShareData(ids_data)
endfunction
privatefunctionintegeruf_setdatasource(datastoreads_data);
/**********************************************************/
//Function:设置数据存储
//parm:None
//return:
//Author:hzh
//date:2003.12.08
/**********************************************************/
ids_data.dataobject=ads_data.dataobject
//ids_data.uf_setddobject()
RETURNads_data.ShareData(ids_data)
endfunction
privatefunctionintegeruf_datatoexcel(stringas_title);
/**********************************************************/
//Function:转换数据到excel
//parm:
//1.as_title:excel的题目
//return:1issuccessand-1isfail
//Author:hzh
//date:2003.12.08
//Modifier:
//1.2003.12.10byhzh
//Reason:
//1.增添对盘算列的处置
/**********************************************************/
longl_cnt,l_i,l_cols,l_rows
strings_colnum,s_colname,s_range
OLEObjectxlapp,xlsub
//l_cols=long(ids_data.Object.DataWindow.Column.Count)
l_cols=UpperBound(is_columntitle)
l_rows=ids_data.RowCount()
IFNOTIsValid(xlApp)THEN
xlApp=CREATEOLEObject
ENDIF
IFxlApp.ConnectToNewObject("Excel.Application")<0THEN
MessageBox(ga_app.dwmessagetitle,"不克不及毗连EXCEL服务器,请反省你的盘算机中是~r~n"+&
"否安装了MSEXCEL?假设安装,请与程序供给商接洽!",QuesTion!)
RETURN-1
ENDIF
//增添空文档(EXCELtable)
xlApp.Application.Workbooks.add()
xlApp.Application.Visible=TRUE
IFNOTIsValid(xlsub)THEN
xlsub=CREATEOLEObject
ENDIF
//定位到第一格
xlsub=xlapp.Application.ActiveWorkbook.Worksheets
//获得最初列的字母表达式
IFLong(l_cols)>26then
//AA、AB...仍是BA、BB、BC...
inti_colstart,i_colend
i_colstart=Mod(l_cols,26)
i_colend=l_cols/26
s_colnum=""+Char(i_colstart+96)+Char(i_colend+96)+""
ELSE
//是A,B,C...格局
s_colnum=char(l_cols+96)
ENDIF
//题目的设置
xlsub.cells=as_title
xlsub.cells.HorizontalAlignment=3
xlsub.cells.VerticalAlignment=3
xlsub.cells.Font.Size=18
//去向格子
xlsub.range("A1:"+s_colnum+"1").Merge()
FORl_i=1TOl_cols
//设置题目列的名字
xlsub.cells=is_columntitle
NEXT
----------------------------------------------------
//画表格线
//数据行从第二行入手下手
s_range="A2:"+s_colnum+Trim(String(l_rows+2))
xlsub.range(s_range).borders(1).linestyle=1
xlsub.range(s_range).borders(2).linestyle=1
xlsub.range(s_range).borders(3).linestyle=1
xlsub.range(s_range).borders(4).linestyle=1
//将数据写到EXECL
FORl_i=1TOl_cols
FORl_cnt=1TOl_rows
IFis_columntype=columnTHEN
Strings_evaluate
s_evaluate="Evaluate(LookUpDisplay("+is_columnname
s_evaluate+="),"+String(l_cnt)+)
xlsub.cells.FormulaR1C1=ids_data.Describe(s_evaluate)
ELSE
xlsub.cells.FormulaR1C1=&
ids_data.uf_getitemvalue(l_cnt,is_columnname)
ENDIF
xlsub.cells.NumberFormatLocal=is_columnformat
NEXT
NEXT
xlapp.Application.ActiveWorkbook.saved=FALSE
xlApp.DisConnectObject()
IFIsValid(xlApp)THEN
DESTROYxlapp
ENDIF
IFIsValid(xlsub)THEN
DESTROYxlsub
ENDIF
RETURN1
endfunction
publicfunctionstringuf_about();
/**********************************************************/
//Function:用户工具功效先容
//parm:None
//return:先容的文本和对应的大众函数
//Author:hzh
//date:2003.12.08
/**********************************************************/
Strings_func=""
//s_func=super::uf_about()
s_func=s_func+"~r~nvo_excelobjectmembersfunctions:~r~n"
s_func+="1.用户工具功效先容(uf_about)~r~n"+&
"2.程序数据导出为excel表,已重载(uf_toexcel)~r~n"
RETURNs_func
endfunction
privatefunctionintegeruf_initcolumn();
/**********************************************************/
//Function:初始化列信息
//parm:
//return:ofnouse
//Author:hzh
//date:2003.12.08
//Modifier:
//1.2003.12.10byhzh
//Reason:
//1.增添对盘算列的处置
/**********************************************************/
Inti_cnt
Strings_colname,s_datatype
//清空工具
FORi_cnt=1TOUpperBound(is_columnname)
SetNull(is_columnname)
SetNull(is_columntitle)
SetNull(is_columnformat)
SetNull(is_columntype)
ENDFOR
Strings_objects
uo_ds_baseds_excel
IFNOTIsValid(ds_excel)THEN
ds_excel=CREATEuo_ds_base
ENDIF
ds_excel.dataobject=dw_excel_columns
s_objects=ids_data.Describe("DataWindow.Objects")
//将DETAIL地区内的一切可见方针放到ds_excel中,
//并依照object.x属性巨细排序
DOWHILELen(s_objects)>0
Inti_pos
Longl_x
Strings_name,s_type,s_band,s_visible,s_objtype
Strings_objzw,s_zw
i_pos=Pos(s_objects,"~t")
IFi_pos<=0THENi_pos=Len(s_objects)+1
//Object名字
s_name=Left(s_objects,i_pos-1)
s_objects=Mid(s_objects,i_pos+1,Len(s_objects))
//Object数据范例
s_type=Lower(ids_data.Describe(s_name+".coltype"))
//ObjectX坐标
l_x=Long(ids_data.Describe(s_name+".x"))
//Object所属地区
s_band=Lower(ids_data.Describe(s_name+".band"))
//Object是不是可见
s_visible=ids_data.Describe(s_name+".visible")
//Object种别
s_objtype=Lower(ids_data.Describe(s_name+".type"))
//假如object在Detail区,且可见,而且是column或ComputeColumn
IFs_band="detail"ANDs_visible="1"AND&
(s_objtype="column"ORs_objtype="compute")THEN
//Object中文标头,撑持尺度定名
s_objzw=s_name+"_t"
s_zw=ids_data.describe(s_objzw+".text")
//往失落题目中过剩的换行符,空格和引号
s_zw=ds_excel.uf_globalreplace(s_zw,"~n","")
s_zw=ds_excel.uf_globalreplace(s_zw,"","")
s_zw=ds_excel.uf_globalreplace(s_zw,","")
Longl_newrow
l_newrow=ds_excel.InsertRow(0)
ds_excel.SetItem(l_newrow,"colname",s_name)
ds_excel.SetItem(l_newrow,"x",l_x)
ds_excel.SetItem(l_newrow,"coltype",s_type)
ds_excel.SetItem(l_newrow,"coltitle",s_zw)
ds_excel.SetItem(l_newrow,"objtype",s_objtype)
ENDIF
LOOP
//排序,设置到列数组中
ds_excel.SetSort("xa")
ds_excel.Sort()
FORi_cnt=1TOds_excel.RowCount()
is_columnname=Lower(ds_excel.GetItemString(i_cnt,colname))
is_columntitle=ds_excel.GetItemString(i_cnt,coltitle)
is_columntype=ds_excel.GetItemString(i_cnt,objtype)
s_datatype=Left(Lower(ds_excel.GetItemString(i_cnt,coltype)),4)
CHOOSECASEs_datatype
CASEchar,varc,int,long
is_columnformat=G/通用格局
//出格指定日期公用格局为char(10)
s_datatype=Lower(ds_excel.GetItemString(i_cnt,coltype))
IFs_datatype=char(10)THEN
is_columnformat=yyyy""年""m""月""d""日""
ENDIF
CASEdeci
is_columnformat="0.00_"
CASEdate,datetime
is_columnformat=yyyy""年""m""月""d""日""
CASEtime
is_columnformat=h""时""mm""分""ss""秒""
CASEELSE
is_columnformat=G/通用格局
ENDCHOOSE
NEXT
IFIsValid(ds_excel)THEN
DESTROYds_excel
ENDIF
RETURN1
endfunction
onnvo_excel.create
callsuper::create
TriggerEvent(this,"constructor")
endon
onnvo_excel.destroy
TriggerEvent(this,"destructor")
callsuper::destroy
endon
eventconstructor;
IFNOTIsValid(ids_data)THEN
ids_data=CREATEuo_ds_base
ENDIF
endevent
eventdestructor;
IFIsValid(ids_data)THEN
DESTROYids_data
ENDIF
endevent
--------------------------------------------
$PBExportHeader$dw_excel_columns.srd
$PBExportComments$一时得转换工具
release7;
datawindow(units=0timer_interval=0color=16777215processing=1HTMLDW=noprint.documentname=""print.orientation=0print.margin.left=110print.margin.right=110print.margin.top=96print.margin.bottom=96print.paper.source=0print.paper.size=0print.prompt=noprint.buttons=noprint.preview.buttons=nogrid.lines=0)
header(height=68color="536870912")
summary(height=0color="536870912")
footer(height=0color="536870912")
detail(height=76color="536870912")
table(column=(type=char(40)updatewhereclause=noname=coltitledbname="coltitle")
column=(type=char(30)updatewhereclause=noname=colnamedbname="colname")
column=(type=longupdatewhereclause=noname=xdbname="x")
column=(type=char(10)updatewhereclause=noname=objtypedbname="objtype")
column=(type=char(20)updatewhereclause=noname=coltypedbname="coltype")
)
text(band=headeralignment="2"text="Coltype"border="2"color="0"x="718"y="4"height="60"width="361"name=coltype_tfont.face="宋体"font.height="-10"font.weight="400"font.family="0"font.pitch="2"font.charset="134"background.mode="2"background.color="80269524")
text(band=headeralignment="0"text="coltitle"border="2"color="0"x="1088"y="4"height="60"width="434"name=t_1font.face="宋体"font.height="-10"font.weight="400"font.family="0"font.pitch="2"font.charset="134"background.mode="2"background.color="80269524")
text(band=headeralignment="0"text="objtype"border="2"color="0"x="1531"y="4"height="60"width="320"name=t_2font.face="宋体"font.height="-10"font.weight="400"font.family="0"font.pitch="2"font.charset="134"background.mode="2"background.color="80269524")
text(band=headeralignment="2"text="Colname"border="2"color="0"x="9"y="4"height="60"width="457"name=colname_tfont.face="宋体"font.height="-10"font.weight="400"font.family="0"font.pitch="2"font.charset="134"background.mode="2"background.color="80269524")
text(band=headeralignment="2"text="X"border="2"color="0"x="475"y="4"height="60"width="233"name=x_tfont.face="宋体"font.height="-10"font.weight="400"font.family="0"font.pitch="2"font.charset="134"background.mode="2"background.color="80269524")
column(band=detailid=1alignment="0"tabsequence=32766border="2"color="0"x="1088"y="0"height="72"width="434"format=""name=coltitleedit.limit=0edit.case=anyedit.autoselect=yesfont.face="宋体"font.height="-10"font.weight="400"font.family="2"font.pitch="2"font.charset="134"background.mode="2"background.color="16777215")
column(band=detailid=4alignment="0"tabsequence=32766border="2"color="0"x="1531"y="0"height="72"width="320"format=""name=objtypeedit.limit=0edit.case=anyedit.autoselect=yesfont.face="宋体"font.height="-10"font.weight="400"font.family="2"font.pitch="2"font.charset="134"background.mode="2"background.color="16777215")
column(band=detailid=2alignment="0"tabsequence=10border="2"color="0"x="9"y="0"height="72"width="457"format=""name=colnameedit.limit=0edit.case=anyedit.focusrectangle=noedit.autoselect=yesedit.autohscroll=yesfont.face="宋体"font.height="-10"font.weight="400"font.family="2"font.pitch="2"font.charset="134"background.mode="1"background.color="536870912")
column(band=detailid=3alignment="1"tabsequence=20border="2"color="0"x="475"y="0"height="72"width="233"format=""name=xedit.limit=0edit.case=anyedit.focusrectangle=noedit.autoselect=yesedit.autohscroll=yesfont.face="宋体"font.height="-10"font.weight="400"font.family="2"font.pitch="2"font.charset="134"background.mode="1"background.color="536870912")
column(band=detailid=5alignment="0"tabsequence=30border="2"color="0"x="718"y="0"height="72"width="361"format=""name=coltypeedit.limit=0edit.case=anyedit.focusrectangle=noedit.autoselect=yesedit.autohscroll=yesfont.face="宋体"font.height="-10"font.weight="400"font.family="2"font.pitch="2"font.charset="134"background.mode="1"background.color="536870912")
htmltable(border="1")
htmlgen(clientevents="1"clientvalidation="1"clientcomputedfields="1"clientformatting="0"clientscriptable="0"generatejavascript="1")
----------------------------------------------------------
下面的程序Bug列表:
1.
/**********************************************************/
//Function:转换数据到excel
//parm:
//1.as_title:excel的题目
//return:1issuccessand-1isfail
//Author:hzh
//date:2003.12.08
//Modifier:
//1.2003.12.10byhzh
//Reason:
//1.增添对盘算列的处置
/**********************************************************/
longl_cnt,l_i,l_cols,l_rows
strings_colnum,s_colname,s_range
OLEObjectxlapp,xlsub
FORl_i=1TOUpperBound(is_columntitle)
IFIsNull(is_columntitle)THENEXIT
l_cols++
NEXT
2.
函数:uf_initcolumn处置datetime格局不是很好
CASEdate//,datetime
s_datatype=Lower(ds_excel.GetItemString(i_cnt,coltype))
IFs_datatype=datetimeTHEN
is_columnformat=yyyy-m-dh:mm
ELSE
is_columnformat=yyyy""年""m""月""d""日""
ENDIF
3.这个不是毛病,能够增强一下功效
//出格指定日期公用格局为char(10)
s_datatype=Lower(ds_excel.GetItemString(i_cnt,coltype))
IFs_datatype=char(10)THEN
is_columnformat=yyyy""年""m""月""d""日""
ENDIF
//出格指准时间公用格局为char(8)
s_datatype=Lower(ds_excel.GetItemString(i_cnt,coltype))
IFs_datatype=char(8)THEN
is_columnformat=h""时""mm""分""ss""秒""
ENDIF
//出格指定日期工夫公用格局为char(19)
s_datatype=Lower(ds_excel.GetItemString(i_cnt,coltype))
IFs_datatype=char(19)THEN
is_columnformat=yyyy-m-dh:mm
ENDIF
依据代码,只要char(8),10,19才有啊,这是我计划日期,工夫等的公用格局
-----------------------------------------------------------
我再把别的一个帖子傍边中国龙的办法也贴过去,谁人帖子大概因为CSDN汗青帖子办理缘故原由没法乐成增加为FAQ,也很惋惜,人人假如有其他好的办法也请一并贴下去:
llitcwl(中国龙):
//====================================================================
//Functionuf_data2excel在u_data2wordinheritedfromnonvisualobject
//--------------------------------------------------------------------
//申明:将数据倒进excel中,撑持盘算列及显现格局,请求在题头的盘算列要写tag值
//--------------------------------------------------------------------
//参数1:datawindowadw
//申明:数据窗口
//--------------------------------------------------------------------
//前往:(INTEGER)乐成前往1,不乐成前往0
//--------------------------------------------------------------------
//作者:cwl日期:2002.03.18
//====================================================================
//变动日记:020515到场对交织表倒出的撑持(次要是修正了保留题头部分)
constantintegerppLayoutBlank=12
OLEObjectole_object
ole_object=CREATEOLEObject
integerli_ret,li_crosstab=0
longll_colnum,ll_rownum
stringls_value
stringls_objects,ls_obj,ls_objs[],ls_objtag[]
longll_pos,ll_len,ll_num=0
//题头区
longll_headnum
stringls_head[],ls_headtag[]
//算计区
longll_sumnum,i=1,startpos=1,endpos,li_pos
stringls_sum[],ls_sumtag[],ls_bind,token[],list,ls_temp,ls_crosstabcol
n_cst_stringlu_string//PFCstring处置工具
li_ret=ole_object.ConnectToObject("","Excel.Application")
IFli_ret0THEN
//假如Excel还没有翻开,则新建。
li_ret=ole_object.ConnectToNewObject("Excel.Application")
ifli_ret0then
MessageBox(OLE毛病,OLE没法毗连!毛病号:+string(li_ret))
return0
endif
ole_object.Visible=false//不成见
ENDIF
ifadw.Object.DataWindow.Processing=4then//交织表处置
adw.Object.DataWindow.Crosstab.StaticMode=true//将数据静态化
li_crosstab=1
endif
pointeroldpointer
oldpointer=SetPointer(HourGlass!)
//新增一个事情区
ole_object.Workbooks.Add
ls_objects=trim(adw.Describe(datawindow.Objects))
list=ls_objects
EndPos=pos(list,~t,StartPos)
//失掉工具列表
Dowhile(EndPos>0)
token=Mid(list,StartPos,EndPos-StartPos)
i++
StartPos=EndPos+1
EndPos=pos(list,~t,StartPos)
LOOP
token=Mid(list,StartPos)
ll_rownum=UpperBound(token)
fori=1toll_rownum
ls_obj=token
ifls_obj=titlethenmessagebox(,adw.Describe(ls_obj+.type))
iflower(adw.Describe(ls_obj+.type))=columnor&
lower(adw.Describe(ls_obj+.type))=computethen
ls_bind=lower(adw.Describe(ls_obj+.band))
ifls_bind=detailthen
ll_num+=1
ls_objs=ls_obj
ifli_crosstab=0then//一样平常处置
ls_objtag=adw.Describe(ls_obj+_t.text)
elseifli_crosstab=1then//交织表处置
li_pos=lu_string.of_lastpos(ls_obj,_,len(ls_obj))//找出最初一次呈现_的地位
ifli_pos=0or(notisnumber(mid(ls_obj,li_pos+1)))then//不是交织列
ls_objtag=adw.Describe(ls_obj+_t.text)
else
ls_temp=mid(ls_obj,li_pos)
ls_crosstabcol=mid(ls_obj,1,li_pos-1)//掏出交织列名
//messagebox(,ls_crosstabcol+,,,,+ls_temp)
ls_objtag=adw.Describe(ls_crosstabcol+"_t"+ls_temp+".Text")//掏出交织表的题头
endif
endif
elseif(ls_bind=summary)then
ll_sumnum+=1
ls_sum=ls_obj
ls_sumtag=adw.Describe(ls_obj+.tag)
else
ll_headnum+=1
ls_head=ls_obj
ls_headtag=adw.Describe(ls_obj+.tag)
endif
endif
next
//失掉数据窗口数据的列数与行数(行数应当是数据行数+2)
ll_colnum=ll_num
ll_rownum=adw.rowcount()+2
stringcolumn_name
stringls_colname
integerj,k
//写题头
fori=1toll_headnum
ls_value=ls_headtag
ifls_value?then
ole_object.cells(1,(i-1)*2+1).value=ls_value
endif
column_name=ls_head
ls_value=this.uf_getdata(adw,column_name,1)
ole_object.cells(1,(i)*2).value=ls_value
next
//写开头
fori=1toll_sumnum
ls_value=ls_sumtag
ifls_value?then
ole_object.cells(ll_rownum+1,(i-1)*2+1).value=ls_value
endif
column_name=ls_sum
ls_value=this.uf_getdata(adw,column_name,1)
ole_object.cells(ll_rownum+1,(i)*2).value=ls_value
next
//写题目
fori=1toll_colnum
//失掉题目头的名字
ls_value=ls_objtag
ole_object.cells(2,i).value=ls_value
next
//写数据
fori=3toll_rownum
forj=1toll_colnum
column_name=ls_objs
ls_value=this.uf_getdata(adw,column_name,i-2)
ole_object.cells(i,j).value=ls_value
next
next
SetPointer(oldpointer)
ole_object.Visible=True
ole_object.disconnectobject()
DESTROYole_object
return1
//====================================================================
//Functionuf_getdata在u_data2wordinheritedfromnonvisualobject
//--------------------------------------------------------------------
//申明:失掉一个数据窗口列及盘算列的正确显现值
//--------------------------------------------------------------------
//参数1:datawindowdw_1
//申明:
//参数2:stringcol
//申明:工具名
//参数3:integerrow
//申明:行
//--------------------------------------------------------------------
//前往:(STRING)值
//--------------------------------------------------------------------
//作者:cwl日期:2002.03.18
//====================================================================
stringls_edittype,ls_value,ls_format
integerid
ls_edittype=lower(dw_1.Describe(col+".Edit.Style"))//失掉主笔作风
choosecasels_edittype
caseddlb,dddw//应当失掉显现值
ls_value=dw_1.describe("Evaluate(LookUpDisplay("+col+"),"+string(row)+")")
caseelse
id=long(dw_1.Describe(col+".id"))
ls_format=dw_1.Describe(col+".Format")
ifmid(ls_format,1,1)=[orls_format=?orls_format=then//不作格局处置
ifid=0then//盘算列
ls_value=dw_1.Describe("Evaluate(~""+dw_1.Describe(col+.expression)&
+"~","+string(row)+")")
else
ls_value=string(dw_1.object.data)
endif
else
ifid=0then//盘算列
ls_value=string(dw_1.Describe("Evaluate("+dw_1.Describe(col+.expression)&
+","+string(row)+")"),ls_format)
else
ls_value=string(dw_1.object.data,ls_format)
endif
endif
endchoose
ifisnull(ls_value)thenls_value=
returnls_value
大概间接存成html文件
----------------------------------------------------------
持续呼应,这是之前一名仁兄的代码:
/**********************************************************/
/*函数称号:uf_dwsaveas_excel
功效:将数据窗口数据导出EXCEL文件,并将EXCEL文件默许英文题目交换成中文。
参数:datawindowdatawin,为用户要导出数据窗口的数据窗口控件名
前往值:integer1,success;-1,error
流程形貌:先用saveasAscii()倒出为excel文件,再交换表头为中文名
计划人:yanhui2003年11月
修正人:叶文林2004.4.8
缘故原由:为进步程序的可读性作了大批的修正(如:增添正文、改动排版作风等)*/
/**********************************************************/
/***************以下程序将导出为EXCEL文档******************/
integerli_rtn,ii,li_asc
stringls_name,ls_pathname
booleanlb_exist
ifdatawin.RowCount()<1then
MessageBox("提醒信息","请先检索数据再导出至Excel!")
return-1//error
endif
li_rtn=GetFileSaveName("保留文件",ls_pathname,ls_name,"xls","Excel文件(*.xls),*.xls")
ifli_rtn=1then
lb_exist=FileExists(ls_pathname)
IFlb_existTHEN
li_rtn=MessageBox("保留",ls_pathname+"已存在,是不是掩盖?",Exclamation!,YesNo!)
endif
ifli_rtn=1then
//当文件存在用户选择掩盖,或是文件本就不存在时。注重变量li_rtn
li_rtn=datawin.SaveAsAscii(ls_pathname)
ifli_rtn=1then
//MessageBox("提醒信息","导出数据乐成!")
else
MessageBox("毛病信息","导出数据失利!")
return-1//error
endif
else
return-1//error
endif
else
return-1
endif
/**********以下程序将导出的EXCEL英文题目交换为汉字*********/
longnumcols,numrows,c,r
OLEObjectxlapp,xlsub
intret
numcols=long(datawin.Object.DataWindow.Column.Count)
numrows=datawin.RowCount()
//发生oleobject的实例
xlApp=CreateOLEObject
//毗连ole工具
ret=xlApp.ConnectToNewObject("Excel.Sheet")
ifret<0then
MessageBox("毗连失利!","毗连到EXCEL失利,请确认您的体系是不是已安装EXCEL!~r~n"&
+"毛病代码:"+string(ret))
return-1
endif
//翻开EXCEL文件
xlApp.Application.Workbooks.Open(ls_pathname)
////使文件可见
//xlApp.Application.Visible=true
//失掉举动事情表的援用,改良程序功能
xlsub=xlapp.Application.ActiveWorkbook.Worksheets
stringls_colname,ls_text,ls_modistr,ls_col
//取字段名变动为对应的文本text值
FORc=1tonumcols
ls_col="#"+string(c)+".name"
ls_colname=datawin.describe(ls_col)
ls_modistr=ls_colname+"_t.text"
ls_text=datawin.describe(ls_modistr)
xlsub.cells=ls_text
NEXT
xlApp.DisConnectObject()
Destroyxlapp
MessageBox("提醒信息","导出数据乐成!")
return1//success
--------------------------------------------------------------
保藏的一个导出为excel的例子
(撑持导出分组带、算计带,而且撑持多层嵌套报表导出,基础是所见及所得)
///////////////////////////////////////////////////////////////////////////
//
//Parameters:ad_dw:datawindow
//as_file:filename
//Returns:true/false:boolean
//Description:Savethedatawindowasaexcelfile.
//
///////////////////////////////////////////////////////////////////////////
//author:purplekite
//date:2003-01-23
///////////////////////////////////////////////////////////////////////////
SetPointer(HourGlass!)
//declarethelocalvariables
longi,j,li_pos
stringls_objects,ls_obj,ls_text,ls_err,ls_sql
datastorelds_saveas//导出数据窗
datastorelds_sort//取得依据object.x排序的(band=detailandvisible=1)的column/compute
booleanlb_return//前往值
stringls_pbver//pb版本信息
environmentenv//情况变量
getenvironment(env)
ls_pbver=string(env.pbmajorrevision)
//创立排序列datastore
lds_sort=createdatastore
ls_sql=column=(type=char(1)name=ztextdbname="ztext")+~r~n+&
column=(type=char(1)name=zcoldbname="zcol")+~r~n+&
column=(type=longname=zxdbname="zx")+~r~n
ls_sql=release+ls_pbver+;~r~ntable(+ls_sql+)
lds_sort.create(ls_sql,ls_err)
iflen(ls_err)>0then
lb_return=false
gotolab1
endif
//筹办数据====================================================
//allcontrols
ls_objects=ad_dw.Describe("datawindow.objects")
//按~t地位作判别入手下手轮回
dowhile(pos(ls_objects,"~t")>0)
li_pos=pos(ls_objects,"~t")
ls_obj=left(ls_objects,li_pos-1)
ls_objects=right(ls_objects,len(ls_objects)-li_pos)
//(columnorcompute)atdetailandvisible
IF(ad_dw.Describe(ls_obj+".type")="column"or&
ad_dw.Describe(ls_obj+".type")="compute")AND&
(ad_dw.Describe(ls_obj+".band")="detail")AND&
(ad_dw.Describe(ls_obj+".visible")="1")THEN
ls_text=ad_dw.describe(ls_obj+_t.text)
ifls_text!andls_text?then
lds_sort.insertrow(0)
lds_sort.setitem(lds_sort.rowcount(),ztext,ls_text)
lds_sort.setitem(lds_sort.rowcount(),zcol,ls_obj)
lds_sort.setitem(lds_sort.rowcount(),zx,long(ad_dw.describe(ls_obj+.x)))
endif
ENDIF
loop
//thelastcontrol
ls_obj=ls_objects
IF(ad_dw.Describe(ls_obj+".type")="column"or&
ad_dw.Describe(ls_obj+".type")="compute")AND&
(ad_dw.Describe(ls_obj+".band")="detail")AND&
(ad_dw.Describe(ls_obj+".visible")="1")THEN
ls_text=ad_dw.describe(ls_obj+_t.text)
ifls_text!andls_text?then
lds_sort.insertrow(0)
lds_sort.setitem(lds_sort.rowcount(),ztext,ls_text)
lds_sort.setitem(lds_sort.rowcount(),zcol,ls_obj)
lds_sort.setitem(lds_sort.rowcount(),zx,long(ad_dw.describe(ls_obj+.x)))
endif
ENDIF
//假如没有列则跳出
iflds_sort.rowcount()<1thengotolab1
//依据object.x排序
lds_sort.setsort(zxA)
lds_sort.sort()
//创立导出datastore
lds_saveas=createdatastore
ls_sql=
fori=1tolds_sort.rowcount()
ls_obj=lds_sort.getitemstring(i,zcol)
ls_sql+=column=(type=char(1)dbname="+ls_obj+")+~r~n
next
ls_sql=release+ls_pbver+;~r~ntable(+ls_sql+)
lds_saveas.create(ls_sql,ls_err)
iflen(ls_err)>0then
lb_return=false
gotolab1
endif
//向lds_saveas中写数据
fori=1toad_dw.rowcount()
yield()//开释动静行列,假如数据量较年夜,可使用这个函数
lds_saveas.insertrow(0)
forj=1tolds_sort.rowcount()
ls_obj=lds_sort.getitemstring(j,zcol)
ifad_dw.describe(ls_obj+.type)=columnthen
ls_text=ad_dw.describe(evaluate(~LookUpDisplay(+ls_obj+)~,+string(i)+))
else
ls_text=ad_dw.describe(evaluate(~+ls_obj+~,+string(i)+))
endif
lds_saveas.setitem(i,j,ls_text)
next
next
lds_saveas.insertrow(1)
fori=1tolds_sort.rowcount()
lds_saveas.setitem(1,i,lds_sort.getitemstring(i,ztext))
next
//筹办数据终了====================================================
//saveasdatawindow
lb_return=(lds_saveas.saveas(as_file,excel!,false)=1)
lab1:
destroylds_sort
destroylds_saveas
SetPointer(Arrow!)
returnlb_return
根据Ambrose所说,Sakila来自一种叫SiSwati的斯威士兰方言,也是在Ambrose的家乡乌干达附近的坦桑尼亚的Arusha的一个小镇的名字。 where子句的作用是在对查询结果进行分组前,将不符合where条件的行去掉,即在分组之前过滤数据,条件中不能包含聚组函数,使用where条件显示特定的行。 你觉得我的非分区索引无法对起子分区,你可以提醒我一下呀!没有任何的提醒,直接就变成了非分区表。不知道这算不算一个bug。大家也可以试试。 这是一个不错的新特性。虽然索引的附加字段没有索引键值效率高,但是相对映射到数据表中效率还是提高了很多。我做过试验,在我的实验环境中会比映射到表中提高30%左右的效率。 代替了原来VB式的错误判断。比Oracle高级不少。 呵呵,这就是偶想说的 其实可以做一下类比,Oracle等数据库产品老早就支持了java编程,而且提供了java池参数作为用户配置接口。但是现在有哪些系统大批使用了java存储过程?!连Oracle自己的应用都不用为什么?! 原来的计算字段其实和虚拟字段很像。只是管理方面好了而已,性能方面提高不多。但是SQL2005提供了计算字段的持久化,这就提高了查询的性能,但是会加重insert和update的负担。OLTP慎用。OLAP可以大规模使用。
页:
[1]