[求助]PB和EXECL之间的数据转换问题????
最近在学pb,碰到问题了,请大家帮一下!
我想把一个dw中的数据导出到EXECL中,应该怎么做。
还有如果我要把EXECL中的数据导入PB中,应该如何呢?
可以给一个示范的列子吗,谢谢!!!!!!!!
问题点数:0、回复次数:13Top
1 楼workhand(我可憨了...)回复于 2003-11-03 16:53:11 得分 0
http://expert.csdn.net/Expert/topic/2416/2416503.xml?temp=3.225344E-02
有我一段代码Top
2 楼baiyga(E代剑客)回复于 2003-11-03 18:46:39 得分 0
dw_1.saveas("路徑",excel!,false)Top
3 楼ldy(罗大佑)回复于 2003-11-03 18:50:52 得分 0
格式标还准好
上MSDN的OFFICE的EXCEL看看它的方法啊Top
4 楼yjhyn(飘零的花)回复于 2003-11-04 14:07:39 得分 0
终于找到一个了
/*========================================================================*/
// 函数名: 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
Top
5 楼yjhyn(飘零的花)回复于 2003-11-04 14:37:05 得分 0
我现在的问题是有把EXECL,或者是TXT的文件导入到PB中,该任何做呢???
请大家帮忙!!!!!!!!Top
6 楼eyes_huang(eyes)回复于 2003-11-04 15:04:32 得分 0
string docname,named
int return_val
long value
value = GetFileOpenName("打开文件", docname, named,"TXT", "文本文件(*.TXT),*.TXT,DBF文件(*.DBF),*.DBF")
return_val = dw_record.ImportFile(docname)Top
7 楼hsc456(-*笑天天*-)回复于 2003-11-04 15:30:49 得分 0
上樓
對極了Top
8 楼workhand(我可憨了...)回复于 2003-11-04 17:02:18 得分 0
我现在的问题是有把EXECL,或者是TXT的文件导入到PB中,该任何做呢???
请大家帮忙!!!!!!!!
http://expert.csdn.net/Expert/topic/2416/2416503.xml?temp=.5173151
Top
9 楼ActionStone(动感灵石)回复于 2003-11-05 19:16:16 得分 0
顶!现学现用,已经解决了几个实际问题!Top
10 楼qqjj7758(QQJJ)回复于 2003-11-05 19:36:23 得分 0
yeah!Top
11 楼psy2182_cn(编程浪子)回复于 2003-11-06 19:37:52 得分 0
在PB 建个表,记住要有主键,然后导入就可以了!Top
12 楼hellohelloyjw(juan)回复于 2003-11-07 10:04:40 得分 0
主要用SaveAsAscii(docname)函数(对交叉表支持也较好):
string docname, named
integer value
boolean lb,lb_exist
LABEL1:
value = GetFileSaveName("请选择保存文件", docname, named, "doc", &
"Excel Files (*.XLS),*.XLS," )
if value=0 then
return
end if
//文件是否已经存在
lb_exist = FileExists(docname)
IF lb_exist THEN
value = MessageBox("提示", "文件已经存在,是否覆盖原文件!" ,Question!, YesNo!)
END IF
if value<>1 then
goto LABEL1
end if
//使用SaveAsAscii方法
value=dw_view.SaveAsAscii(docname)
if(value=1) then
messagebox("提示","文件已经保存在"+docname+"中!")
else
messagebox("警告","文件保存失败,请重新保存!",Exclamation!)
end ifTop
13 楼Libra_Chen(旗舰-巴巴罗萨)回复于 2003-11-07 11:10:58 得分 0
…………Top




