存档

作者存档

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个年头了。“应无所住,而生其心”。

分类: 生活 标签:

北海

2018年11月15日 没有评论

每当停滞不前时,我就会自我要求,尝试用不同的方法去做一样的事,给自己设定不同的挑战目标,也让自己保持对工作的热忱,同时也试着去改变所面临的各种困境。当一成不变时,自己更要寻求改变,不要楚囚相对,一事无成。去年此时也在北海,同样是下雨降温。昨晚和同事们吃饭,也还是在去年同一家酒楼。

分类: 生活 标签:

调整部分内容

2018年11月5日 没有评论

调整了网站的部分内容,修改iNove的sidebar.php: 去掉了“订阅”、“最新回复”以及“链接站点”区域。在footer.php中将年份从2016修改为2018。

分类: 科技 标签:

网站终于恢复访问了

2018年11月2日 没有评论

前段时间出现无法访问的情况,心想可能这十年来的数据丢了。经过一周的折腾,今天终于恢复正常访问。

分类: 心理 标签:

读书的目的

2018年4月25日 没有评论

我们要练习延迟满足,为了目标而忍耐。惟有学会忍耐,才能够集中力量达成目标,否则一下想要这样、一下想要那样,目标永远无法达成。

没有希望的地方就如同地狱一般。人一定要有希望,才能够开发情绪的力量,活出不一样的人生。

当一件事发生时,我们不必急着去问这件事到底是如何,而要先知道自己对这件事的感觉如何。无论遭遇什么样的逆境,都要先停下来,让自己喘一口气,想一想究竟发生了什么事。

读书的目的是要“改变自己”,改变自己就是要去印证、去实践所学到的东西,让自己不停地往上走。换言之,我自己的生命才是学习最后要印证的重点。

爱是一种舍己为人的表现,惟有通过爱,才能够让我们感觉到超越,而不计较个人的利害。同时,它也能够让人更接近根源,并且更能体认命运、生死的信念,因而掌握到神圣的价值。

分类: 心理 标签:

判断字符串是否为utf8

2018年2月23日 没有评论

春节放假前将批量数据导入数据库时,发现utf8报错。今天是年后上班第一天,很快找到了解决方法,将所有数据顺利导入。

return $is_utf8 if ($content !~ /[\x80-\xff]/)
分类: Perl 标签:

CentOS7.2关闭防火墙和SELinux

2018年2月12日 没有评论

很久没有研究操作系统,最近要写一个工具屡屡发现问题,后来才发现是firewall和SELinux的配置问题。参考了这篇文章,关闭了防火墙和SElinux后解决问题。

分类: 科技 标签:

解决chromium无法设置高级网络问题

2017年1月25日 没有评论

前天终于痛下决心买了一块SSD用于笔记本硬盘升级。先安装Windows7,专为写PPT用,然后安装Ubuntu16.04。我觉得奇怪的是,Ubuntu官网上没有列出16.10的下载,还是保留的16.04版本。我之前是从15.04升级到15.10,然后再到16.04,现在全新安装16.04,有很多东西需要微调。首先是Chromium浏览器中高级网络配置无法像以前一样直接设置,会提示“在受支持的桌面环境中运行google-chrome时,将使用系统代理设置。但您的系统不受支持,或启动系统配置时出现问题。但您仍可通过命令行进行配置。如需详细了解各项实验功能和环境变量,请参见 man google-chrome。 ”,这让人有些恼火。网上有人贴出用命令行后加–proxy-server=”socks5://127.0.0.1:1080启动,但是我不希望每次都要打开命令行,我希望点击桌面图标就能执行。找了一些资料,我解决了这个问题。

# cd /usr/share/applications
# sudo vim chromium-browser.desktop

将其中的“Exec=chromium-browser %U”行后加入“–proxy-server=”socks5://127.0.0.1:1080″

# Exec=chromium-browser %U --proxy-server="socks5://127.0.0.1:1080"

