CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  PowerBuilder >  基础类

EXCEL的操作??

楼主xiongxiao(小雄)2005-12-10 09:38:24 在 PowerBuilder / 基础类 提问

任务描述:  
  1、打开一个已经存在的EXCEL文件;  
  2、找到一个确定名称的工作表(这文件里有几个表,要操作的表不一定是当前表),设成当前表;  
  3、在已有内容的最后一行下面增加数据,数据格式为:  
        第一格为文本,第二行为超链接,链接到另一个文件,第三行为日期,其它均为文本;  
  4、保存并关闭。  
   
  555555555,对EXCEL操作不懂,却碰上这样的任务,大家帮忙,先谢了 问题点数:200、回复次数:21Top

1 楼j9dai(翔)(DoItNow)回复于 2005-12-10 10:22:00 得分 50

http://community.csdn.net/Expert/FAQ/FAQ_Index.asp?id=199669Top

2 楼j9dai(翔)(DoItNow)回复于 2005-12-10 10:23:08 得分 0

呵呵,你自己审核的FAQ哦Top

3 楼xiongxiao(小雄)回复于 2005-12-10 10:31:32 得分 0

不是吧,我自己审的,晕啊,我哪年审的???Top

4 楼xiongxiao(小雄)回复于 2005-12-10 10:34:07 得分 0

不对啊,没有几条是能对上上面的任务的,5555555555555555Top

5 楼xiongxiao(小雄)回复于 2005-12-10 10:42:58 得分 0

录制了一段宏,改成PB语句应该是啥??  
          Range("A2").Select  
          ActiveCell.FormulaR1C1   =   "05-237"  
          Range("B2").Select  
          ActiveCell.FormulaR1C1   =   "05-237"  
          Range("B2").Select  
          ActiveSheet.Hyperlinks.Add   Anchor:=Selection,   Address:=   _  
                    "F:\My   Documents\0921.xls",   TextToDisplay:="05-237"  
          Range("C2").Select  
          ActiveCell.FormulaR1C1   =   "2/2/2006"  
          Range("C2").Select  
          Selection.NumberFormatLocal   =   "m""月""d""日"";@"  
          Range("D2").Select  
          ActiveCell.FormulaR1C1   =   "456"  
   
  还有如何查找一个表中最后一行是多少的语句是啥??Top

6 楼lzheng2001(1加1)回复于 2005-12-10 11:12:26 得分 20

excel帮助文件有详细的编程参考资料,你的问题都可以在帮助文件中找到,我相信楼主能自己解决的.Top

7 楼xiongxiao(小雄)回复于 2005-12-10 11:47:38 得分 0

楼上的1+1老弟,真是汗颜呀,只在帮助中找到下面这个:  
   
  本示例显示当前工作表打印区域中的行数和列数。  
   
  p   =   Names("Print_Area").RefersToRange.Value  
  MsgBox   "Print_Area:   "   &   UBound(p,   1)   &   "   rows,   "   &   _  
          UBound(p,   2)   &   "   columns"  
   
  可惜偶不明白,这一个方法在没有设置打印区域的时候,应该是可以的,但不会用Top

8 楼lzp_lrp(lzp)回复于 2005-12-10 12:33:05 得分 10

呵呵,帮你顶吧Top

9 楼lzheng2001(1加1)回复于 2005-12-10 14:26:43 得分 0

编程参考手册都在帮助文件上了,你找不出来吗?   不同的版本有点不同,总之你找一下吧,所有对象,属性都在内面.Top

10 楼Helloworld2004()回复于 2005-12-10 14:42:19 得分 10

除非必要,不建议用pb来访问excel,两者的兼容性并不好,而且以后程序的维护也是个大问题。建议这部分程序用支持com的程序编写,例如vb,vc,或者用vba来写都好一些。用pb来操作excel并不是不可能,但实际上,由于excel的版本很多,以及调用方式的问题,很难写出高质量的程序出来。Top

11 楼xiongxiao(小雄)回复于 2005-12-10 14:55:39 得分 0

唉,我要完成的就是从数据窗口中读出数据来然后写入EXCEL文件中,EXCEL的版本最低是2000,这个可以保证,1+1老弟说的帮助文件太大了,还不知用什么关键字去找,真是痛苦Top

