PB操作Excel详解

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

run("notpad.exe") ////pb 运行记事本
run("calc.exe") ////pb 运行计算器
记住:当我们用PB导出数据到EXCEL时,不管是用Saveas 还是clipboard 它输出的数据是定义了字段类型的列的数据,也就是说,不管列是可见还是不可见,只要该列定义了列
属性,在查询时主缓冲区中该列有数据,则就会导出出来~
用方法得到列名或其他属性也是一样的~及时隐藏了也可以得到
当中间的某列给隐藏时,下次打开后它会显示在末尾的位置,但是用Saveas 输出数据时,不管它是否隐藏,是否改变了位置,它仍可输出数据而且位置还是不变的~
也就是说没有改变数据窗口对象的源,数据窗口对象上显示的列位置只会影响我们在程
序界面上看到的位置,而不会影响它在后台存储的实际位置。

但是这样会改变界面显示的位置,记住,没有改变源
如何用PB程序在excel 画表格边框线,如何改变文字大小
1. 创建Excel 对象
eole=CREATEOBJECT′(
Excel.application ′)
2. 添加新工作簿
eole.Workbooks.add
3. 设置第 3 个工作表为激活工作表
eole.Worksheets( ″sheet3 ″).Activate
4.打开指定工作簿
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=5
9.设置指定行的高度( 单位:磅)
eole.ActiveSheet.Rows(1).RowHeight=1/0.035
( 设定行高为 1 厘米,1 磅=0.035 厘米)
10.在第18 行之前插入分页符
eole.Worksheets( ″Sheet1 ″).Rows(18).PageBreak=1
11.在第 4 列之前删除分页符
eole.ActiveSheet.Columns(4).PageBreak=0
12.指定边框线宽度(Borders 参数如下)
ole.ActiveSheet.Range( ″b3:d3 ″).Borders(2).Weight=3
13.设置四个边框线条的类型
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.035
17.设置页脚到底边距为 3 厘米
eole.ActiveSheet.PageSetup.FooterMargin=3/0.035
18.设置顶边距为 2 厘米
eole.ActiveSheet.PageSetup.TopMargin=2/0.035
19.设置底边距为 4 厘米
eole.ActiveSheet.PageSetup.BottomMargin=4/0.035
20.设置左边距为 2 厘米
veole.ActiveSheet.PageSetup.LeftMargin=2/0.035
21.设置右边距为 2 厘米
eole.ActiveSheet.PageSetup.RightMargin=2/0.035
22.设置页面水平居中
eole.ActiveSheet.PageSetup.CenterHorizontally=.t.
23.设置页面垂直居中
eole.ActiveSheet.PageSetup.CenterVertically=.t.
24.设置页面纸张大小(1 -窄行8 5 11 39 -宽行14 11) eole.ActiveSheet.PageSetup.PaperSize=1
25.打印单元格网线
eole.ActiveSheet.PageSetup.PrintGridlines=.t.
26.拷贝整个工作表
edRange.Copy
27. 拷贝指定区域
eole.ActiveSheet.Range( ″A1:E2″).Copy
28.粘贴
eole.WorkSheet( ″Sheet2 ″).Range( ″A1″).PasteSpecial
29.在第2 行之前插入一行
eole.ActiveSheet.Rows(2).Insert
30.在第2 列之前插入一列
eole.ActiveSheet.Columns(2).Insert
31.设置字体
eole.ActiveSheet.Cells(2,1)= ″黑体″
32.设置字体大小
eole.ActiveSheet.Cells(1,1).Font.Size=25
33.设置字体为斜体
eole.ActiveSheet.Cells(1,1).Font.Italic=.t.
34.设置整列字体为粗体
eole.ActiveSheet.Columns(1).Font.Bold=.t.
35.清除单元格公式
eole.ActiveSheet.Cells(1,4).ClearContents
36.打印预览工作表
eole.ActiveSheet.PrintPreview
37.打印输出工作表
eole.ActiveSheet.PrintOut
38.工作表另为
eole.ActiveWorkbook.SaveAs( ″c:\temp\22.xls ″)
39.放弃存盘
eole.ActiveWorkbook.saved=.t.
40.关闭工作簿
eole.Workbooks.close
41.退出Excel
eole.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:00
6. //==========================================================
7. // 将工作簿filename_s 中的工作表sheetname_s 以新的
8. // 工作表名称sheetname_t ,复制到工作簿filename_t 的最后
9. //==========================================================
10. if not fileexists(filename_s) then
11. messagebox( '' , ' 工作簿【' + filename_s + ' 】(源)不存在' )
12. return false
13. end if
14. if not fileexists(filename_t) then
15. messagebox( '' , ' 工作簿【' + filename_t + ' 】(目标)不存在' )
16. return false
17. end if
18. long ll_val
19. // 声明ole 对象
20. oleobject ole_object_s
21. // 创建ole 对象
22. ole_object_s=create oleobject
23. // 连接到excel
24. ll_val = ole_object_s.connecttonewobject( "excel.application" )
25. if ll_val <> 0 then
26. messagebox( '' , 'ole 无法连接Excel!' )
27. goto error
28. end if
29. // 打开源和目标工作簿
30. ole_object_s.workbooks.open(filename_s)
31. ole_object_s.workbooks.open(filename_t)
32. string ls_t
33. ls_t = filename_t
34. filename_s = of_splitpath(filename_s, 2)
35. filename_t = of_splitpath(filename_t, 2)
36. // 隐藏excel
37. ole_object_s.visible = false
38. ole_object_s.displayalerts = false
39. int n,t
40. int li
41. boolean isexists= false
42. oleobject lworksheet
43. // 判断源工作簿中的工作表是否存在
44. try
45. lworksheet = ole_object_s.Workbooks(filename_s).sheets(sheetname_s)
46. isexists = true
47. catch ( oleruntimeerror er)
48. isexists = false
49. end try
50. if isexists= false then
51. messagebox( '' , ' 工作簿【' + filename_s + ' 】中工作表不存在工作表[' + sheetname_s + ']' )
52. goto error
53. end if
54. // 当目标工作簿中存在sheet 名为sheetname_t 的工作表时,为sheetname_t 增加后缀(1) ,然后再重复进行判断,直到表名不存在
55. isexists = true
56. do while isexists
57. try
58. lworksheet = ole_object_s.Workbooks(filename_t).sheets(sheetname_t)
59. isexists = true
60. sheetname_t += '(1)'
61. catch ( oleruntimeerror er1)
62. isexists = false
63. end try
64. loop
65. // 进行工作表合并(移到目标工作簿的最后)
66. //int li
67. setnull(li)
68. ole_object_s.workbooks(filename_s).Sheets(sheetname_s).copy(li, ole_object_s.workbooks(filename_t).Sheets( long (ole_ob
ject_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_t
71. // 保存目标工作簿
72. isexists = true
73. //ole_object_s.visible = true
74. //ole_object_s.displayalerts = true
75. //messagebox('', '')
76. try
77. ole_object_s.workbooks(filename_t).save()
78. catch ( oleruntimeerror er2)
79. messagebox( ' 提示' , ' 无法保存工作簿【' + filename_t + ' 】' )
80. isexists = false
81. end try
82. if not isexists then goto error
83. // 关闭工作簿
84. ole_object_s.workbooks(filename_s).close
85. ole_object_s.workbooks(filename_t).close
86. // 退出excel
87. ole_object_s.workbooks.close
88. ole_object_s.Application.quit();
89. // 断开连接
90. ole_object_s.disconnectobject();
91. // 注销ole 对象
92. destroy ole_object_s;
93. return true
94. error:
95. ole_object_s.workbooks(filename_s).close
96. ole_object_s.workbooks(filename_t).close
97. ole_object_s.workbooks.close
98. ole_object_s.Application.quit();
99. ole_object_s.disconnectobject();
100. destroy ole_object_s;
101. return false
102.
103.
104. end function
/**********************************************************/
/* 函数名称:uf_dwsaveas_excel
功能:将数据窗口数据导出EXCEL文件,并将EXCEL文件默认英文标题替换成中文。

参数:datawindow datawin ,为用户要导出数据窗口的数据窗口控件名
返回值:integer 1 ,success ;-1 ,error
流程描述:( 原程序) 先用saveas() 倒出为excel 文件,再替换表头为中文名
( 新程序) 直接用saveasAscii() 倒出为excel 文件
原因:为提高程序的可读性作了少量的修改( 如:增加注释、改变排版风格等)
*/
/**********************************************************/
/*************** 以下程序将导出为EXCEL文档******************/
integer li_rtn,ii,li_asc
string ls_name,ls_pathname
boolean lb_exist
if datawin.RowCount()<1 then
MessageBox(" 提示信息"," 请先检索数据再导出至Excel!")
return -1//error
end if
li_rtn=GetFileSaveName(" 保存文件",ls_pathname,ls_name,"xls","Excel 文件(*.xls),*.xls")
if li_rtn=1 then
lb_exist = FileExists(ls_pathname)
IF lb_exist THEN
li_rtn = MessageBox(" 保存", ls_pathname+" 已经存在, 是否覆盖?",Exclamation!, YesNo!)
end if
if li_rtn=1 then
// 当文件存在用户选择覆盖,或是文件本就不存在时。

注意变量li_rtn
li_rtn=datawin.SaveAsAscii(ls_pathname)
if li_rtn=1 then
MessageBox(" 提示信息"," 导出数据成功!")
return 1
else
MessageBox(" 错误信息"," 导出数据失败!")
return -1//error
end if
else
return -1//error
end if
else
return -1
end if
// 在程序中调式没有问题,可以把数据窗口原样的输出,包括中英文,如果你用这个函数
导出来的
也是乱码的话,可能是你的操作系统有问题了
函数SaveAsAscii ()用法:
()函数。

它允许输出数据窗口的可视部分为文本格式,组、交叉报表、计算域等被保存为
输出数据的一部分。

在很多的情况下,我们需要将书局窗口中的数据保存为其他应用程序的格式(比如:MS Excel, Word, email 等). 为此Powerbuilder 提供了SaveAs 函数,然而使SaveAs 保存数据窗口为Execl 格式时有一些缺点,就是它无法保存我们所见到的格式,一些图形、交叉报表、计算
域等等都被丢弃,它仅仅保存了数据窗口buffer 中的数据。

为了输出交叉报表、组、和计算域等等可视的数据,PowerBuilder 6.5 (after build 444) 提供了新的函数解决这些缺陷,
它是:SaveAsAscii ()函数。

它允许输出数据窗口的可视部分为文本格式,组、交叉报表、
计算域等被保存为输出数据的一部分。

下面讨论该函数:
描述:将数据窗口或数据存储中的内容保存为ASCII 文本文件
适用于:数据窗口和DataStore 对象
符号:
dwcontrol.SaveAsAscii ( filename {, separatorcharacter {, quotecharacter {,
lineending } } } )
其中:
dwcontrol 位数据窗口或DataStore 的名字
filename :要保存的文件名;
separatorcharacter (optional) :分割各个数据的字符串,缺省为tab
quotecharacter (optional) :包围值的字符串,缺省为空;
lineending (optional) :放在每行末尾的字符串,缺省为回车character (~r~n)
下面的例子显示将数据窗口中的数据保存到文件monthly.txt, 每个数据以'|' 分割
dw_4.saveasascii("monthly.txt","|")
在数据之间使用分割符是比较好的注意,因为缺省的tab 字符可能会在导入excel 时出问题。

在导入Excel 时他会提示您,您数据中使用何种分割符。

为了导入到Excel, 只需在中Excel 打开文件,您可能会看到一个wizard 窗口定义正确的分割符即可。

下例显示一个用saveasascii ()函数导出的文件,使用SaveAs 函数时是不可能有如此结果的。

PB的dw导出到excel 文件(使用saveasascii )
PB编程收集2007-07-17 11:01:29 阅读264 评论0 字号:大中小订阅
PB的dw导出到excel 文件(使用saveasascii )
/**********************************************************/
/* 函数名称:uf_dwsaveas_excel
功能:将数据窗口数据导出EXCEL文件,并将EXCEL文件默认英文标题替换成中文。

参数:datawindow datawin ,为用户要导出数据窗口的数据窗口控件名
返回值:integer 1 ,success ;-1 ,error
流程描述:先用saveasAscii() 倒出为excel 文件,再替换表头为中文名
设计人:yanhui2003 年11 月
修改人:叶文林2004.4.8
原因:为提高程序的可读性作了少量的修改( 如:增加注释、改变排版风格等)*/
/**********************************************************/
/*************** 以下程序将导出为EXCEL文档******************/
integer li_rtn,ii,li_asc
string ls_name,ls_pathname
boolean lb_exist
if datawin.RowCount()<1 then
MessageBox(" 提示信息"," 请先检索数据再导出至Excel!")
return -1//error
end if
li_rtn=GetFileSaveName(" 保存文件",ls_pathname,ls_name,"xls","Excel 文件
(*.xls),*.xls")
if li_rtn=1 then
lb_exist = FileExists(ls_pathname)
IF lb_exist THEN
li_rtn = MessageBox(" 保存", ls_pathname+" 已经存在, 是否覆盖?",Exclamation!, YesNo!) end if
if li_rtn=1 then
// 当文件存在用户选择覆盖,或是文件本就不存在时。

注意变量li_rtn
li_rtn=datawin.SaveAsAscii(ls_pathname)
if li_rtn=1 then
//MessageBox(" 提示信息"," 导出数据成功!")
else
MessageBox(" 错误信息"," 导出数据失败!")
return -1//error
end if
else
return -1//error
end if
else
return -1
end if
/********** 以下程序将导出的EXCEL英文标题替换为汉字*********/
long numcols , numrows , c, r
OLEObject xlapp , xlsub
int ret
numcols = long(datawin.Object.DataWindow.Column.Count)
numrows = datawin.RowCount()
// 产生oleobject 的实例
xlApp = Create OLEObject
// 连接ole 对象
ret = xlApp.ConnectToNewObject( "Excel.Sheet" )
if ret < 0 then
MessageBox(" 连接失败!"," 连接到EXCEL失败, 请确认您的系统是否已经安装EXCEL!~r~n"& +" 错误代码:"+string(ret))
return -1
end if
// 打开EXCEL文件
xlApp.Application.Workbooks.Open(ls_pathname)
//// 使文件可见
//xlApp.Application.Visible = true
// 得到活动工作表的引用, 改善程序性能
xlsub = xlapp.Application.ActiveWorkbook.Worksheets[1]
string ls_colname,ls_text,ls_modistr,ls_col
// 取字段名更改为对应的文本text 值
FOR c=1 to numcols
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[1,c]=ls_text
NEXT
xlApp.DisConnectObject()
Destroy xlapp
MessageBox(" 提示信息"," 导出数据成功!")
return 1//success
PB的datawindow 导出到excel 文件
/* 函数名称:uf_dwsaveas_excel
功能:将数据窗口数据导出EXCEL文件,并将EXCEL文件默认英文标题替换成中文。

参数:datawindow datawin ,为用户要导出数据窗口的数据窗口控件名
返回值:integer 1 ,success ;-1 ,error
流程描述:先用saveasAscii() 倒出为excel 文件,再替换表头为中文名
原因:为提高程序的可读性作了少量的修改( 如:增加注释、改变排版风格等)*/
/**********************************************************/
/*************** 以下程序将导出为EXCEL文档******************/
integer li_rtn,ii,li_asc
string ls_name,ls_pathname
boolean lb_exist
if datawin.RowCount()<1 then
MessageBox(" 提示信息"," 请先检索数据再导出至Excel!")
return -1//error
end if
li_rtn=GetFileSaveName(" 保存文件",ls_pathname,ls_name,"xls","Excel 文件
(*.xls),*.xls")
if li_rtn=1 then
lb_exist = FileExists(ls_pathname)
IF lb_exist THEN
li_rtn = MessageBox(" 保存", ls_pathname+" 已经存在, 是否覆盖?",Exclamation!, YesNo!) end if
if li_rtn=1 then
// 当文件存在用户选择覆盖,或是文件本就不存在时。

注意变量li_rtn
li_rtn=datawin.SaveAsAscii(ls_pathname)
if li_rtn=1 then
//MessageBox(" 提示信息"," 导出数据成功!")
else
MessageBox(" 错误信息"," 导出数据失败!")
return -1//error
end if
else
return -1//error
end if
else
return -1
end if
/********** 以下程序将导出的EXCEL英文标题替换为汉字*********/
long numcols , c, r
OLEObject xlapp , xlsub
int ret
numcols = long(datawin.Object.DataWindow.Column.Count)
// 产生oleobject 的实例
xlApp = Create OLEObject
// 连接ole 对象
ret = xlApp.ConnectToNewObject( "Excel.Sheet" )
if ret < 0 then
MessageBox(" 连接失败!"," 连接到EXCEL失败, 请确认您的系统是否已经安装EXCEL!~r~n"& +" 错误代码:"+string(ret))
return -1
end if
// 打开EXCEL文件
xlApp.Application.Workbooks.Open(ls_pathname)
//// 使文件可见
//xlApp.Application.Visible = true
// 得到活动工作表的引用, 改善程序性能
xlsub = xlapp.Application.ActiveWorkbook.Worksheets[1]
string ls_colname,ls_text,ls_modistr,ls_col
// 取字段名更改为对应的文本text 值
FOR c=1 to numcols
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[1,c]=ls_text
NEXT
xlApp.DisConnectObject()
Destroy xlapp
MessageBox(" 提示信息"," 导出数据成功!")
return 1//success
PB的datawindow 导出到excel 文件(支持计算列和显示格式,中国龙)
[ seeyou 发表于2005-8-30 10:40:00 ]
//====================================================================
// [PUBLIC] Function uf_data2excel 在u_data2word inherited from nonvisualobject
//--------------------------------------------------------------------
// 说明: 将数据倒入excel 中, 支持计算列及显示格式, 要求在题头的计算列要写tag 值
//--------------------------------------------------------------------
// 参数1:[value] datawindow adw
// 说明: 数据窗口
//--------------------------------------------------------------------
// 返回:(INTEGER) 成功返回1, 不成功返回0
//--------------------------------------------------------------------
// 作者:cwl 日期: 2002.03.18
//==================================================================== // 变更日志:020515 加入对交叉表倒出的支持( 主要是修改了保存题头部分)
constant integer ppLayoutBlank = 12
OLEObject ole_object
ole_object = CREATE OLEObject
integer li_ret,li_crosstab=0
long ll_colnum,ll_rownum
string ls_value
string ls_objects,ls_obj,ls_objs[],ls_objtag[]
long ll_pos,ll_len,ll_num = 0
// 题头区
long ll_headnum
string ls_head[],ls_headtag[]
// 合计区
long ll_sumnum,i=1,startpos=1,endpos,li_pos
string ls_sum[],ls_sumtag[],ls_bind,token[],list,ls_temp,ls_crosstabcol
n_cst_string lu_string //PFC string 处理对象
li_ret = ole_object.ConnectToObject("","Excel.Application")
IF li_ret <> 0 THEN
// 如果Excel 还没有打开,则新建。

li_ret = ole_object.ConnectToNewObject("Excel.Application")
if li_ret <> 0 then
MessageBox('OLE 错误','OLE 无法连接! 错误号:' + string(li_ret))
return 0
end if
ole_object.Visible = false// 不可见
END IF
if adw.Object.DataWindow.Processing='4' then // 交叉表处理
adw.Object.DataWindow.Crosstab.StaticMode='true'// 将数据静态化
li_crosstab=1
end if
pointer oldpointer
oldpointer = SetPointer(HourGlass!)
// 新增一个工作区
ole_object.Workbooks.Add
ls_objects = trim(adw.Describe('datawindow.Objects'))
list=ls_objects
EndPos= pos(list, '~t', StartPos)
// 得到对象列表
Do while ( EndPos > 0 )
token[i] = Mid(list, StartPos, EndPos - StartPos)
i ++
StartPos = EndPos + 1
EndPos= pos(list, '~t', StartPos)
LOOP
token[i] = Mid(list, StartPos)
ll_rownum=UpperBound(token)
for i=1 to ll_rownum
ls_obj = token[i]
if ls_obj='title' then messagebox('',adw.Describe(ls_obj + '.type'))
if lower(adw.Describe(ls_obj + '.type')) = 'column' or &
lower(adw.Describe(ls_obj + '.type')) = 'compute' then
ls_bind=lower(adw.Describe(ls_obj + '.band'))
if ls_bind = 'detail' then
ll_num += 1
ls_objs[ll_num] = ls_obj
if li_crosstab=0 then // 一般处理
ls_objtag[ll_num] = adw.Describe(ls_obj + '_t.text')
elseif li_crosstab=1 then // 交叉表处理
'_' 的位置li_pos=lu_string.of_lastpos(ls_obj,'_',len(ls_obj))// 找出最后一次出现
if li_pos=0 or (not isnumber(mid(ls_obj,li_pos+1))) then // 不是交叉列
ls_objtag[ll_num] = 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[ll_num]=adw.Describe( ls_crosstabcol + "_t"+ls_temp+".Text" )// 取出交叉表的题头
end if
end if
elseif (ls_bind = 'summary') then
ll_sumnum += 1
ls_sum[ll_sumnum] = ls_obj
ls_sumtag[ll_sumnum] = adw.Describe(ls_obj + '.tag')
else
ll_headnum += 1
ls_head[ll_headnum] = ls_obj
ls_headtag[ll_headnum] = adw.Describe(ls_obj + '.tag')
end if
end if
next
// 得到数据窗口数据的列数与行数(行数应该是数据行数+ 2 )ll_colnum = ll_num
ll_rownum = adw.rowcount() + 2
string column_name
string ls_colname
integer j,k
// 写题头
for i=1 to ll_headnum
ls_value = ls_headtag[i]
if ls_value<>'?' then
ole_object.cells(1,(i - 1)*2+1).value = ls_value
end if
column_name = ls_head[i]
ls_value=this.uf_getdata(adw,column_name,1)
ole_object.cells(1,(i)*2).value = ls_value
next
// 写结尾
for i=1 to ll_sumnum
ls_value = ls_sumtag[i]
if ls_value<>'?' then
ole_object.cells(ll_rownum+1,(i - 1)*2+1).value = ls_value
end if
column_name = ls_sum[i]
ls_value=this.uf_getdata(adw,column_name,1)
ole_object.cells(ll_rownum+1,(i)*2).value = ls_value
next
// 写标题
for i = 1 to ll_colnum
// 得到标题头的名字
ls_value = ls_objtag[i]
ole_object.cells(2,i).value = ls_value
next
// 写数据
for i = 3 to ll_rownum
for j = 1 to ll_colnum
column_name = ls_objs[j]
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()
DESTROY ole_object
return 1
//====================================================================
// [PUBLIC] Function uf_getdata 在u_data2word inherited from nonvisualobject
//--------------------------------------------------------------------
// 说明: 得到一个数据窗口列及计算列的准确显示值
//--------------------------------------------------------------------
// 参数1:[value] datawindow dw_1
// 说明:
// 参数2:[value] string col
// 说明: 对象名
// 参数3:[value] integer row
// 说明: 行
//--------------------------------------------------------------------
// 返回:(STRING) 值
//--------------------------------------------------------------------
// 作者:cwl 日期: 2002.03.18
//==================================================================== string ls_edittype,ls_value,ls_format
integer id
ls_edittype=lower(dw_1.Describe(col+".Edit.Style"))// 得到编缉风格
choose case ls_edittype
case 'ddlb','dddw'// 应该得到显示值
ls_value="/blog/dw_1.describe(" "Evaluate('LookUpDisplay("+col+")
',"+string(row)+" )")
case else
id=long(dw_1.Describe(col+".id"))
ls_format=dw_1.Describe(col+".Format")
if mid(ls_format,1,1)='[' or ls_format='?' or ls_format='' then // 不作格式处理if id=0 then // 计算列
ls_value="/blog/dw_1.Describe(""Evaluate(~"" + dw_1.Describe(col +
'.expression')&
+ "~","+string(row)+")")
else
ls_value="/blog/string(dw_1.object.data[row,id])
end" if
else
if id=0 then // 计算列
ls_value="/blog/string(dw_1.Describe(""Evaluate('" + dw_1.Describe(col +
'.expression')&
+ "',"+string(row)+")"),ls_format)
else
ls_value="/blog/string(dw_1.object.data[row,id],ls_format) end" if
end if
end choose
if isnull(ls_value) then ls_value=''
return ls_value。

相关文档
最新文档