UNIX bash 스크립트에서 csv 탭 이름 바꾸기

UNIX bash 스크립트에서 csv 탭 이름 바꾸기

Bash 스크립트에서 생성된 CSV 파일이 있습니다. UNIX_REPORT.shExcel을 사용하여 WindGrr 측에서 CSV 파일을 열면 왼쪽 하단에 있는 탭(또는 시트)의 이름이 입니다 UNIX_REPORT.sh.

이 탭/시트의 이름을 스크립트 이름이 아닌 다른 이름으로 바꾸려는 결정적인 클라이언트가 있습니다. UNIX 측에서는 스크립트를 전혀 변경할 수 없으며 이 보고서는 Win 측에서 시도하기에는 너무 자주 생성됩니다.

답변1

Perl에는 CSV를 읽고 XLSX를 작성하는 모듈이 있으므로할 수 있는UNIX 측에서 이 작업을 수행하십시오.

다음과 같이 실행할 수 있습니다. 클라이언트에 보낼 수 있는 콘텐츠가 perl csv2xlsx.pl file.csv "this is the tab name"생성됩니다 .file.xlsx

#!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();

cpan을 더 자세히 살펴보면 조금 더 간단하고 결과 Excel 파일이 더 예뻐집니다.

#!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);

답변2

반대가 아니라 조작인 경우가 많습니다. 귀하의 경우에는 Windows에서 이 작업을 수행해야 한다고 생각합니다. 핵심은 작업을 자동화하는 것입니다. 이에 대해 수행할 수 있는 조치를 제안할 수 있도록 샘플 스크립트 출력을 표시해야 합니다. 즉, 사용 가능한 몇 가지 도구를 사용하여 합리적인 데이터를 추출하고 좋은 파일 이름을 구성한 다음 파일 이름을 바꾸는 Windows 스크립트를 작성합니다. 새로 명명된 파일을 Excel로 전달하는 것도 선택 사항일 수 있지만 또 다른 유용한 방법이 될 수 있습니다.

이름이 파일 내용과 관련이 없는 경우 Windows 스크립트나 응용 프로그램을 통해 시간, 날짜 및 (필요한 경우) 일부 일련 번호를 기준으로 이름을 지정할 수 있습니다.

관련 정보