然后打开浏览器就可以了。另外,今天上班启动Ubuntu时,发现只能在图形界面下工作,无法按Ctrl+Alt+F2切换到控制台,后来重启系统就好了(找到原因了,更新NVidia显卡驱动就好了)。昨晚安装Windows7的安全补丁,到早上看竟然蓝屏了。这个影响不大,以后主要的工作系统还是Linux。

分类: 科技 标签:

批评太多,思考太少

2016年11月3日 没有评论

(原文)周末午后的一家平价咖啡厅中,几位年轻客人说话的音量之大,就算不想听,还是传进了其他客人的耳中。

“那个人根本没什么实力,运气好而已啦。“
”我只是没有认真,不然根本就轮不到他。”
“你们不觉得,他长的其实真的不讨喜吗?“
我其实觉得他很假,而且能力真的还好。

听起来,似乎是他们七嘴八舌的讨论一个人,这个人可能在某些方面表现的比他们更好,於是心有不甘下,就聚在一起好好的「批评」一番。起初每个人都咬牙切齿,直到好好的批评完一轮后,情绪才借由同侪的力量得到了纾解,得以稍歇片刻。

他们开始滑起手机,翻起了店内的报章杂志,不久后却又传来批评的声音。

”办什么世纪婚礼,你们看她那件婚纱品味有够差。“
“你们看这些当官的,不知道乱花掉我们多少稅金。”
”这个什么专家的,胡说八道什么,我来都比他好。“

原来,这些人的批评大会,并不单单只限於他们身边认识的人,连艺人、官员、专家及公众人物,都可以是他们用来批评的下酒菜。而从批评时众人的默契及神采奕奕,可想见,这就是他们的日常样貌,熟练又习惯的批评著所有看不惯的人事物,即使在公众场合仍然故我而自在。

不管哪个位置上,都不乏喜欢批评的人。只有员工会评批公司及老板吗?不,事实上,喜欢批评员工的老板,也是大有人在。曾经在一次的活动中,就遇过一位从头到尾都在批评员工的老板,而且还是在我们这些客人的眼前。

”手脚这么慢,用点脑袋啊,做事要有效率点啊!”
“这我不是交代过吗?同一件事情不要我一直说。“

而他不单单是只直接对他的员工批评,当他的员工离开去忙时,他仍然闭不上嘴,对着我们这些客人,神气的继续批评著他的员工。

“现在的新人真难教,一样的事情教好几次。”
”现在的员工真难用,做事的积极度都不够。“
“现在的人才真难找,都没办法帮公司赚钱。”

你会认为这是一个好老板吗?不,后来经由他人的口中得知,这正是一家永远留不住人才,也赚不了钱的公司,只是老板家里的「本」够雄厚,让他有足够的资本去「玩」生意罢了。

批评的人太多,思考的人太少。惯性又频繁的批评习惯,是没有能力创造价值的人,用来让自己好过最廉价的方式。好像只要朝別人身上多吐上两口口水,自己看起来就比较高尚一些。

批评的人太多,思考的人却太少,我们常常鼓励年轻人,要有批判性的思考能力,其实重点在于要培养「独立思考」的能力,而不是批评的动作。却总有人画错了重点,以为必须透过贬低他人方能彰显自己。

一个人花愈多的时间在別人的鸡蛋里挑骨头,就会花愈少的时间在孕育自己的鸡蛋,最后就容易变成一个「生鸡蛋无、放鸡屎有」(成事不足,败事有余)的角色。喜欢随意批评他人的人,通常缺乏检视自己的能力及习惯,因此,一个人花愈多的时间在检视他人就会愈平庸。

卡内基曾说:「只有不够聪明的人才批评,因为批评改变不了事实,还会招来怨恨。」出一张嘴批评人是很简单的一件事,只要脑袋笨一点,逻辑差一点,心胸窄一点就足矣。小心,別让自己成了「生鸡蛋无、放鸡屎有」的人。

分类: 心理 标签: