Spreadsheet:ParseExcel为什么装不上

Perl中文Excel读写解决方案_perl吧_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:2,976贴子:
Perl中文Excel读写解决方案收藏
读:use Spreadsheet::ParseEuse MyExcelFmy $file = 'foo.xls';my $fmt = new MyExcelFormatter();my $xls = Spreadsheet::ParseExcel::Workbook-&Parse( $file, $fmt );my @workSheet = @{ $xls-&{Worksheet} };foreach my $sheet ( @workSheet ){
my $sheetName = $sheet-&get_name();
print "工作表: $sheetName\n";
my ( $minRow, $maxRow ) = $sheet-&row_range();
my ( $minCol, $maxCol ) = $sheet-&col_range();
foreach my $row ( $minRow .. $maxRow ){&&&&&
foreach my $col ( $minCol .. $maxCol ){&&&&&&&&&
my $cell = $sheet-&get_cell( $row, $col );&&&&&&&&&
next unless $&&&&&&&&&
print " ($row,$col) ", $cell-&&&&&&
print "\n";
}}复制代码基本上上面这段代码就是从 Spreadsheet::ParseExcel 的文档里抄来的。除了 my $fmt = new MyExcelFormatter(); 这一行之外。这一行生成了一个文档内容的转换器(格式化工具),转换器代码如下:package MyExcelFuse base qw(Spreadsheet::ParseExcel::FmtDefault);use Encode::CN;use Encode qw(from_to);sub new() {
return bless {};}sub TextFmt( $;$ ) {
my $this =
my ($value, $code) = @_;
if ( defined $code and $code eq 'ucs2' ){&&&&&
from_to( $value, 'ucs2', 'gb2312' );
return $}1;复制代码如法炮制以此类推,可以处理所有本地语言编码。写 excel,这个就更简单了:use Spreadsheet::WriteEmy $workbook = new Spreadsheet::WriteExcel( 'foo.xls' );my $worksheet = $workbook-&add_worksheet( T('世界你好') );$worksheet-&write( 0, 0, T('干啥呢') );复制代码大家可以看到,完全就是抄 perldoc 文档里的例子的。只不过,T( '世界你好' ) 看上去有点乖乖地罢了。其实这是一个自定义函数:use Encode qw(decode);sub T {
my $text =
return decode( 'gb2312', $text );}复制代码名字当然也可以不叫 T,叫别的也行。完整的代码如下:use Spreadsheet::WriteEuse Encode qw(decode);my $workbook = new Spreadsheet::WriteExcel( 'foo.xls' );my $worksheet = $workbook-&add_worksheet( T('世界你好') );$worksheet-&write( 0, 0, T('干啥呢') );sub T {
my $text =
return decode( 'gb2312', $text );}复制代码最后再来个总结:要点只有一个:excel 里保存的是且只能是 utf8 编码,而简体中文版的 windows 控制台和其它一些软件缺省显示的是 gb2312 编码有些朋友在 tk 应用或者 mysql 应用中用了上面的代码,仍然看到乱码,那是因为你没有搞明白 tk 和 mysql 的编码,所以上面的办法也不是万能的。万能的办法就是搞清楚每个信息流的编码方案,彻底把思路搞明白了。
神牛摄影器材--为专业摄影者打造,你值得拥有!
正在找读写中文EXCEL的资料,多谢,我来试试
登录百度帐号推荐应用
为兴趣而生,贴吧更懂你。或Spreadsheet::ParseExcel为什么装不上?
20分,无满意结帖,结帖人yuanyuanmmm]
Spreadsheet::ParseExcel为什么装不上?
20分,无满意结帖,结帖人yuanyuanmmm]
发布时间: 6:34:38
编辑:www.fx114.net
本篇文章主要介绍了"Spreadsheet::ParseExcel为什么装不上?
20分,无满意结帖,结帖人yuanyuanmmm]",主要涉及到Spreadsheet::ParseExcel为什么装不上?
20分,无满意结帖,结帖人yuanyuanmmm]方面的内容,对于Spreadsheet::ParseExcel为什么装不上?
20分,无满意结帖,结帖人yuanyuanmmm]感兴趣的同学可以参考一下。
C:\Users\T430\Downloads\Spreadsheet-ParseExcel-0.59&Makefile.PL
Set&up&gcc&environment&-&4.6.2
Warning:&prerequisite&Crypt::RC4&0&not&found.
Warning:&prerequisite&Digest::Perl::MD5&0&not&found.
Warning:&prerequisite&IO::Scalar&0&not&found.
Warning:&prerequisite&OLE::Storage_Lite&0.19&not&found.
Writing&Makefile&for&Spreadsheet::ParseExcel
Writing&MYMETA.yml&and&MYMETA.json
C:\Users\T430\Downloads\Spreadsheet-ParseExcel-0.59&
但是上述的模块我已经都装过了,怎么回事儿?
一、不得利用本站危害国家安全、泄露国家秘密,不得侵犯国家社会集体的和公民的合法权益,不得利用本站制作、复制和传播不法有害信息!
二、互相尊重,对自己的言论和行为负责。
本文标题:
本页链接:1876人阅读
Spreadsheet::ParseExcel是用于从excel中读取信息的模块,但是这个模块只适用于xls格式,即excel97-03;而要读取xlsx格式的话,即excel07之后的版本,则需要使用模块Spreadsheet::XLSX。这里只对Spreadsheet::ParseExcel的用法做个描述。
加载模块:
use Spreadsheet::ParseE新建一个解析器对象,有以下三种方法:
只创建一个解析器对象:
my $parser = Spreadsheet::ParseExcel-&new();当excel需要密码打开时,如下新建解析器对象(目前只支持一种加密方法:Office 97/2000 Compatible encryption):
$parser = Spreadsheet::ParseExcel-&new( Password =& 'secret');
如果需要解析的文件较大时,可以采用回调函数的方法,免得被卡死:
#!/usr/bin/perl -w
use Spreadsheet::ParseE
my $parser = Spreadsheet::ParseExcel-&new(
CellHandler =& \&cell_handler,
NotSetCell
my $workbook = $parser-&parse('file.xls');
sub cell_handler {
my $workbook
my $sheet_index = $_[1];
# 可以在这里边设定执行条件
return if $sheet_index &= 3;
return if $row &= 10;
# 也可以设定具体执行的行为。
print $cell-&value(), &\n&;
$workbook:表示具体的工作簿对象,可以包含Spreadsheet::ParseExcel::Workbook中的方法。
$sheet_index:表示表格对象,从0开始。
$row:表示行数,从0开始。
$col:表示列数,从0开始。
$cell:单元格对象的引用。即Spreadsheet::ParseExcel::Cell的对象。
NotSetCell:设置为1表示不存储已经解析过的单元格信息。
解析工作簿,返回工作簿对象:
my $workbook = $parser-&parse('Book1.xls');如果出错的话,返回undef.,可以通过如下形式打印出错信息:
if ( !defined $workbook ) {
die $parser-&error(), &.\n&;
}出错信息处理,有两种方法:
打印默认出错信息:
$parser-&error();其中error()和error_no()的对应关系如下:
error_code()
============
'File not found'
'No Excel data found in file'
'File is encrypted'
打印自定义出错信息:
die &Got error code &, $parser-&error_code, &.\n&;
工作簿操作:
my $workbook = $parser-&parse('Book1.xls');工作簿支持一系列的方法,常用的方法列表如下:
返回表格页的列表,通常如下使用:
for my $worksheet ( $workbook-&worksheets() ) {
}返回单个表格页,可以使用名字或索引值作参数:
$worksheet = $workbook-&worksheet('Sheet1');
$worksheet = $workbook-&worksheet(0);返回表格页的数量:
my $worksheet_count = $workbook-&worksheet_count();返回excel文件的名字:
my $filename = $workbook-&get_filename();
更具体的信息在页面:http://search.cpan.org/~jmcnamara/Spreadsheet-ParseExcel-0.59/lib/Spreadsheet/ParseExcel/Workbook.pm
工作表操作:
模块Spreadsheet::ParseExcel::Worksheet封装了一系列的工作表的属性,这里只描述常用的方法:
获得某个特定格的元素,没有的话,返回undef:
my $cell = $worksheet-&get_cell($row, $col);获得行的范围:
my ( $row_min, $row_max ) = $worksheet-&row_range();获得列的范围:
my ( $col_min, $col_max ) = $worksheet-&col_range();获得工作表的名称:
my $name = $worksheet-&get_name();更具体的信息在http://search.cpan.org/~jmcnamara/Spreadsheet-ParseExcel-0.59/lib/Spreadsheet/ParseExcel/Worksheet.pm
表格元素操作:
这里只描述常用的方法:
获取格式化后的数据:
my $value = $cell-&value();
这里长日期格式(日)处理不正确,显示的是数字,而不是格式化后内容。
这里的格式化的意思主要针对数字形式的单元格数据。比如数字的值是40117,就可能会被格式化为内容40,117,,甚至是时间格式。
如果单元格不包含格式化的数字,则返回的内容和unformatted()一样。
对于一个确定的单元格,value()总是返回一个值。
在单元格具有格式的情况下,单元格内没内容则返回空。
获取未格式化的数据:
my $unformatted = $cell-&unformatted();返回非格式化的数字形式的数据。
更具体的内容在http://search.cpan.org/~jmcnamara/Spreadsheet-ParseExcel-0.59/lib/Spreadsheet/ParseExcel/Cell.pm
还有一些东西不常用,就不写了。
更具体的内容在http://search.cpan.org/~jmcnamara/Spreadsheet-ParseExcel-0.59/lib/Spreadsheet/ParseExcel.pm
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:10943次
排名:千里之外

我要回帖

 

随机推荐