CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  PowerBuilder >  DataWindow

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

楼主tps1980()2005-06-01 09:49:43 在 PowerBuilder / DataWindow 提问

最近遇见这么一个问题,以前用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    
   
  问题点数:100、回复次数:2Top

1 楼guoyutong2002(小丑鱼)回复于 2005-06-02 14:40:41 得分 100

数据类型设置为长整型试试?Top

2 楼tps1980()回复于 2005-06-02 14:43:04 得分 0

呵呵,这位大姐说得真是没错,果真是数据类型的问题.int型支持到-32768---+32767,我的数据已经达到38000多条,超过了范围,当然是有问题了,多谢,呵呵!Top

相关问题

  • Mysql导出为Excel文件
  • PB分页导出excel
  • 导出为excel文件的问题?
  • 请问dbgrid导出Excel文件问题!
  • 有关Excel文件得导出问题?
  • 数据导出成Excel文件格式
  • 导出EXCEL文件出错,请指教!
  • QuickReport导出的QRP文件能不能转换成Excel文件
  • BCP导出数据到EXCEL文件时,如何连字段名一起导出?
  • 如何在已有EXCEL文件打开时,DBGrid导出Excel????

关键词

  • 文件
  • 数据
  • 函数
  • 文件名
  • excel
  • 用户
  • 导出
  • ls
  • 提示
  • li

得分解答快速导航

  • 帖主:tps1980
  • guoyutong2002

相关链接

  • PowerBuilder类图书
  • PowerBuilder类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo