将Excel文件加载到Powerbuilder [英] Load Excel File To Powerbuilder
问题描述
我具有用于buttonclicked事件的代码,以将excel和文本文件加载到powerbuilder,并且excel数据未复制,即ll_return_xls< = 0,因此当我要将其加载到db时,由于没有任何价值,我将收到错误消息或其中的数据...问题是我从文本文件中获取数据,而不是从excel文件中获取数据...任何帮助将不胜感激
long ll_return
long ll_return_xls
OLEObject excel
如果rb_file.checked然后
IF dwo.Name = b_browse_meters然后//单击文本浏览按钮
ll_return = GetFileOpenName(选择仪表文件,is_fullname,is_filename, TXT和
文本文件(* .txt),*。txt)$ ll
$ b如果ll_return< 1然后
gnv_msg.f_mensaje( EX28,,,OK!)
返回
结尾,如果
END IF //浏览按钮单击
END IF
IF dwo.Name = b_browse_meters_xls然后//单击Excel的浏览按钮
ll_return_xls = GetFileOpenName( Select Meter File,is_fullname,is_filename , XLS和&
Excel文件(* .xls),*。xls)
如果ll_return_xls< 1然后
gnv_msg.f_mensaje( EX28,,,OK!)
返回
结尾,如果
excel =创建oleobject
excel.ConnectToNewObject( excel.application)
excel.visible = false
excel.workbooks.open(is_fullname)
excel.Range( A1:A2)。选择
excel.ActiveCell.CurrentRegion.Select()
ClipBoard('')
excel.Selection.Copy()
ClipBoard('')
excel.ActiveWorkbook.Close
excel.Disconnectobject()
销毁excel
END IF // //单击浏览按钮
和用于加载文本和excel数据的函数
long ll_return,ll_arr_len,ll_loop,ll_indx, ll_pass = 0
,则返回
整数li_rc,li_file_nbr,li_fr_rc //文件读取返回码
字符串ls_file,ls_line,ls_msg
字符串lsa_meters [],lsa_meter_pass []
字符串ls_meters
long ll_total_valid,ll_total_aparatos
SetPointer(小时玻璃!)
如果IsValid(w_progbar)然后关闭(w_progbar)
openw ithparm(w_progbar,正在上传文件数据...)
w_progbar.uo_progress_bar.set_position(10)
li_rc =成功
ll_total_aparatos = 0
ll_total_valid = 0
//如果li_rc =成功则打开文件
然后
ls_file = is_fullname
li_file_nbr = FileOpen(ls_file,LineMode!)
如果IsNull(li_file_nbr)或li_file_nbr< 1然后
li_rc = NO_ACTION
结尾,如果
结尾,如果
// //读取文件,将序列号存储到数组lsa_meters []
如果li_rc = SUCCESS然后//打开文件
ll_indx = 0
做ll_indx> -1和li_rc =成功
li_fr_rc = FileRead(li_file_nbr,ls_line)
选择大小写li_fr_rc
大小写为> 0
ll_indx ++
lsa_meters [ll_indx] = ls_line
情况0,-100
ll_indx = -1
情况-1
li_rc =失败
gnv_msg.f_mensaje( EX21,,,OK!)
结束选择
循环
如果li_rc = SUCCESS然后//文件读好
ll_arr_len = UpperBound(lsa_meters)
如果ll_arr_len> 0然后// //在文件
中为ll_loop = 1到ll_arr_len步骤1找到数据ib_meter然后
ll_return = wf_luhn_check(lsa_meters [ll_loop])
ll_total_valid ++
如果Len(lsa_meters [ll_loop])> = 9,则
,否则
ll_return = 1
ll_total_valid ++
else
ll_return = -1
如果
结束,如果
如果ll_return = 1则结束,然后
如果wf_aparatos_check(lsa_meters [ll_loop])< = 0则
ll_return = 1
否则
ll_return = -1
ll_total_aparatos ++
如果
结尾,则
如果ll_return = 1则
ll_pass ++
lsa_meter_pass [ll_pass] = lsa_meters [ll_loop]
ls_meters = ls_meter s + lsa_meters [ll_loop] + isk_TAB_PB
如果
结束w_progbar.uo_progress_bar.set_position(50 +((ll_loop / ll_arr_len)* 40))
下一个
ll_arr_len =如果ll_arr_len>则UpperBound(lsa_meter_pass)
0则
dw_datos_ingreso.Object.num_ini [1] = lsa_meter_pass [1]
dw_datos_ingreso.Object.num_fin [1] = lsa_meter_pass [ll_arr_len]
is_meters_passed = ls_meters仪表序列号字符串
il_apa_filemeters_count = ll_arr_len //米数
否则
li_rc =失败
如果ib_meter则
gnv_msg.f_mensaje( EX27,,,OK !)
else
gnv_msg.f_mensaje( EX22,,,OK!)
如果
结束,如果ll_total_valid = ll_total_aparatos,则
gnv_msg.f_mensaje ( EX23,,,确定!)如果
结束,则
结束,否则
li_rc = FAILURE
gnv_msg.f_mensaje( EX24, ,,OK!)
结束,如果//在文件
中找到的数据,则结束,// //文件读取成功,则
,如果//文件打开,则结束
w_progbar.uo_progress_bar.set_position(100)
Close(w_progbar)
//如果li_file_nbr>清理
0,然后
如果FileClose(li_file_nbr)= FAILURE,则
li_rc = FAULTURE
gnv_msg.f_mensaje( EX25,,,OK!)
如果$ b结束如果
如果ll_total_aparatos> 0,然后
gnv_msg.f_mensaje( EW140,String(ll_total_aparatos),,确定!)
如果
结束,如果li_rc = FAILURE,则
gnv_msg。 f_mensaje( EX26,,,确定!)
如果
返回真
结束pre>
解决方案您可以将ODBC驱动程序直接用于Excel文件,然后构建一个Pipeline对象,该对象将数据从电子表格直接进入数据库。不要编写不需要的代码。
I have this code for buttonclicked event to load excel and text file to powerbuilder and the excel data is not copied i.e ll_return_xls <= 0 and thus when i want to load it to db i will get error since it has no value or data in it...The problem here is i get the data from text file but not from the excel file...Any help will be appreciated
long ll_return long ll_return_xls OLEObject excel IF rb_file.checked then IF dwo.Name = "b_browse_meters" THEN // Browse Button Clicked for Text ll_return = GetFileOpenName ( "Select Meter File", is_fullname, is_filename, "TXT", & "Text Files (*.txt), *.txt" ) if ll_return < 1 then gnv_msg.f_mensaje("EX28", "", "", OK!) return end if END IF // Browse Button Clicked END IF IF dwo.Name ="b_browse_meters_xls" THEN // Browse Button Clicked for Excel ll_return_xls = GetFileOpenName ( "Select Meter File", is_fullname, is_filename, "XLS", & "Excel Files (*.xls), *.xls" ) if ll_return_xls < 1 then gnv_msg.f_mensaje("EX28", "", "", OK!) return end if excel = create oleobject excel.ConnectToNewObject( "excel.application" ) excel.visible = false excel.workbooks.open( is_fullname) excel.Range("A1:A2").Select excel.ActiveCell.CurrentRegion.Select() ClipBoard('') excel.Selection.Copy() ClipBoard('') excel.ActiveWorkbook.Close excel.Disconnectobject() Destroy excel END IF // Browse Button Clicked
And Function to load it the text and excel data
long ll_return, ll_arr_len, ll_loop, ll_indx, ll_pass = 0 integer li_rc, li_file_nbr, li_fr_rc //File Read Return Code string ls_file, ls_line, ls_msg string lsa_meters[], lsa_meter_pass[] string ls_meters long ll_total_valid, ll_total_aparatos SetPointer(HourGlass!) if IsValid(w_progbar) then Close(w_progbar) openwithparm(w_progbar,"Uploading file data ...") w_progbar.uo_progress_bar.set_position(10) li_rc = SUCCESS ll_total_aparatos = 0 ll_total_valid = 0 // Open file if li_rc = SUCCESS then ls_file = is_fullname li_file_nbr = FileOpen(ls_file, LineMode!) if IsNull(li_file_nbr) or li_file_nbr < 1 then li_rc = NO_ACTION end if end if // Read file, store serial numbers into array lsa_meters[] if li_rc = SUCCESS then // File Opened ll_indx = 0 do while ll_indx > -1 and li_rc = SUCCESS li_fr_rc = FileRead(li_file_nbr, ls_line) choose case li_fr_rc case is > 0 ll_indx ++ lsa_meters[ll_indx] = ls_line case 0, -100 ll_indx = -1 case -1 li_rc = FAILURE gnv_msg.f_mensaje("EX21", "", "", OK!) end choose loop if li_rc = SUCCESS then // File Read OK ll_arr_len = UpperBound(lsa_meters) if ll_arr_len > 0 then // Data found in file for ll_loop = 1 to ll_arr_len step 1 if ib_meter then ll_return = wf_luhn_check(lsa_meters[ll_loop]) ll_total_valid ++ else if Len(lsa_meters[ll_loop]) >= 9 then ll_return = 1 ll_total_valid ++ else ll_return = -1 end if end if if ll_return = 1 then if wf_aparatos_check(lsa_meters[ll_loop]) <= 0 then ll_return = 1 else ll_return = -1 ll_total_aparatos ++ end if end if if ll_return = 1 then ll_pass++ lsa_meter_pass[ll_pass] = lsa_meters[ll_loop] ls_meters = ls_meters + lsa_meters[ll_loop] + isk_TAB_PB end if w_progbar.uo_progress_bar.set_position(50 + ((ll_loop / ll_arr_len) * 40)) next ll_arr_len = UpperBound(lsa_meter_pass) if ll_arr_len > 0 then dw_datos_ingreso.Object.num_ini[1] = lsa_meter_pass[1] dw_datos_ingreso.Object.num_fin[1] = lsa_meter_pass[ll_arr_len] is_meters_passed = ls_meters // Concatenated string of meter serial no. il_apa_filemeters_count = ll_arr_len // Number of meters else li_rc = FAILURE if ib_meter then gnv_msg.f_mensaje("EX27", "", "", OK!) else gnv_msg.f_mensaje("EX22", "", "", OK!) end if if ll_total_valid = ll_total_aparatos then gnv_msg.f_mensaje("EX23", "", "", OK!) end if end if else li_rc = FAILURE gnv_msg.f_mensaje("EX24", "", "", OK!) end if // Data found in file end if // File Read OK end if // File Opened w_progbar.uo_progress_bar.set_position(100) Close(w_progbar) //Clean up if li_file_nbr > 0 then if FileClose(li_file_nbr) = FAILURE then li_rc = FAILURE gnv_msg.f_mensaje("EX25", "", "", OK!) end if end if if ll_total_aparatos > 0 then gnv_msg.f_mensaje("EW140", String(ll_total_aparatos) , "", OK!) end if if li_rc = FAILURE then gnv_msg.f_mensaje("EX26", "", "", OK!) RETURN FALSE end if RETURN TRUE
解决方案You can use the ODBC driver directly to the Excel file, and then build a Pipeline object that moves the data from the spreadsheet directly into the database. Don't write code you don't need to.
这篇关于将Excel文件加载到Powerbuilder的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!