将Excel文件加载到Powerbuilder [英] Load Excel File To Powerbuilder

查看:119
本文介绍了将Excel文件加载到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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