hur.cn - 华软网

 热门搜索

PB的数据窗口导出为EXCEL文件有问题,请有经验的朋友进来看看!

  作者:未知    来源:网络    更新时间:2018/3/3
最近遇见这么一个问题,以前用PB开发的一个程序,现在出了一些问题,也就是我上面所说的将数据窗口导出为EXCEL文件的事情.我是将导出的功能写成一个函数的.并且不止这一个地方用到了这个函数,别的地方也同样用到过.但是别的地方却是能够正常导出的,不知道为什么.唯一区别是那个正常导出的数据窗口其数据量只有一万多条,但是那个导出错误的其数据量有三万多条,难道数据量大了就影响其导出吗?

现将该函数年贴如下(有两个传入的参数:dw_name 和  s_operator)
/*
参数说明:dw_name     待导出数据的数据窗口
 s_operator  设定导出数据的分隔符
该程序运用于使用零件图号进行查询的窗口  
*/
string ls_path //全路径,包含文件名
string ls_filename //文件名
string ls_line
string ls_col_name,ls_col_text
int li_rtn,li_writelines,li_writenum
int li_filehandle
long ll_col_count,ll_row_count
long i,j
string ls_input,ls_qgp,ls_output
boolean lb_exist
integer li_ret



li_rtn=GetFileSaveName("保存",ls_path,ls_filename,"xls","Excel文件(*.xls),*.xls")
//出现提示框提示用户进行相关的保存
lb_exist = FileExists(ls_filename)
//判断该文件是否已经存在
if lb_exist then 
li_ret = MessageBox("提示", &
"是否覆盖原有的" + ls_filename +"文件", &
Question!, YesNo!)
//如果文件存在的话,则出现提示框,提示用户是否进行覆盖
if li_ret=2 then
  return
   else
  goto store
   end if

else
 //如果文件不存在,则进行文件的保存
 store:
 if li_rtn=1 then
li_filehandle=FileOpen(ls_path,linemode!,write!,lockreadwrite!,replace!)

if li_filehandle>0 then
ll_col_count=long(dw_name.describe("DataWindow.Column.Count"))
ll_row_count=dw_name.rowcount()

ls_line=""
for j=1 to ll_col_count 
  ls_col_name=dw_name.describe("#"+string(j)+".name")
  ls_col_text=dw_name.describe(ls_col_name+"_t.text")
  ls_line=ls_line+s_operator+ls_col_text
   next
ls_line=mid(ls_line,len(s_operator)+1)
li_writenum=filewrite(li_filehandle,ls_line)
if li_writenum>0 then
li_writelines++
end if

for i=1 to ll_row_count
 ls_line=""
 for j=1 to ll_col_count
            if isnull(dw_name.object.data[i,j]) then
ls_line=ls_line+s_operator+""
else
ls_line=ls_line+s_operator+trim(string(dw_name.object.data[i,j]))
end if  
 next
   ls_line=mid(ls_line,len(s_operator)+1)
   li_writenum=filewrite(li_filehandle,ls_line)
   if li_writenum>0 then
   li_writelines++
   end if
   next 
//以上代码在Excel文件中输入数据窗口的内容
         if li_writelines<ll_row_count then
  messagebox("提示","导出文件产生未知错误,数据未完全导出!")
     return
   end if
   li_rtn=fileclose(li_filehandle)
   if li_rtn<>1 then
  messagebox("提示","文件关闭操作失败!")
  return
   else
  messagebox("提示","文件导出完成!")
  return
   end if
else
messagebox("提示","文件打开操作失败!")
return
end if
 else
// messagebox("提示","您取消了导出操作!")
// return
end if
end if

还想问一下,在遇见上面这个问题以后,后来我又在想别的方法,想起曾用saveascii()的方法保存为excel文件,我写了一个程序,在别的一个小的程序上用能正常导出,但是在这个上面虽然能导出,却出来一个空白的文件,不知道这又是什么道理.请大家也来解答一下,谢谢,程序如下所示:

int flag
string ls_path       //路径名
string ls_filename //文件名
int li_rtn
boolean lb_exist
integer li_ret

li_rtn=GetFileSaveName("保存",ls_path,ls_filename,"xls","Excel文件(*.xls),*.xls")
//出现提示框提示用户进行相关的保存
lb_exist = FileExists(ls_filename)
//判断该文件是否已经存在
if lb_exist then 
li_ret = MessageBox("提示", &
"是否覆盖原有的" + ls_filename +"文件", &
Question!, YesNo!)
//如果文件存在的话,则出现提示框,提示用户是否进行覆盖
if li_ret=2 then
  return
   else
  goto store
   end if

else
 //如果文件不存在,则进行文件的保存
 store:
   if li_rtn=1 then
  flag=dw_total_wage.saveasascii(ls_path)
  if flag=1 then
  messagebox("","导出成功!")
  else
  messagebox("","导出失败!")
  end if
   end if 
end if  


------华软网友回答------
数据类型设置为长整型试试?
------华软网友回复------
呵呵,这位大姐说得真是没错,果真是数据类型的问题.int型支持到-32768---+32767,我的数据已经达到38000多条,超过了范围,当然是有问题了,多谢,呵呵!      
华软声明:本内容来自网络,如有侵犯您版权请来信指出,本站立即删除。