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

[求助]PB和EXECL之间的数据转换问题????

楼主yjhyn(飘零的花)2003-11-03 15:36:33 在 PowerBuilder / DataWindow 提问

 
   
    最近在学pb,碰到问题了,请大家帮一下!  
    我想把一个dw中的数据导出到EXECL中,应该怎么做。  
    还有如果我要把EXECL中的数据导入PB中,应该如何呢?  
   
    可以给一个示范的列子吗,谢谢!!!!!!!!  
  问题点数:0、回复次数:13Top

1 楼workhand(我可憨了...)回复于 2003-11-03 16:53:11 得分 0

http://expert.csdn.net/Expert/topic/2416/2416503.xml?temp=3.225344E-02  
   
  有我一段代码Top

2 楼baiyga(E代剑客)回复于 2003-11-03 18:46:39 得分 0

dw_1.saveas("路徑",excel!,false)Top

3 楼ldy(罗大佑)回复于 2003-11-03 18:50:52 得分 0

格式标还准好  
  上MSDN的OFFICE的EXCEL看看它的方法啊Top

4 楼yjhyn(飘零的花)回复于 2003-11-04 14:07:39 得分 0

 
  终于找到一个了  
   
   
  /*========================================================================*/  
  //   函数名:   gf_dw2excel      
  //   作用范围:   public  
  /*------------------------------------------------------------------------*/  
  //   描述:   将数据窗口的数据传递至EXCEL表格中,列数有26列限制(一般情况已经够用了)  
  /*------------------------------------------------------------------------*/  
  //   参数:    
  //           [value]   datawindow   adw_data     需要保存的数据窗口    
  //           [value]   string   as_reptitle       表格标题  
  /*------------------------------------------------------------------------*/  
  //   返回值:   LONG  
  /*------------------------------------------------------------------------*/  
  //   作者:   xiaolihua                       日期:   2003-05-20  
  //   修改:   DoItNow     日期:   2003.06.06  
  /*========================================================================*/  
   
  CONSTANT   Integer   ppLayoutBlank   =   12  
  Pointer   oldpointer  
  OLEObject   ole_object  
  ole_object   =   CREATE   OLEObject  
  String   s_english   =   "ABCDEFGHIJKMNLOPQRSTUVWXYZ"  
  Integer   li_ret  
   
   
   
  //////////////////////////////////////////////////////////////////////  
  //====================================================================  
  //   Script   -   gf_dw2excel   (   datawindow   adw_data,   string   as_reptitle   )      
  //   [Reason]:   由于再已经打开EXCEL的情况下,使用连接OLE时有时出错,所以改为  
  //                       直接连接新的OLE   应用。  
  //--------------------------------------------------------------------  
  //   [MODIFIED   By]:   DoItNow Date:   2003.06.06  
  //====================================================================  
   
  //li_ret   =   ole_object.ConnectToObject("","Excel.Application")  
  //IF   li_ret   <>   0   THEN  
  // //如果Excel还没有打开,则新建。  
  li_ret   =   ole_object.ConnectToNewObject("Excel.Application")  
   
  IF   li_ret   <>   0   THEN  
  MessageBox('打开错误','无法连接EXCEL!是否已经安装了EXCEL?错误号:'   +   String(li_ret))  
  RETURN   0  
  END   IF  
   
  ole_object.Visible   =   FALSE       //ole应用服务是否显示  
   
  //END   IF  
   
  //-------MODIFIED   END-------------------------------------------------  
  //////////////////////////////////////////////////////////////////////  
   
  oldpointer   =   SetPointer(HourGlass!)  
  ole_object.Workbooks.Add  
  Long   ll_colnum,ll_rownum  
  String   ls_value  
   
  String   ls_objects,ls_obj,ls_objs[],ls_objtag[],ls_width[]  
  Long   ll_pos,ll_len,ll_num   =   0  
   
  //Excel表格中的行数为数据窗口行数+2  
   
  ll_rownum   =   adw_data.RowCount()   +   2  
   
  String   ls_colname  
  Integer   i,j  
  Dec   ld_width  
   
  ll_colnum   =   Long(adw_data.Object.DataWindow.Column.Count)   //取得字段总数  
  ls_objtag[1]   =   "序号"  
  SetNull(ls_width[1])  
  i   =   1  
  FOR   ll_num   =   1   TO   ll_colnum  
  IF   adw_data.DESCRIBE("#"+String(ll_num)+".Visible")   =   "1"   THEN   //列标志为nun_Visible的不显示    
  i   =   i+1  
  ls_obj   =   adw_data.DESCRIBE("#"+String(ll_num)+".name")   //字段名称的实际存储值  
  ls_objs[i]   =   ls_obj  
  ls_objtag[i]   =   adw_data.DESCRIBE(ls_obj     +   "_t.text")     //字段名称的显示值  
  ls_width[i]     =   adw_data.DESCRIBE(ls_obj     +   '.width')       //每列的宽度  
  END   IF  
  NEXT  
   
  ll_colnum   =   i   //表格列数  
   
  //生成总标题  
  ole_object.Cells(1,1).Value   =   as_reptitle  
  ole_object.Range('A1').SELECT  
  ole_object.Selection.Font.Size   =   24  
  ole_object.Selection.HorizontalAlignment   =   3  
  ole_object.Range('A1:'+Mid(s_english,ll_colnum,1)+'1').select  
  ole_object.Range('A1:'+Mid(s_english,ll_colnum,1)+'1').Merge  
   
  //设置标题栏  
  FOR   i   =   1   TO   ll_colnum  
  ls_value   =   ls_objtag[i]  
  ole_object.Cells(2,i).Value   =   ls_value    
  IF   IsNull(ls_width[i])   THEN  
  ld_width   =   12  
  ELSE  
  ld_width   =   Dec(ls_width[i])/35     //why   devided   by   35   ???  
  END   IF  
  ole_object.Columns(i).ColumnWidth   =   ld_width  
  ole_object.Columns(i).HorizontalAlignment   =   3  
   
  ole_object.Columns(i).Borders.LineStyle   =   1  
  ole_object.Columns(i).Font.Bold   =   TRUE  
  NEXT  
   
  //添充实际数据到EXCEL  
  String   column_name,ls_coltype  
  FOR   i   =   3   TO   ll_rownum  
  ole_object.Cells(i,1).Font.Bold   =   FALSE  
  ole_object.Cells(i,1).Value   =   i   -   2  
  FOR   j   =   2   TO   ll_colnum  
  column_name   =   ls_objs[j]  
  IF   adw_data.DESCRIBE(column_name   +   '.type')   =   'column'   THEN  
  ls_value   =   adw_data.DESCRIBE("Evaluate('LookupDisplay("+column_name+")',"+String(i   -   2)+")")  
  END   IF  
  IF   adw_data.DESCRIBE(column_name   +   '.type')   =   'compute'   THEN  
  ls_value   =   adw_data.DESCRIBE("Evaluate('"   +   adw_data.DESCRIBE(column_name   +   '.expression')   +   "',"+String(i   -   2)+")")  
  END   IF  
   
  ls_coltype   =   adw_data.DESCRIBE(column_name+'.coltype')  
  IF   Pos(Upper(ls_coltype),"CHAR")   >   0   THEN   //对字符型数据处理  
  ole_object.Cells(i,j).NumberFormat   =   "@"  
  END   IF  
  ole_object.Cells(i,j).Font.Bold   =   FALSE  
  ole_object.Cells(i,j).Value   =   ls_value  
  NEXT  
  NEXT  
   
   
  //////////////////////////////////////////////////////////////////////  
  //====================================================================  
  //   Script   -   gf_dw2excel   (   datawindow   adw_data,   string   as_reptitle   )      
  //   [Reason]:   在PB中保存EXCEL文件  
  //--------------------------------------------------------------------  
  //   [MODIFIED   By]:   DoItNow Date:   2003.05.28  
  //====================================================================  
  string   sFileName,   sFile  
  integer   value  
  value   =   GetFileSaveName("另存为",sFileName,   sFile,"xls","Excel文件   (*.xls),*.xls"   )  
  IF   value   =   1   THEN    
  ole_object.ActiveWorkbook.saveas(sFileName)  
  ole_object.Displayalerts   =   FALSE   //关闭在退出EXCEL时的保存提示  
  ole_object.Quit()                                 //退出EXCEL  
  ELSE  
  messagebox("错误","保存文件出错,请手动保存")  
  ole_object.Visible   =   TRUE                 //显示ole应用服务  
  END   IF  
  //-------MODIFIED   END-------------------------------------------------  
  //////////////////////////////////////////////////////////////////////  
   
  SetPointer(oldpointer)  
  ole_object.DisconnectObject()  
  DESTROY   ole_object  
  RETURN   1  
  Top

5 楼yjhyn(飘零的花)回复于 2003-11-04 14:37:05 得分 0

 
  我现在的问题是有把EXECL,或者是TXT的文件导入到PB中,该任何做呢???  
   
  请大家帮忙!!!!!!!!Top

6 楼eyes_huang(eyes)回复于 2003-11-04 15:04:32 得分 0

string   docname,named  
  int   return_val  
  long   value  
   
  value   =   GetFileOpenName("打开文件",   docname,   named,"TXT",   "文本文件(*.TXT),*.TXT,DBF文件(*.DBF),*.DBF")  
   
  return_val   =   dw_record.ImportFile(docname)Top

7 楼hsc456(-*笑天天*-)回复于 2003-11-04 15:30:49 得分 0

上樓  
   
  對極了Top

8 楼workhand(我可憨了...)回复于 2003-11-04 17:02:18 得分 0

我现在的问题是有把EXECL,或者是TXT的文件导入到PB中,该任何做呢???  
   
  请大家帮忙!!!!!!!!  
   
  http://expert.csdn.net/Expert/topic/2416/2416503.xml?temp=.5173151  
   
  Top

9 楼ActionStone(动感灵石)回复于 2003-11-05 19:16:16 得分 0

顶!现学现用,已经解决了几个实际问题!Top

10 楼qqjj7758(QQJJ)回复于 2003-11-05 19:36:23 得分 0

yeah!Top

11 楼psy2182_cn(编程浪子)回复于 2003-11-06 19:37:52 得分 0

在PB   建个表,记住要有主键,然后导入就可以了!Top

12 楼hellohelloyjw(juan)回复于 2003-11-07 10:04:40 得分 0

主要用SaveAsAscii(docname)函数(对交叉表支持也较好):  
   
  string   docname,   named  
  integer   value  
  boolean   lb,lb_exist  
   
  LABEL1:  
   
  value   =   GetFileSaveName("请选择保存文件",   docname,   named,   "doc",   &  
  "Excel   Files   (*.XLS),*.XLS,"   )  
   
  if   value=0   then    
  return  
  end   if  
   
  //文件是否已经存在  
  lb_exist   =   FileExists(docname)  
  IF   lb_exist   THEN    
  value   =   MessageBox("提示",   "文件已经存在,是否覆盖原文件!"   ,Question!,   YesNo!)  
  END   IF  
   
  if   value<>1   then  
  goto   LABEL1  
  end   if  
   
  //使用SaveAsAscii方法  
  value=dw_view.SaveAsAscii(docname)  
  if(value=1)   then  
  messagebox("提示","文件已经保存在"+docname+"中!")  
  else  
  messagebox("警告","文件保存失败,请重新保存!",Exclamation!)  
  end   ifTop

13 楼Libra_Chen(旗舰-巴巴罗萨)回复于 2003-11-07 11:10:58 得分 0

…………Top

相关问题

  • 数据类型转换(C++/PB)
  • PB 和表数据转换问题
  • 数据转换
  • 数据转换!!!!!!!!!!
  • 怎样将交叉表的数据转换成EXECL表
  • 数据库转换!
  • 数据库转换
  • 数据库转换
  • 数据库转换
  • 如何用Pb做一个通用的数据库转换工具?

关键词

  • .net
  • 文件
  • 数据
  • pb
  • excel
  • 表格
  • docname
  • adw
  • execl
  • saveasascii

得分解答快速导航

  • 帖主:yjhyn

相关链接

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

广告也精彩

反馈

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