读书人

请问 PB 程序导入Excel里面的内容到数

发布时间: 2013-01-04 10:04:18 作者: rapoo

请教 PB 程序导入Excel里面的内容到数据库
PB 程序导入Excel里面的内容到数据库

有两个按钮 一个为导入按钮,一个保存按钮

给定用户Excel模版,点击导入按钮,将里面模版里面的值往DataWind里面填充
填充完后点击保存,然后对里面的某些字段进行准确性检查,如果准确无误,就保存至数据库
否则提醒用户哪行哪例数据有误

请教各位高手,该怎么做?
[解决办法]
1.建议Excel里第一行为列标题,第二行为数据,可以用我以前写的这个函数,直接导入到数据窗口中

//function integer gf_importfromexcel (datawindow adw_data)

string ls_filename, ls_path
integer li_value
oleobject ole_excel

ole_excel = create oleobject
li_value = ole_excel.connecttonewobject("excel.application")
if li_value <> 0 then
gnv_base.of_message("连接EXCEL失败,请检查")
return -1
end if

if GetFileOpenName("选择文件", ls_filename, ls_path, "excel Files (*.xls), *.xls") <> 1 then
return 1
end if

if len(trim(ls_filename)) <= 0 then
return -1
else
ole_excel.workbooks.open(ls_filename)
clipboard('')
ole_excel.activesheet.cells.copy
choose case adw_data.importclipboard()
case -3
gnv_base.of_message("错误信息:无效的参数,请检查")
return -3
case -4
gnv_base.of_message("错误信息:无效的输入,请检查")
return -4
case else
gnv_base.of_message("恭喜,从" + ls_filename + "中导入数据成功")
return 1
end choose
clipboard("")
ole_excel.quit()
ole_excel.disconnectobject()
destroy ole_excel
end if


2.用DDE或者COM连接excel,把数据逐步写到数据窗口中,然后再检验


3.配置odbc,连接excel文件(把excel当作数据库),然后读取里在的内容,写到数据窗口里
[解决办法]
版主的办法跟我想的一样
[解决办法]
别人给的


PB读取任何格式excel只要指定开始和结束的行列

//从excel文件获得数据

//建立从EXCEL表获取数据的通道

OLEObject ole1


int result ,ll_rtn,i,row,col


string ls_pathname,ls_filename

long ll_firstrow,ll_firstcol
long ll_endrow,ll_endcol


string ls_cell,ls_desc

ole1= CREATE OLEObject

result=ole1.ConnectTonewObject("Excel.application")



if result<>0 then

messagebox("提示!","连接Excel表出错,请重新选择")

return

end if

string ls_word[]

ls_word = {'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'}


//操作员选择要导入数据的EXCEL文件

ll_rtn = getfileopenname('打开文件',ls_pathname,ls_filename,'XLS','EXCEL文件(*.xls),*.xls')

if ll_rtn<>1 then

messagebox("提示!","连接Excel表出错,请重新选择")

return

end if

ole1.workbooks.open(ls_pathname,0,0)

ole1.visible = true

//指定开始行,开始列,结束行,结束列

ll_firstrow=1
ll_firstcol=1

ll_endrow=30

ll_endcol=3


//从用户指定行指定列读取数据到DW.

for row = ll_firstrow to ll_endrow



for col = ll_firstcol to ll_endcol

ls_cell = string(ole1.workbooks[1].worksheets[1].cells(row,col).value)

i = dw_1.insertrow(0)

dw_1.setitem(i,'irow',row)

dw_1.setitem(i,'icol',col)

dw_1.setitem(i,'svalue',ls_cell)

dw_1.setitem(i,'ss',ls_word[col] + string(row) )

ls_desc += ls_word[col] + string(row) +'=' + string(ls_cell) + '~r~n'
next

ls_desc += '~r~n'
next

mle_1.text = ls_desc

ole1.visible = false

ole1.workbooks.close()

ole1.Quit()

ole1.DisconnectObject()
//断开与OLE的连接

destroy ole1



[解决办法]
gnv_base.of_message
应该是版主程序中一个通用的弹出message窗口的函数
楼主可以直接用MessageBox()替换gnv_base.of_message()
[解决办法]
顶楼上几位。。。

读书人网 >PB

热点推荐