存档

2019年5月 的存档

perldoc的使用问题

2019年5月30日 没有评论

Ubuntu中的perldoc无法显示perlfunc,perlsyn文档。原因是这些文档的pod没有安装。解决方法是先用perl -v查询到per的版本号,然后下载对应的源代码。将源代码中的Pod目录下的所有.pod文件,复制到perl -V列出的任何一个目录中。即可使用

# perldoc perlfunc
# perldoc perlsyn
分类: Perl 标签:

Perl通过CGI操作Excel文档

2019年5月21日 没有评论

着手写一个工具: 在Web页面中选择器件类型和数量,然后生成配置报价预览,并提供销售配置表和BOM表的xls下载链接。

1. 搭建开发平台:
安装CentOS7.2最小版,配置网络, 注意网卡配置文件中的网关字符串是NETMASK,不是MASK。

yum install vim
yum install gcc
yum install httpd

配置httpd, 以/var/www/cgi-bin/为默认目录,该目录中index.html为默认主页;
编辑/var/www/cgi-bin/目录下的.htaccess文件:

# 使用rewrite方法,实现http://172.16.210.143/test.pl 
# 为 http://172.16.210.143/test (不带perl的后缀)
RewriteEngine on
RewriteRule ^test$ test.pl
RewriteRule ^result$ result.pl
# 实现xls文件的自动下载
<Files *.xls>
ForceType application/octet-stream
Header set Content-Disposition attachment
</Files>

2. 编辑index.html页面,获取输入信息。index.html的forum中输入的信息传递到result.pl。

3. Perl无法实现在同一个xls表格中单元格(cell)的复制(内容和格式),必须先生成一个拷贝xls, 然后对拷贝的xls进行内容填充和格式编辑。如果通过CPAN安装Spreadsheet::ParserExcel和Spreadsheet::WriteExcel模块,可以安装成功,也能在命令行模式正常运行,但是如果在浏览器中运行result.pl时,会提示报错

[cgi:error] [pid 4778] [client 192.168.1.104:52082] 
AH01215: Can't loc +ate Spreadsheet/ParseExcel.pm in 
@INC (@INC contains: /usr/local/lib6 +4/perl5 /usr/local/share/perl5 
/usr/lib64/perl5/vendor_perl /usr/shar +e/perl5/vendor_perl 
/usr/lib64/perl5 /usr/share/perl5 .) 
at /var/www/ +cgi-bin/result.pl line 11.

这个问题困扰了我一天多时间,最后我在perlmonks上发帖求助,解决了这个问题。原来CPAN安装模块可能会出现问题,需要手工方式安装。我在metacpan上下载了Spreadsheet::ParseExcel的源文件(tar.gz), 然后复制到/usr/local/src目录中解压进行安装,会提示需要安装其它的功能模块,逐一下载并安装。

Crypt-RC4-2.02.tar.gz
Digest-Perl-MD5-1.9.tar.gz
IO-stringy-2.111.tar.gz
OLE-Storage_Lite-0.19.tar.gz
Parse-RecDescent-1.967015.tar.gz
Spreadsheet-ParseExcel-0.65.tar.gz
Spreadsheet-WriteExcel-2.40.tar.gz

成功安装Spreadsheet::ParseExcel和Spreadsheet::Write模块后,在web中执行CGI就没有问题了。

4. 使用require引用其它perl代码,避免主程序过长。主程序中的参数能直接传递到require引用的新代码中。
5. 解决xls中文输入乱码的问题,使用以下方法进行中文转码解决

decode("utf-8",$string)

6. xls中单元格格式的获取和设置问题.
格式获取:

#!/usr/bin/perl -w

use strict;
use Spreadsheet::ParseExcel;
use Spreadsheet::WriteExcel;

# Open the template with SaveParser
my $parser = new Spreadsheet::ParseExcel;
my $workbook = $parser->Parse('1.xls');

my $worksheet = $workbook->worksheet(0);

my $cell = $worksheet->get_cell(7,8);
my $format = $cell->get_format();

my $pattern = $format->{Fill}->[0];
my $color1 = $format->{Fill}->[1];
my $color2 = $format->{Fill}->[2];
my $wrap = $format->{Wrap};
my $font = $format->{Font};
my $fontcolor = $font->{Color};
my $bold = $font->{Bold};
my $alignH = $format->{AlignH};
my $alignV = $format->{AlignV};;

print $color1,"\n";
print $color2,"\n";

#$workbook->close();

格式设置:

$format_cell_bdh = $workbook_bom_s12->add_format();
$format_cell_bdh->set_align('center');
$format_cell_bdh->set_align('vcenter');
$format_cell_bdh->set_bottom('1');

解决上述问题,就可以对Excel做各种操作了。为了方便,我使用了比较老的xls文件,并未测试xlsx格式。

分类: Perl 标签:

迁移到阿里云

2019年5月21日 没有评论

去年10月份发现网站无法访问,发现数据库中没有任何数据。原来位于广州的虚拟空间运营商被卖给郑州一家公司,我多次找了各类客服人员才把数据恢复回来。这可是我从2005年6月份开始的学习笔记呀,当时觉得很是幸运。可是很快发现网站被屏蔽以致无法正常访问。于是又联系运营商客服,购买该公司字样的幕布用于拍摄照片,同时准备各种备案资料。结果网站备案失败,原因不详(或许因为是.hk域名)。当时工作比较忙,网站访问的事情就放下了。结果一过又是半年,今年5月份有篇文档想做为在线笔记时,才又想起网站这回事。这次果断选择了大店阿里云,重新购买域名和虚拟主机。备案还算顺利,以前的数据迁移遇到一些问题,后来也解决了。主要包括,阿里虚拟主机的PHP版本较低,无法安装目前最新的wordpress版本。还有一个怪异的情况,将原目录文件和数据库导入后,网站能正常访问,可是进入管理后台后打开设置和插件页面就显示报错。由于无法看到错误日志,也找不到原因。尝试手动将阿里虚拟主机的PHP版本调到最高,然后重新拷贝目录文件,竟然一切正常了。我也不知道是什么原因。或许就是PHP版本的原因。不管怎样,现在都能正常应用,这是一件开心的事情。将网站的名字调整为学习笔记Study Notes, 继续记录学习中的点滴。

2005-2019年,转眼15个年头了。“应无所住,而生其心”。

分类: 生活 标签: