- 论坛徽章:
- 0
|
#!/usr/bin/perl -w
use strict;
use warnings;
use DBI;
use Encode;
use strict;
use Time::localtime;
use Data: umper;
use Time::Local;
use Spreadsheet: arseExcel;
use Spreadsheet::WriteExcel;
use Spreadsheet: arseExcel::FmtUnicode;
use Encode;
my $parser = new Spreadsheet: arseExcel;
my $oCode = "cp936";
my $oFmtJ = Spreadsheet: arseExcel::FmtUnicode->new(Unicode_Map => $oCode);
my $workbook = Spreadsheet::WriteExcel->new('Products.xls');
my $worksheet = $workbook->add_worksheet();
my $format = $workbook->add_format();
$format->set_bold();
$format->set_color('red');
$format->set_align('center');
my @data;
my $sth;
my $sth_a;
my $i;
my $dbh = DBI->connect( 'DBI:mysql:gs',
'root',
'welcome123',
{RaiseError=>1,AutoCommit=>0}
)
|| die "Database connection not made: $DBI::errstr";
my $inventory_a;
my @data_a;
my $row = 1;
my $inventory_b = q{
select distinct p.id, p.catalog, p.title, p.cas, p.symbol, pxx.ava, p.purity, iv.stock1, iv.stock2, iv.price1, iv.price2
from
product as p
left join pxx as pxx on pxx.id = p.id
left join inventory as iv on iv.pid = p.id
left join inventory_xx as ivxx on ivxx.pid = p.id
where p.status='Active'
};
$sth = $dbh->prepare($inventory_b);
$sth->execute() or die $DBI::errstr;
while(@data = $sth->fetchrow_array()) {
for($i=0;$i<$#data;$i++) {
if(!defined($data[$i])) {
next;
}
if(isASCII($data[$i])) {
$worksheet->write($row,$i,$data[$i]);
} else {
$worksheet->write($row,$i,decode('utf16-BE',$data[$i]));
}
}
# get the size and price
$inventory_a= qq{
SELECT `size`, `price`
FROM `pxx` where id = '$data[0]'
};
$sth_a = $dbh->prepare($inventory_a);
$sth_a->execute() or die $DBI::errstr;
#print "$inventory_a\n";
my $extend = 11;
while(@data_a = $sth_a->fetchrow_array())
{
for($i=0;$i<=$#data_a;$i++) {
$extend = $extend + 1;
if(!defined($data_a[$i])) {
next;
}
#print "$data_a[$i]\n";
if(isASCII($data_a[$i])) {
$worksheet->write($row,$extend,$data_a[$i]);
} else {
$worksheet->write($row,$extend,decode('utf16-BE',$data_a[$i]));
}
}
}
$sth_a->finish();
#$dbh->disconnect();
$row++;
}
$sth->finish();
$dbh->disconnect();
sub isASCII {
for my $v ( split(//,$_[0]) ) {
return 0 if (ord($v) == 0);
}
return 1;
} |
|