App-Bin4TSV
view release on metacpan or search on metacpan
scripts/xlsx2tsv view on Meta::CPAN
#!/usr/bin/perl
use 5.014 ; use warnings ;
use feature qw [ say ] ;
use Time::HiRes qw[gettimeofday tv_interval] ; my ${ dt_start } = [ gettimeofday ] ;
use Term::ANSIColor qw [ :constants color ] ; $Term::ANSIColor::AUTORESET = 1 ;
use Getopt::Std ; getopts '2:d:n:s:x:' , \my%o;
#use File::Spec::Functions qw[ catfile splitdir rel2abs updir ] ;
use POSIX qw[ strftime ] ;
use Spreadsheet::XLSX ;
use Text::Iconv ;
use Encode qw[ decode encode_utf8 ] ;
sub n2Xcol ($) { my $c = $_[0] ; my $t='A' ; $t++ while $c-- ; $t } # æ°å¤ãA,..,Z,AA,..ZZ,AAA. ã«å¤æãã颿°ãå¹çã¯è¯ããªãã
sub nl2some ($) { ! defined $o{n} ? $_[0] // '' : do { $_ = $_[0] // '' ; s/\r\n/$o{n}/gr } } # ã»ã«å
æ¹è¡ãé©å½ã«ç½®ããããã
my ${ sheet_num } = 0 ; # ã·ã¼ãã®ææ°
my ${ sheet_name } = "" ;
my ($r1, $r2 , $c1 , $c2 ) ; # å¦çããã·ã¼ãå
ã§ã®å·¦ä¸ã¨å³ä¸ã®åº§æ¨
my $filename = $o{x} // $ARGV[0] // do { say STDERR BOLD DARK YELLOW "Specify a '.xlsx' file:" ; say glob '*.xlsx' ; exit 1 } ;
END{
my @out ;
push @out , "$sheet_num sheet(s) in '$filename'" ;
$r1++; $r2++; $c1++; $c2++ ; # æå¾ãªã®ã§ç ´å£çãªæä½ãå ããã
$sheet_name = encode_utf8 $sheet_name ;
push @out , "processed sheet: '$sheet_name' with Row: $r1..$r2, Col: $c1..$c2" ;
push @out , sprintf "%0.6f sec calculation (%s)." , tv_interval ( $dt_start ) , $0 =~ s/.*\///r ;
push @out , sprintf 'done %04d-%02d-%02d %02d:%02d:%02d' , do {my @t = @{[localtime]}[5,4,3,2,1,0] ; $t[0]+=1900 ; $t[1]++ ; @t } ;
say STDERR DARK BOLD ITALIC GREEN join "; " , @out if ! $o{2}//'' eq '0'
}
# æåã³ã¼ãã®æå®ã®ä¸è¦§:
## ãããããªå®é¨ãããã®ã§ããã®æã«ä½¿ã£ãæåã³ã¼ããæ®ãæå³ã§ãé
åã®ãããªå½¢ã§å®é¨ã«ä½¿ã£ãæåã³ã¼ããæ®ãã1 ã§å·¦ãã2çªç®ãæ¡ç¨ãã¦ãããã¨ã示ã
### ãã¼ãæ°å : â
, â
¡, â
¢, â
¤ ; 丸æ°å : â â¡â²â³ ; å
¨è§ãã¤ãã³ãã¤ãã¹ ï¼ ;
my ${ cc4out } = ':utf8' ;
my ${ cc4iconv } = qw[ shift_jisx0213 cp932 windows-1251 utf-8 ] [1] ; # ã¨ã¯ã»ã«ãã¡ã¤ã«ãéãéã«ç¨ããããiconvéæ¹åãªã®ãæ°ã«ãªãã
my ${ cc4sheet } = qw[ Shift_JIS cp932 ] [1]; # ã·ã¼ãåã®æååã®ãæåã³ã¼ã夿ã«ç¨ããã
my ${ cc4cell } = qw[ ms932 cp932 Shift_JIS ] [1] ; # åã»ã«ã®æååã®ãæåã³ã¼ã夿ã«ç¨ããããã¼ãåã丸æ°åãå
¨è§ãã¤ãã³ãã¤ãã¹ã§..
& main () ;
exit ;
sub main () {
my $converter = Text::Iconv -> new ("utf-8", ${ cc4iconv } ); # 1251 ---> 932 (shift_jis)
my $excel = Spreadsheet::XLSX -> new ( $filename , $converter ) ; # (1)
my @sheets = @{ $excel ->{ Worksheet } } ; # (2)
# ã·ã¼ãã®ææ°ãåãåºã
$o{d} //= '' ;
${ sheet_num } = @sheets ;
do { say scalar @sheets ; exit if ! defined $o{s} } if $o{d} =~ m's'i ;
## ã¾ãã·ã¼ããåãåºãã-s ãç¡ããã°ã·ã¼ãåä¸è¦§ãåå¾ãã¦ããã«çµäºã
binmode STDOUT, ${ cc4out } ; # ãã®åã¯$filenameã®æ ¼ç´ããæããå¾ãã«æ¥ãã
$o{s} = $o{s} || do { say for (GREEN 'The sheet names:'), map { decode ${ cc4sheet } , $_ -> { Name } } @sheets ; exit } ;
my $s = $sheets [ $o{s} - 1 ] ; # ããã·ã¼ãã表ããªãã¸ã§ã¯ã
${ sheet_name } = decode ${ cc4sheet } , $s -> { Name } ;
# -dã®ãã©ã¡ã¼ã¿ã«å¾ã£ã¦ãã¼ãã«ã®è¡ã¨åã®ç¯å²ãåãåºãã
($r1, $r2 , $c1 , $c2 ) = ( $s->{MinRow} , $s ->{MaxRow} , $s -> {MinCol} , $s -> {MaxCol} ) ; # (3)
say $r1+1 , ".." , $r2+1 if $o{d} =~ '1' ; # è¡ç¯å²ã®åºå
say $c1+1 , ".." , $c2+1 if $o{d} =~ '2' ; # åç¯å²ã®åºå
say n2Xcol $c1 , ".." , n2Xcol $c2 if $o{d} =~ m'A'i ; # -Aæå®ã§ãåç¯å²ã A,..,Z,AA..ZZã§æç®ãã¦è¡¨ç¤º
exit if $o{d} =~ m/0/ || defined $o{p} && $o{p} eq '0' ;
# ã»ã«ã®ä¸èº«ãåãåºã
for my $r ( $r1 .. $r2 ) {
my @line = map { nl2some decode ${ cc4cell } , $_ -> { Val } } map $s->{Cells}[$r][$_] , $c1 .. $c2 ; # (4)
say join "\t" , map $_ // '' , @line ;
}
}
## ãã«ãã®æ±ã
sub VERSION_MESSAGE {}
sub HELP_MESSAGE {
use FindBin qw[ $Script ] ;
$ARGV[1] //= '' ;
open my $FH , '<' , $0 ;
while(<$FH>){
s/\$0/$Script/g ;
print $_ if s/^=head1// .. s/^=cut// and $ARGV[1] =~ /^o(p(t(i(o(ns?)?)?)?)?)?$/i ? m/^\s+\-/ : 1;
}
close $FH ;
$o{v} = 0 ;
exit 0 ;
}
=encoding utf8
=head1
xlsx2tsv -s ã·ã¼ãçªå· ãã¡ã¤ã«.xlsx
xlsx2tsv -x ãã¡ã¤ã«.xlsx -s ã·ã¼ãçªå·
ã·ã¼ãçªå·ã¯1ãªãªã¸ã³ã¨ããã
0ãæå®ãããå ´åã¯ãã·ã¼ãåã®ä¸è¦§ãåºåããã
ãªãã·ã§ã³:
-d STR : dã§dimensionãæå³ãããæ¬¡ã®åé¡ãåç
§â
-d s : ã·ã¼ãã®ææ°ã表示ããã
-d 1 : è¡çªå·ã®ç¯å²ã¾ãã¯æå¤§ã®è¡æ°ã表示ã-- MinRowã¨MaxRowã表示ã
-d 2 : åçªå·ã®ç¯å²ã¾ãã¯æå¤§ã®åæ°ã表示ã-- MinColã¨MaxColã表示ã
-d A : åçªå·ã®ç¯å²ã¾ãã¯æå¤§ã®åæ°ãã¨ã¯ã»ã«ã®å½¢å¼ã§è¡¨ç¤º-- MinRowã¨MaxRowã表示ã
-d ??0 : 0ãå«ã¾ãã¦ããããã»ã«ã®ä¸èº«ã¯è¡¨ç¤ºããªãã
-n "//" ; ã»ã«ã®ä¸ã®æ¹è¡ãæå®ããæå(ããã§ã¯ // )ã«ç½®ããããã
-s N : 1å§ã¾ãã§ã·ã¼ãã®çªå·ãæå®
-x file.xlsx : ãã¡ã¤ã«åã®ãªãã·ã§ã³ã使ãæå®ã(夿°æå®ã®é åºã®èæ
®ãç°¡åã«ãªãã)
-20 : ä¸è¡ãµããªã®æ
å ±ã®åºåã®æå¶ã
éçºã¡ã¢:
* æåã³ã¼ãåããã¼ãã³ã¼ããã¦ããé¨åãæ´ç·´ãããã
* 次å
æ
å ±(è¡æ°ã¨åæ°)ã¯ãæå¾ã«æ¨æºã¨ã©ã¼åºåã«è¡¨ç¤ºãããªãã·ã§ã³ã欲ããããã
( run in 0.446 second using v1.01-cache-2.11-cpan-0bb4e1dffa6 )