2011年12月25日 星期日

CSV 轉 XLS

這隻程式主要是拿來把CSV轉成XLS格式的檔案,寫工作日誌本來輸出CSV檔好好的,就有人要統一格式,還好對我來說蛋糕一塊,用強大的技術力給他碾過去就好,要什麼格式有什麼格式,別人努力的每週寫報告喬格式,我就用一支per/tk寫的GUI填寫就好。


#!/usr/bin/perl -w

use strict;
use Spreadsheet::WriteExcel;
use utf8;
use Encode;

# Check for valid number of arguments
if ((@ARGV < 1) || (@ARGV > 2)) {
   die("Usage: csv2xls csvfile.txt newfile.xls\n");
};

# Open the Comma Separated Variable file
open (CSVFILE, $ARGV[0]) or die "$ARGV[0]: $!";

# Create a new Excel workbook
my $workbook  = Spreadsheet::WriteExcel->new($ARGV[1]);
my $worksheet = $workbook->add_worksheet();
$worksheet->set_column(0, 0,  12);
$worksheet->set_column(1, 1,  10);
$worksheet->set_column(2, 2,  30);
$worksheet->set_column(3, 3,  90);

my $uni_font  = $workbook->addformat(font => 'Arial Unicode MS');
$uni_font->set_bold(1);
$uni_font->set_border_color('black');
$uni_font->set_border(5);
$uni_font->set_text_wrap() ;
$uni_font->set_align('vjustify');
my $row = 0;

my $tempStr="";
while () {
 $tempStr.=$_; 
 if($_ =~ /\"\n/){
  my @fields=split /\,\"/,$tempStr;
  my $col=0;
  foreach my $field(@fields){
   $field=~s/\"//g;
   chomp($field);
   my $location=sprintf("%c%d",($col%26)+0x41,$row+1);
   $worksheet->write($location, decode('utf8',$field),$uni_font);
   $col++;
  }
  $row++;
  $tempStr="";
 }
}


沒有留言:

張貼留言