pb,如何把字段名也输出到EXCEL表中,我只会把字段下的内容输出,字段名跟着一起输出就不会了 10

请务必提供代码如果可以的话也可以发给我个简单的这样功能的pb程序我的邮箱zyt1050266210@126.com... 请务必提供代码 如果可以的话 也可以发给我个简单的这样功能的pb程序 我的邮箱zyt1050266210@126.com 展开
 我来答
少有人教的那些事
2011-07-05 · TA获得超过8452个赞
知道大有可为答主
回答量:1.1万
采纳率:50%
帮助的人:2103万
展开全部
给你个函数:
参数说明见下面

/*========================================================================*/
// 函数名: gf_dw2excel
// 作用范围: public
/*------------------------------------------------------------------------*/
// 描述: 将数据窗口的数据传递至EXCEL表格中,列数有26列限制(一般情况已经够用了)
/*------------------------------------------------------------------------*/
// 参数:
// [value] datawindow adw_data 需要保存的数据窗口
// [value] string as_reptitle 表格标题
/*------------------------------------------------------------------------*/
// 返回值: LONG
/*------------------------------------------------------------------------*/
// 作者: xiaolihua 日期: 2003-05-20
// 修改: DoItNow 日期: 2003.06.06
/*========================================================================*/

CONSTANT Integer ppLayoutBlank = 12
Pointer oldpointer
OLEObject ole_object
ole_object = CREATE OLEObject
String s_english = "ABCDEFGHIJKMNLOPQRSTUVWXYZ"
Integer li_ret

//////////////////////////////////////////////////////////////////////
//====================================================================
// Script - gf_dw2excel ( datawindow adw_data, string as_reptitle )
// [Reason]: 由于再已经打开EXCEL的情况下,使用连接OLE时有时出错,所以改为
// 直接连接新的OLE 应用。
//--------------------------------------------------------------------
// [MODIFIED By]: DoItNow Date: 2003.06.06
//====================================================================

//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('打开错误','无法连接EXCEL!是否已经安装了EXCEL?错误号:' + String(li_ret))
RETURN 0
END IF
ole_object.Visible = FALSE //ole应用服务是否显示
//END IF

//-------MODIFIED END-------------------------------------------------
//////////////////////////////////////////////////////////////////////

oldpointer = SetPointer(HourGlass!)
ole_object.Workbooks.Add
Long ll_colnum,ll_rownum
String ls_value

String ls_objects,ls_obj,ls_objs[],ls_objtag[],ls_width[]
Long ll_pos,ll_len,ll_num = 0
//Excel表格中的行数为数据窗口行数+2
ll_rownum = adw_data.RowCount() + 2

String ls_colname
Integer i,j
Dec ld_width

ll_colnum = Long(adw_data.Object.DataWindow.Column.Count) //取得字段总数
ls_objtag[1] = "序号"
SetNull(ls_width[1])
i = 1
FOR ll_num = 1 TO ll_colnum
IF adw_data.DESCRIBE("#"+String(ll_num)+".Visible") = "1" THEN //列标志为nun_Visible的不显示
i = i+1
ls_obj = adw_data.DESCRIBE("#"+String(ll_num)+".name") //字段名称的实际存储值
ls_objs[i] = ls_obj
ls_objtag[i] = adw_data.DESCRIBE(ls_obj + "_t.text") //字段名称的显示值
ls_width[i] = adw_data.DESCRIBE(ls_obj + '.width') //每列的宽度
END IF
NEXT

ll_colnum = i //表格列数

//生成总标题
ole_object.Cells(1,1).Value = as_reptitle
ole_object.Range('A1').SELECT
ole_object.Selection.Font.Size = 24
ole_object.Selection.HorizontalAlignment = 3
ole_object.Range('A1:'+Mid(s_english,ll_colnum,1)+'1').select
ole_object.Range('A1:'+Mid(s_english,ll_colnum,1)+'1').Merge

//设置标题栏
FOR i = 1 TO ll_colnum
ls_value = ls_objtag[i]
ole_object.Cells(2,i).Value = ls_value
IF IsNull(ls_width[i]) THEN
ld_width = 12
ELSE
ld_width = Dec(ls_width[i])/35 //why devided by 35 ???
END IF
ole_object.Columns(i).ColumnWidth = ld_width
ole_object.Columns(i).HorizontalAlignment = 3

ole_object.Columns(i).Borders.LineStyle = 1
ole_object.Columns(i).Font.Bold = TRUE
NEXT

//添充实际数据到EXCEL
String column_name,ls_coltype
FOR i = 3 TO ll_rownum
ole_object.Cells(i,1).Font.Bold = FALSE
ole_object.Cells(i,1).Value = i - 2
FOR j = 2 TO ll_colnum
column_name = ls_objs[j]
IF adw_data.DESCRIBE(column_name + '.type') = 'column' THEN
ls_value = adw_data.DESCRIBE("Evaluate('LookupDisplay("+column_name+")',"+String(i - 2)+")")
END IF
IF adw_data.DESCRIBE(column_name + '.type') = 'compute' THEN
ls_value = adw_data.DESCRIBE("Evaluate('" + adw_data.DESCRIBE(column_name + '.expression') + "',"+String(i - 2)+")")
END IF

ls_coltype = adw_data.DESCRIBE(column_name+'.coltype')
IF Pos(Upper(ls_coltype),"CHAR") > 0 THEN //对字符型数据处理
ole_object.Cells(i,j).NumberFormat = "@"
END IF
ole_object.Cells(i,j).Font.Bold = FALSE
ole_object.Cells(i,j).Value = ls_value
NEXT
NEXT

//////////////////////////////////////////////////////////////////////
//====================================================================
// Script - gf_dw2excel ( datawindow adw_data, string as_reptitle )
// [Reason]: 在PB中保存EXCEL文件
//--------------------------------------------------------------------
// [MODIFIED By]: DoItNow Date: 2003.05.28
//====================================================================
string sFileName, sFile
integer value
value = GetFileSaveName("另存为",sFileName, sFile,"xls","Excel文件 (*.xls),*.xls" )
IF value = 1 THEN
ole_object.ActiveWorkbook.saveas(sFileName)
ole_object.Displayalerts = FALSE //关闭在退出EXCEL时的保存提示
ole_object.Quit() //退出EXCEL
ELSE
messagebox("错误","保存文件出错,请手动保存")
ole_object.Visible = TRUE //显示ole应用服务
END IF
//-------MODIFIED END-------------------------------------------------
//////////////////////////////////////////////////////////////////////

SetPointer(oldpointer)
ole_object.DisconnectObject()
DESTROY ole_object
RETURN 1
追问
嗯 这个函数我看过,请问您有试过吗?这段程序是有些错误的。。。
shihaotian601
2011-07-06 · TA获得超过209个赞
知道小有建树答主
回答量:191
采纳率:0%
帮助的人:130万
展开全部
给你个我一直用的

///////////////////////////////////////////////////////////////////////////
//
// Parameters : ad_dw : datawindow
// as_file : file name
// Returns : true/false : boolean
// Description : Save the datawindow as a excel file.
//
///////////////////////////////////////////////////////////////////////////
// author : purplekite
// date : 2003-01-23
///////////////////////////////////////////////////////////////////////////

SetPointer(HourGlass!)

//declare the local variables
long i, j, li_pos
string ls_objects, ls_obj, ls_text, ls_err, ls_sql
datastore lds_saveas //导出数据窗
datastore lds_sort //获得根据 object.x 排序的 (band = detail and visible = 1) 的 column/compute
boolean lb_return //返回值
string ls_pbver,ls_path_old //pb 版本信息
environment env1,env_old //环境变量

string docname, named,as_file
integer value

ls_path_old = GetCurrentDirectory()
value = GetFileSaveName("请输入或选择导出数据的路径和文件名", &
docname, named, "xls", &
"导出文件 (*.xls),*.xls")

as_file=docname
getenvironment(env1)
//GetEnvironment ( environmentinfo )

ls_pbver = string(env1.pbmajorrevision)

//创建排序列 datastore
lds_sort = create datastore
ls_sql = 'column=(type=char(1) name = ztext dbname="ztext" )' + '~r~n' + &
'column=(type=char(1) name = zcol dbname="zcol" )' + '~r~n' + &
'column=(type=long name = zx dbname="zx" )' + '~r~n'
ls_sql = 'release ' + ls_pbver + ';~r~ntable(' + ls_sql + ')'
lds_sort.create(ls_sql, ls_err)
if len(ls_err) > 0 then
lb_return = false
goto lab1
end if

//准备数据====================================================
//all controls
ls_objects = ad_dw.Describe("datawindow.objects")

//按~t位置作判断开始循环
do while (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)
//(column or compute ) at detail and visible
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')
if ls_text <> '!' and ls_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')))
end if
END IF
loop

//the last control
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')
if ls_text <> '!' and ls_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')))
end if
END IF
//如果没有列则跳出
if lds_sort.rowcount() < 1 then goto lab1
//根据 object.x 排序
lds_sort.setsort('zx A')
lds_sort.sort()

//创建导出 datastore
lds_saveas = create datastore
ls_sql = ''
for i = 1 to lds_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)
if len(ls_err) > 0 then
lb_return = false
goto lab1
end if

//向 lds_saveas 中写数据
for i = 1 to ad_dw.rowcount()
yield()//释放消息队列, 如果数据量较大, 可以使用这个函数
lds_saveas.insertrow(0)
for j = 1 to lds_sort.rowcount()
ls_obj = lds_sort.getitemstring(j, 'zcol')
if ad_dw.describe(ls_obj + '.type') = 'column' then
ls_text = ad_dw.describe('evaluate(~'LookUpDisplay(' + ls_obj + ')~', ' + string(i) + ')')
else
ls_text = ad_dw.describe('evaluate(~'' + ls_obj + '~',' + string(i) + ')')
end if
lds_saveas.setitem(i, j, ls_text)
next
next

lds_saveas.insertrow(1)
for i = 1 to lds_sort.rowcount()
lds_saveas.setitem(1, i, lds_sort.getitemstring(i, 'ztext'))
next
//准备数据完毕====================================================

//saveas datawindow
lb_return = (lds_saveas.saveas(as_file, excel5!, false) = 1)

lab1:
destroy lds_sort
destroy lds_saveas

ChangeDirectory( ls_path_old )

SetPointer(Arrow!)
return lb_return
更多追问追答
追问
注释掉的部分仍然不用管吗?有两个错误 没有定义ad_dw 还有是incompatible  type boolean retuurned for function  还有 这些代码都写在哪个事件里 您好人做到底  嘿嘿  谢谢您了
追答
as_dw是传过来的参数啊~函数返回值是boolean型的
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式