免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 5493 | 回复: 2
打印 上一主题 下一主题

求助一段win32::ole写入excel的代码,工作需要 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2013-08-25 23:14 |只看该作者 |倒序浏览
现在要往一个已经存在并有数据的excel表格中写入数据,因为表格已经有数据,所以需要在这些数据之后插入数据,能不能用win32:le写段代码,工作需要,求大侠帮忙!
比如 %work={'name'=>'jack',
                     'project'=>'venus',
                     'pid'=>'R0629"
                     'add'=>'shanghai'}
需要插入到一个excel.xls文件中,使用win32:le,需要知道excel已经存在数据的行截至数,然后紧接着下一行插入%work中的值(键不需要存入,依次按列插入哈希值,每个cell存入一个值即可),求一段完整代码,谢谢!

论坛徽章:
6
丑牛
日期:2014-03-21 15:42:04子鼠
日期:2014-04-12 11:50:17处女座
日期:2014-09-01 09:25:1115-16赛季CBA联赛之吉林
日期:2015-12-22 14:01:5215-16赛季CBA联赛之广东
日期:2016-03-08 18:49:422016科比退役纪念章
日期:2016-07-06 12:19:55
2 [报告]
发表于 2013-08-26 14:13 |只看该作者
偶试试{:3_193:}
  1. #!perl
  2. package Xls;

  3. use strict;
  4. use Win32::OLE;

  5. sub new {
  6.     my ($class) = @_;
  7.     my $self = +{};
  8.     bless $self, $class;
  9.     return $self;
  10. }

  11. sub open_excel {
  12.     my $self   = shift;
  13.     my $xl_doc = shift;
  14.     my $excel = Win32::OLE->new('Excel.Application') or
  15.         die "Excel application is not installed:\n";
  16.     my $workbooks;
  17.    
  18.     # make excel visible
  19.     $excel->{Visible} = 1;

  20.     $workbooks = $excel->Workbooks->Open($xl_doc);
  21.     return $workbooks;
  22. }

  23. sub get_worksheet {
  24.     my ($self, $workbooks, $num) = @_;
  25.     my $sheet = $workbooks->Worksheets($num);
  26.     return $sheet;
  27. }

  28. sub get_cell_value {
  29.     my ($self, $sheet, $row, $col) = @_;
  30.     my $cell_obj = $sheet->Cells($row, $col);
  31.     my $value = q{};
  32.    
  33.     if ($cell_obj){
  34.         $value = $sheet->Cells($row, $col)->{Value};
  35.     }
  36.     $value ||= q{};
  37.    
  38.     return $value;
  39. }

  40. sub set_cell_value {
  41.     my ($self, $sheet, $row, $col, $value) = @_;
  42.     my $cell_obj = $sheet->Cells($row, $col);
  43.     $value ||= q{};
  44.    
  45.     if ($cell_obj){
  46.         $sheet->Cells($row, $col)->{Value} = $value;
  47.     }
  48. }

  49. 1;

  50. package main;
  51. use strict;

  52. my $xls_name = '/full/path/to/your/excel.xls';

  53. # parse the first worksheet
  54. my $worksheet_number = 1;

  55. # data to write
  56. my %work = (
  57.     name   =>'jack',
  58.     project=>'venus',
  59.     pid    =>'R0629',
  60.     add    =>'shanghai',
  61. );

  62. my $pm = Xls->new();
  63. my $workbooks = $pm->open_excel($xls_name);
  64. my $worksheet = $pm->get_worksheet($workbooks, $worksheet_number);

  65. # frist cell
  66. my $col = 1;
  67. my $row = 1;

  68. # get the cell in column one that has no value within
  69. while (1) {
  70.     my $cell_value = $pm->get_cell_value($worksheet, $row, $col);
  71.     last if !$cell_value;
  72.     $row++;
  73. }

  74. # write data in ordered sequences
  75. for my $key ('name', 'project', 'pid', 'add'){
  76.     $pm->set_cell_value($worksheet, $row, $col, $work{$key});
  77.     $col++;
  78. }

  79. # close
  80. $workbooks->Close
  81. __END__
复制代码

论坛徽章:
0
3 [报告]
发表于 2013-09-05 11:07 |只看该作者
回复 2# stanley_tam

学习了,bless


   
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP