Renomeie uma guia csv do script bash do UNIX

0

Eu tenho o arquivo CSV gerado a partir de um script bash: UNIX_REPORT.sh . Quando você abre o arquivo CSV no lado windGrr com o excel, a guia (ou folha) no canto inferior esquerdo é chamada UNIX_REPORT.sh .

Eu tenho um cliente inflexível querendo que essa aba / folha seja renomeada para algo diferente do nome do script. Eu não posso alterar o script de todo no lado do UNIX e este relatório é gerado com demasiada frequência para tentar manipular o lado do Win.

    
por SSDdude 19.09.2018 / 20:22

2 respostas

0

Perl tem módulos para ler CSV e escrever XLSX, então você pode fazer isso no lado unix.

Você executaria isso como: perl csv2xlsx.pl file.csv "this is the tab name" e criaria file.xlsx que você pode enviar para o cliente.

#!perl

use strict;
use warnings;
use autodie;
use Text::CSV;
use Excel::Writer::XLSX;

# input validation left as an exercise
my $f_csv = shift @ARGV;
(my $f_xlsx = $f_csv) =~ s/\.csv$/.xlsx/;
my $worksheet_name = shift @ARGV;

# read the CSV data
my $csv = Text::CSV->new({binary => 1});
open my $fh, "<:encoding(utf8)", $f_csv;
my @data;
while (my $row = $csv->getline($fh)) {
    push @data, $row;
}
$csv->eof or $csv->error_diag();
close $fh;

# write the xlsx
my $workbook = Excel::Writer::XLSX->new($f_xlsx);
my $worksheet = $workbook->add_worksheet($worksheet_name);
for (my $row = 0; $row < scalar @data; $row++) {
    $worksheet->write_row($row, 0, $data[$row]);
}
$workbook->close();

Pesquisando um pouco mais o cpan, isso é um pouco mais simples e o arquivo do Excel gerado é mais bonito.

#!perl

use strict;
use warnings;
use autodie;
use Text::CSV;
use Spreadsheet::GenerateXLSX   qw/generate_xlsx/;

# input validation left as an exercise
my ($f_csv, $worksheet_name) = @ARGV;
(my $f_xlsx = $f_csv) =~ s/.csv$/.xlsx/;

# read the CSV data
my $csv = Text::CSV->new({binary => 1});
open my $fh, "<:encoding(utf8)", $f_csv;
my $data = $csv->getline_all($fh);
$csv->eof or $csv->error_diag();
close $fh;

# write the xlsx
generate_xlsx($f_xlsx, $worksheet_name => $data);
    
por 19.09.2018 / 21:40
0

Com demasiada frequência, não é um argumento contra, mas para manipulação. E em suas circunstâncias, isso tem que ser no Windows, eu entendo. A chave, no entanto, é tornar a manipulação automática. Você teria que mostrar uma saída de script exemplar, para que eu pudesse sugerir o que poderia ser feito sobre isso. Em termos abstratos, eu teria um script do Windows escrito com alguma ferramenta disponível que extrairia alguns dados sensatos, criando um nome bonito e, em seguida, renomeando o arquivo. Passar o arquivo recém-nomeado para o Excel seria outro truque útil, embora possivelmente opcional.

Se o nome não puder ser relacionado ao conteúdo do arquivo, a criação por qualquer script ou aplicativo do Windows com base na hora, na data e, se necessário, em algum número ordinal, deve ser tão fácil quanto parece.

    
por 19.09.2018 / 20:50