拷贝问题???

HELLO6666 2008-03-07 10:17:46
大家都知道,在数据库管理系统中(如各种财务软件,erp),几乎每个界面上都有GRID控件,用于显示数据表。但我目前遇到一个奇怪的问题:如果想把这个erp上的grid控件中的数据拷贝到excel中,结果有的行会出现错行的现象,类似如下:

姓名 年龄 工资
张三 20 1000
李四 21 1100
王二
22 1200
赵六 23 1300

请注意:上表中王二的数据发生了错行。

我现在想,是否可以用pb,或其他程序编一个自已的拷贝函数,然后用他去直接拷贝erp界面上的grid控件中的数据到excel。不知是否可行?
...全文
99 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
dawugui 2008-03-08
  • 打赏
  • 举报
回复
4:调用.

//判断导出的DW中是否有数据
IF dw_export.RowCount() <= 0 THEN
MessageBox("系统提示!" , "请生成数据!")
RETURN
END IF

STRING Ls_FileName1 = "" , Ls_FileName2 = ""
INTEGER Li_Rtn

Li_Rtn = GetFileSaveName("请输入或选择要保存的文件名!" , Ls_FileName1 , Ls_FileName2 , "DBF" , + "DBF Files (*.DBF),*.DBF," + "TXT Files (*.TXT),*.TXT," + "XLS Files (*.XLS),*.XLS")

IF Li_Rtn = 1 THEN
IF FileExists(Ls_FileName1) = TRUE THEN
IF MESSAGEBOX("系统提示!" , "文件已经存在,覆盖吗?" , Question! , YesNo! , 2) = 2 THEN
RETURN
END IF
END IF
CHOOSE CASE RIGHT(Ls_FileName1 , 3)
CASE "DBF"
dw_export.saveas(Ls_FileName1 , dBase3! , TRUE)
CASE "TXT"
dw_export.saveas(Ls_FileName1 , Text! , TRUE)
CASE "XLS"
wf_setcolname(dw_export)
wf_pbtoexcel(Ls_FileName1 , dw_export , "成绩单" , 3 , TRUE)
CASE ELSE
MESSAGEBOX("系统提示!" , "输入或选择文件名出错!")
RETURN
END CHOOSE
MESSAGEBOX("系统提示!" , "数据导出成功!")
END IF
dawugui 2008-03-08
  • 打赏
  • 举报
回复
3

wf_setrange
return string

para integer

------------

//功能:返回Excel列R1C1所对应的Range值
//参数:an_column =>列数
//返回:Excel列Range值

STRING str_columnrc,str_one,str_two
STRING str_letters[26]={'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'}
INTEGER m,n

IF an_column > 256 THEN RETURN ""

IF an_column <= 26 THEN
str_columnrc = str_letters[an_column]
ELSE
m = INT(an_column / 26)
n = mod(an_column , 26)
str_one = str_letters[m]
str_two = str_letters[n]
str_columnrc = str_one+str_two
END IF

RETURN str_columnrc
dawugui 2008-03-08
  • 打赏
  • 举报
回复
2

wf_setcolname

return : (None)

para

adw_datawindow datawindow

------------------

//计算域类型不好用

STRING str_objects,str_object,str_column
LONG lng_pos

str_objects = adw_datawindow.Describe("DataWindow.Objects") + '~t'
lng_pos = pos(str_objects , "~t")

DO WHILE lng_pos > 0
str_object = left(str_objects , lng_pos - 1) //各个对象的名称
str_objects = mid(str_objects , lng_pos + 1)
lng_pos = pos(str_objects , "~t")
//细节区中的列对象及计算域
IF adw_datawindow.Describe(str_object+".band")='detail' AND &
(adw_datawindow.Describe(str_object+".type")='column' OR adw_datawindow.Describe(str_object+".type")='compute') &
AND adw_datawindow.Describe(str_object+".width")>'0' &
AND adw_datawindow.Describe(str_object+".visible")<>'0' THEN
str_column = adw_datawindow.Describe(str_object+'_t.text') //列中文标题
adw_datawindow.Modify(str_object+".dbName='"+str_column+"'")
END IF
LOOP
dawugui 2008-03-08
  • 打赏
  • 举报
