perl 写excel,支持中文

e warnings;
use DBI;
use Spreadsheet::WriteExcel;
use Encode; #support Chinese
# connect
my $dbh = DBI->connect("DBI:mysql:database=newbbk;host=127.0.0.1;port=3306", "root", "root", {'RaiseError' => 1,AutoCommit => 0});
$dbh->do('set names utf8');
$dbh->commit();
&fix_school_by_city();
$dbh->disconnect();
sub fix_school_by_city(){
	my $statement = "SELECT province_id, province_name from d_province;";
	my $sth = $dbh->prepare($statement);
	unless($sth){
		print "Can't prepare $statement: $dbh->errstr/n";
		return;
	}   
	my $rv = $sth->execute();
	unless($rv){
		print "can't execute the query: $sth->errstr";
		return;
	}   
	while(my @row = $sth->fetchrow_array) {
		my ($pid,$pname) = @row[0..1];
		next unless($pid =~/^(\d)+$/ and $pname);
		my $dest_pbook  = Spreadsheet::WriteExcel->new("$pname.xls"); # not support xlsx
		my $cstatement = "SELECT city_id, city_name from d_city where province_id=$pid;";
		my $csth = $dbh->prepare($cstatement);
		my $crv = $csth->execute();
		return unless($crv);
		while(my @crow = $csth->fetchrow_array) {
			my ($cid,$cname) = @crow[0..1];
			next unless($cid =~/^(\d)+$/ and $cname);
			my $worksheet=$dest_pbook->add_worksheet(decode('UTF8',"$cname"));
			my $sstatement = "SELECT school_id,school_name from d_school where region_id=$cid;";
			my $ssth = $dbh->prepare($sstatement);
			my $srv = $ssth->execute();
			return unless($srv);
			my $i=1;
			$worksheet->write(0,0,decode('UTF8','学校id'));
			$worksheet->write(0,1,decode('UTF8',"学校名称"));
			while(my @srow = $ssth->fetchrow_array) {
				my ($sid,$sname) = @srow[0..1];
				next unless($sid =~/^(\d)+$/ and $sname);
				$worksheet->write($i,0,decode('UTF8',$sid));
				$worksheet->write($i,1,decode('UTF8',"$sname"));
				$i++;
			}
		}
		$dest_pbook->close();
	}
}


说明:将数据库中的学校信息,按省分成excel文件,按市分成worksheet

支持中文

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值