12 楼xiongxiao(小雄)回复于 2005-12-12 13:26:55 得分 0

找不出结果,帮忙呀,大小虾们  
   
  自己顶Top

13 楼huodian007(火点)回复于 2005-12-12 20:57:40 得分 20

PB与excel通讯  
  如何从*.xls   文件中导入数据到数据窗口?  
   
  public   function   boolean   wf_appendfromxls   (datawindow   dw_acton,   string   str_filename);  
   
  OLEObject   ExcelServer  
  long   excelok  
  string   str_savename  
   
  ExcelServer   =   CREATE   OLEObject  
  ExcelOK   =   ExcelServer.ConnectToNewObject(   "excel.application"   )  
  if   excelok   <   0   then  
  messagebox("连接excel失败,检查你的系统是否安装了office",string(excelok))  
  return   false  
  else  
  ExcelServer.Workbooks.Open(str_filename)  
  str_savename="c:\temp.txt"  
  excelserver.activeworkbook.saveas(str_savename,3)  
  excelserver.displayalerts=false  
  ExcelServer.quit()  
      ExcelServer.DisconnectObject()  
      DESTROY   ExcelServer    
  dw_acton.ImportFile(str_savename)  
  filedelete(str_savename)  
      return   true  
  end   if  
  end   function  
   
   
   
   
   
  /*///////////////////////////////////////////////////////////////////////////  
  //支持导出分组带、合计带,并且支持多层嵌套报表导出,基本是所见及所得  
  //函数名称:gf_dwtoexcel  
  //参数:ad_dw:datawindow  
  //返回值true/false:boolean  
  //王卫  
  //2004-01-14  
  /////////////////////////////////////////////////////////////////////////////  
  */  
  SetPointer(HourGlass!)  
  long   i,   j,   li_pos  
  string   ls_objects,   ls_obj,   ls_text,   ls_err,   ls_sql  
  datastore   lds_saveas//导出数据窗  
  datastore   lds_sort//获得根据   object.x   排序的   (band   =   detail   and   visible   =   1)   的   column/compute  
  boolean   lb_return//返回值  
  string   ls_pbver//pb   版本信息  
  environment   env//环境变量  
   
  int   li_value  
  string   ls_path,ls_fname  
  li_value   =   GetFilesaveName("请选择导出的文件",   &  
  +   ls_path,   ls_fname,   "TXT",   &  
  +   "Excel文件(*.XLS),*.xls,"   &  
  +   "文本文件   (*.TXT),*.txt,"   &  
  )    
  IF   li_value   <>   1   THEN    
  messagebox("提示!","请选择要导出的文件名称")  
  return   false  
  end   if  
  getenvironment(env)  
  ls_pbver   =   string(env.pbmajorrevision)  
   
  //创建排序列   datastore  
  lds_sort   =   create   datastore  
  ls_sql   =   'column=(type=char(1)   name   =   ztext   dbname="ztext"   )'   +   '~r~n'   +   &  
  'column=(type=char(1)   name   =   zcol   dbname="zcol"   )'   +   '~r~n'   +   &  
  'column=(type=long   name   =   zx   dbname="zx"   )'   +   '~r~n'  
  ls_sql   =   'release   '   +   ls_pbver   +   ';~r~ntable('   +   ls_sql   +   ')'  
  lds_sort.create(ls_sql,   ls_err)  
  if   len(ls_err)   >   0   then  
  lb_return   =   false  
  goto   lab1  
  end   if  
   
  //准备数据====================================================  
  //all   controls  
  ls_objects   =   ad_dw.Describe("datawindow.objects")  
   
  //按~t位置作判断开始循环  
  do   while   (pos(ls_objects,"~t")   >   0)  
  li_pos   =   pos(ls_objects,"~t")  
  ls_obj   =   left(ls_objects,li_pos   -   1)  
  ls_objects   =   right(ls_objects,len(ls_objects)   -   li_pos)  
  //(column   or   compute   )   at   detail   and   visible  
  IF   (ad_dw.Describe(ls_obj+".type")   =   "column"   or   &  
  ad_dw.Describe(ls_obj+".type")   =   "compute"   )   AND   &  
  (ad_dw.Describe(ls_obj+".band")   =   "detail"   )   AND   &  
  (ad_dw.Describe(ls_obj+".visible")   =   "1"   )   THEN  
  ls_text   =   ad_dw.describe(ls_obj   +   '_t.text')  
  if   ls_text   <>   '!'   and   ls_text   <>   '?'   then  
  lds_sort.insertrow(0)  
  lds_sort.setitem(lds_sort.rowcount(),   'ztext',   ls_text)  
  lds_sort.setitem(lds_sort.rowcount(),   'zcol',   ls_obj)  
  lds_sort.setitem(lds_sort.rowcount(),   'zx',   long(ad_dw.describe(ls_obj   +   '.x')))  
  end   if  
  END   IF  
  loop  
   
  //the   last   control  
  ls_obj   =   ls_objects  
  IF   (ad_dw.Describe(ls_obj+".type")   =   "column"   or   &  
  ad_dw.Describe(ls_obj+".type")   =   "compute"   )   AND   &  
  (ad_dw.Describe(ls_obj+".band")   =   "detail"   )   AND   &  
  (ad_dw.Describe(ls_obj+".visible")   =   "1"   )   THEN  
  ls_text   =   ad_dw.describe(ls_obj   +   '_t.text')  
  if   ls_text   <>   '!'   and   ls_text   <>   '?'   then  
  lds_sort.insertrow(0)  
  lds_sort.setitem(lds_sort.rowcount(),   'ztext',   ls_text)  
  lds_sort.setitem(lds_sort.rowcount(),   'zcol',   ls_obj)  
  lds_sort.setitem(lds_sort.rowcount(),   'zx',   long(ad_dw.describe(ls_obj   +   '.x')))  
  end   if  
  END   IF  
  //如果没有列则跳出  
  if   lds_sort.rowcount()   <   1   then   goto   lab1  
  //根据   object.x   排序  
  lds_sort.setsort('zx   A')  
  lds_sort.sort()  
   
  //创建导出   datastore  
  lds_saveas   =   create   datastore  
  ls_sql   =   ''  
  for   i   =   1   to   lds_sort.rowcount()  
  ls_obj   =   lds_sort.getitemstring(i,   'zcol')  
  ls_sql   +=   'column=(type=char(1)   dbname="'   +   ls_obj   +   '"   )'   +   '~r~n'  
  next  
  ls_sql   =   'release   '   +   ls_pbver   +   ';~r~ntable('   +   ls_sql   +   ')'  
  lds_saveas.create(ls_sql,   ls_err)  
  if   len(ls_err)   >   0   then  
  lb_return   =   false  
  goto   lab1  
  end   if  
   
  //向   lds_saveas   中写数据  
  for   i   =   1   to   ad_dw.rowcount()  
  yield()//释放消息队列,   如果数据量较大,   可以使用这个函数  
  lds_saveas.insertrow(0)  
  for   j   =   1   to   lds_sort.rowcount()  
  ls_obj   =   lds_sort.getitemstring(j,   'zcol')  
  if   ad_dw.describe(ls_obj   +   '.type')   =   'column'   then  
  ls_text   =   ad_dw.describe('evaluate(~'LookUpDisplay('   +   ls_obj   +   ')~',   '   +   string(i)   +   ')')  
  else  
  ls_text   =   ad_dw.describe('evaluate(~''   +   ls_obj   +   '~','   +   string(i)   +   ')')  
  end   if  
  lds_saveas.setitem(i,   j,   ls_text)  
  next  
  next  
   
  lds_saveas.insertrow(1)  
  for   i   =   1   to   lds_sort.rowcount()  
  lds_saveas.setitem(1,   i,   lds_sort.getitemstring(i,   'ztext'))  
  next  
  //准备数据完毕====================================================  
   
  //saveas   datawindow  
  lb_return   =   (lds_saveas.saveas(ls_path,   excel!,   false)   =   1)  
   
  lab1:  
  destroy   lds_sort  
  destroy   lds_saveas  
  SetPointer(Arrow!)  
  if   lb_return   then  
  messagebox("提示!","导出文件成功")  
  else  
  messagebox("提示!","导出文件失败")  
  end   if  
  return   lb_return  
  Top

14 楼xiongxiao(小雄)回复于 2005-12-14 14:14:13 得分 0

楼上兄弟,这不合要求啊  
  1、打开一个已经存在的EXCEL文件;  
  2、找到一个确定名称的工作表(这文件里有几个表,要操作的表不一定是当前表),设成当前表;  
  3、在已有内容的最后一行下面增加数据,数据格式为:  
        第一格为文本,第二行为超链接,链接到另一个文件,第三行为日期,其它均为文本;  
  4、保存并关闭。  
  现在1,2,4点没问题,关键在第三点,找不到资料,头大啊Top

15 楼xiongxiao(小雄)回复于 2005-12-17 11:33:06 得分 0

UPTop

16 楼xiongxiao(小雄)回复于 2005-12-19 09:48:43 得分 0

再次UP,没人回答就结贴Top

17 楼wu_07(一只狗不孤单,想一只狗才孤单)回复于 2005-12-19 10:09:09 得分 80

 
   
  用户使用区域的最后一行的行数:  
   
  Worksheets(SStr).UsedRange.Row   +   Worksheets(SStr).UsedRange.Rows.Count   -   1Top

18 楼pmz()回复于 2005-12-19 11:54:08 得分 10

http://www.pdriver.com/bbs5/dispbbs.asp?BoardID=14&replyID=921&id=174&skin=0  
  Excel2000VBA手册Top