回复
自定义三个函数,然后写代码.

1

wf_pbtoexcel

return : integer

para

ac_filename string
adw_datawindow datawindow
ac_title string
an_top integer
abln_line boolean

---------------------
//功能:将数据导成excel文件
//参数:ac_filename =>默认保存的excel文件名
// adw_datawindow =>数据窗口对象
// ac_title =>标题(空字符串则无标题)
// an_top =>从第an_top行开始粘贴主数据(已包括列标题),前an_top-1行给大标题
// abln_line =>主数据是否划线
//返回:0=>失败,1=>成功

STRING str_tmp
LONG lng_rows,lng_columns
INTEGER int_result
pointer oldpointer
oleobject myoleobject


//设置鼠标状态
oldpointer = SetPointer(HourGlass!)

//先将数据复制到剪贴板上
adw_datawindow.saveas('' , Clipboard! , true)

//初始化OLE对象
myoleobject = CREATE OLEObject
int_result = myoleobject.ConnectToNewObject("Excel.Application")
myoleobject.workbooks.Add() //增加工作簿

//粘贴数据
str_tmp="A" + STRING(an_top)
myoleobject.Range(str_tmp).Select() //从第N行开始粘贴主要数据(前N-1行给大标题)
myoleobject.ActiveSheet.Paste()

//得到相应的范围,好画线用
lng_rows = myoleobject.worksheets(1).UsedRange.Rows.Count //行数(相对)
lng_columns = myoleobject.worksheets(1).UsedRange.Columns.Count //列数(相对)
IF lng_columns > 256 THEN lng_columns = 256

//画线
IF abln_line THEN
str_tmp="A" + STRING(an_top) + ":" + wf_setrange(lng_columns) + STRING(lng_rows+an_top - 1)
myoleobject.Range(str_tmp).Select()
myoleobject.Selection.Borders(1).LineStyle = 1 //左边
myoleobject.Selection.Borders(2).LineStyle = 1 //右边
myoleobject.Selection.Borders(3).LineStyle = 1 //上边
myoleobject.Selection.Borders(4).LineStyle = 1 //下边
END IF

//生成大标题
IF an_top > 1 AND len(ac_title) > 0 THEN
myoleobject.Cells(1,1).Value = ac_title
str_tmp="A1:" + wf_setrange(lng_columns) + "1"
myoleobject.Range(str_tmp).Select()
myoleobject.selection.Merge() //合并单元格
myoleobject.selection.HorizontalAlignment =3 //中间对齐
myoleobject.selection.Font.name = "宋体" //字体
myoleobject.selection.Font.size = "12" //大小
myoleobject.selection.Font.Bold =True //加粗
//myoleobject.selection.NumberFormat ="@XXX" //格式
//myoleobject.Range("A3").Formula="=MAX(A1,A2)" //将最大值送入A3单元格
//myoleobject.Columns(1).ColumnWidth=60 //列的宽度
END IF

//保存
myoleobject.activeworkbook.saveas(ac_filename)

//退出
myoleobject.activeworkbook.CLOSE()
myoleobject.Application.quit
myoleobject.DisConnectObject()
DESTROY myoleobject

//恢复鼠标状态
SetPointer(oldpointer)

return 1
HELLO6666 2008-03-08
  • 打赏
  • 举报
回复
谢谢dawugui的回答。但我现在面对的erp,是一个已开发出并在使用的产品,我也不知道它是用什么语言开发的,也没有源码。

1,076

社区成员

发帖
与我相关
我的任务
社区描述
PowerBuilder 相关问题讨论
社区管理员
  • 基础类社区
  • WorldMobile
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