명령줄에서 .xlsx(MS Excel) 파일을 .csv로 변환하고 세미콜론을 사용하여 필드를 구분합니다.

명령줄에서 .xlsx(MS Excel) 파일을 .csv로 변환하고 세미콜론을 사용하여 필드를 구분합니다.

나는 이것이라는 것을 깨닫는다아니요완전히 UNIX/Linux 관련 질문입니다. 하지만 이것이 제가 Linux에서 할 일이기 때문에 누군가 답변을 해주길 바랍니다.

.xlsx나는 (다른 사람들에 의해) 정기적으로 업데이트되는 온라인 Excel 파일( )을 가지고 있습니다 . 이 Excel 시트를 처리하기 위해 스크립트를 작성하고 이를 cronjob으로 설정하고 싶습니다. 하지만 이렇게 하려면 .csv세미콜론으로 구분된 열(따라서 a)이 있는 텍스트 파일로 변환해야 합니다. 불행히도 일부 열에는 쉼표가 있기 때문에 쉼표로 구분할 수 없습니다. 쉘에서 이 변환을 수행할 수 있습니까? Open Office가 설치되어 있고 GUI를 사용하여 이 작업을 수행할 수 있지만 명령줄에서 이 작업을 수행할 수 있는지 알고 싶습니다. 감사해요!

추신: 저는 Mac도 가지고 있습니다. Mac에서 작동하는 솔루션이 있다면 그것도 좋을 것 같습니다. :)

답변1

오픈오피스에 포함됨우노프프로그램은 명령줄에서 형식 변환을 수행합니다.

unoconv -f csv filename.xlsx

보다 복잡한 요구사항의 경우 다음을 사용하여 XLSX 파일을 구문 분석할 수 있습니다.Spreadsheet::XLSX펄에서 또는openpyxl파이썬에서. 예를 들어 워크시트를 세미콜론으로 구분된 CSV 파일로 인쇄하기 위한 빠른 스크립트는 다음과 같습니다(경고: 테스트되지 않았으므로 브라우저에 직접 입력하세요).

perl -MSpreadsheet::XLSX -e '
    $\ = "\n"; $, = ";";
    my $workbook = Spreadsheet::XLSX->new()->parse($ARGV[0]);
    my $worksheet = ($workbook->worksheets())[0];
    my ($row_min, $row_max) = $worksheet->row_range();
    my ($col_min, $col_max) = $worksheet->col_range();
    for my $row ($row_min..$row_max) {
        print map {$worksheet->get_cell($row,$_)->value()} ($col_min..$col_max);
    }
' filename.xlsx >filename.csv

답변2

https://github.com/dilshod/xlsx2csv

나에게 잘 작동합니다. Mac Book Pro SSD에서 약 85MB XLSX 파일을 변환하는 데 약 3분이 소요됩니다.

답변3

저는 펄을 사용하고 있어요xls2csv파일 xlscsv.

그것도 적용되는지는 잘 모르겠습니다 xlsx.

에 대한:

안타깝게도 일부 열에는 쉼표가 있으므로 쉼표로 구분할 수 없습니다.

이것이 참조가 소개된 이유입니다.

1,2,"data,data, more data"

답변4

나는 PHP를 사용합니다. PHPExel 라이브러리를 설치하기만 하면 됩니다.http://phpexcel.codeplex.com/ 어쩌면 XML 함수도 필요할 수도 있습니다.

이것은 내 코드입니다.

<?php

error_reporting(E_ALL);
date_default_timezone_set('Europe/London');

/** PHPExcel_IOFactory */

require_once '/home/markov/Downloads/1.7.6/Classes/PHPExcel/IOFactory.php';

$file="RIF394305.xlsx"; //PATH TO CSV FILE

// Check prerequisites

if (!file_exists($file)) {
    exit("Please run 06largescale.php first.\n");
}

$objReader = PHPExcel_IOFactory::createReader('Excel2003XML');

$objPHPExcel = $objReader->load($file);

$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'CSV');

$objWriter->save(str_replace('.xlsx', '.csv',$file));
?>

프로세스를 재개하거나 다른 Excel/CSV 형식을 사용할 수 있습니다. PHPExcel 디렉토리에 있는 다양한 PHP 파일을 살펴보세요.

관련 정보