19 楼xiongxiao(小雄)回复于 2005-12-21 15:26:16 得分 0

终于有答案了,呵呵  
  不过那手册俺看不到Top

20 楼xiongxiao(小雄)回复于 2005-12-21 16:42:29 得分 0

问题解决:————————结贴  
  OLEObject   ExcelServer  
  long   excelok  
  string   str_filename  
  str_filename   =   '321.xls'  
   
  ExcelServer   =   CREATE   OLEObject  
  ExcelOK   =   ExcelServer.ConnectToNewObject(   "excel.application"   )  
  if   excelok   <   0   then  
  messagebox("连接excel失败,检查你的系统是否安装了office",string(excelok))  
  else  
  long   ll_row  
  string   sheet,ls_range  
  sheet   =   'sheet1'  
  ExcelServer.Workbooks.Open(str_filename)  
  ExcelServer.Worksheets(sheet).Activate      
  ExcelServer.visible=   true  
  ll_row   =   ExcelServer.Worksheets(sheet).UsedRange.Row   +   ExcelServer.Worksheets(sheet).UsedRange.Rows.Count  
  ExcelServer.cells(ll_row,1).value   =   '05-245'  
  ExcelServer.cells(ll_row,2).value   =   '05-245'  
  ExcelServer.cells(ll_row,3).value   =   '2005-5-25'  
  ls_range   =   'C'   +   string(ll_row)  
  ExcelServer.Worksheets(sheet).range(ls_range).NumberFormatLocal   =   'm""月""d""日"";@'  
  ls_range   =   'B'   +   string(ll_row)  
  ExcelServer.Worksheets(sheet).Hyperlinks.Add(ExcelServer.Worksheets(sheet).range(ls_range),"E:\st\开始.jpg")  
  excelserver.ActiveWorkbook.save()  
  excelserver.displayalerts=false  
  ExcelServer.quit()  
  ExcelServer.DisconnectObject()  
  DESTROY   ExcelServer    
  end   ifTop

21 楼sdhylj(青锋-SS)(献血有益健康(别人的))回复于 2005-12-21 17:13:38 得分 0

upTop

相关问题

  • Excel 操作
  • VB excel操作???
  • 操作excel?
  • EXCEL操作
  • C# 操作Excel
  • Delphi操作Excel
  • ADO操作Excel
  • 操作excel
  • Excel操作问题????
  • 操作Excel问题

关键词

  • 文件
  • 数据
  • excel
  • 文本
  • pb
  • ls
  • lds
  • ztext
  • zcol
  • 表

得分解答快速导航

  • 帖主:xiongxiao
  • j9dai
  • lzheng2001
  • lzp_lrp
  • Helloworld2004
  • huodian007
  • wu_07
  • pmz

相关链接

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

广告也精彩

反馈

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