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


31

나는 이것이 전적으로 유닉스 / 리눅스 관련 질문 이 아니라는 것을 알고 있습니다. 그러나 이것이 리눅스에서 할 일이기 때문에 누군가가 대답하기를 바랍니다.

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

추신 : 나는 Mac 컴퓨터도 가지고 있기 때문에 일부 솔루션이 작동 할 수 있다면 좋습니다. :)

답변:


21

OpenOffice는 unoconv 프로그램 과 함께 제공되어 명령 행에서 형식 변환을 수행합니다.

unoconv -f csv filename.xlsx

보다 복잡한 요구 사항을 위해서는 XLSX 파일을 Spreadsheet::XLSXPerl 또는 openpyxlPython으로 구문 분석 할 수 있습니다 . 예를 들어, 워크 시트를 세미콜론으로 구분 된 CSV 파일 (경고 : 테스트되지 않은, 브라우저에 직접 입력)로 인쇄하는 quickie 스크립트는 다음과 같습니다.

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

unoconv는 내 OO와 함께 제공되지 않았지만 설치했으며 훌륭하게 작동합니다 (세미콜론이 아닌 쉼표로 구분 된 파일로 변환)! 감사! 여전히 쉼표가 포함 된 필드를 얻는 방법을 알아 내야합니다. 그러나 어쨌든 감사합니다.
allrite

@allrite 오, 분리 자로 세미콜론의 요구 사항을 놓쳤습니다. 파이썬이나 펄에서 처리를 할 제안은 여전히 ​​유효합니다. 그러나 ;구분 기호 로 CSV로 변환하는 스크립트 (예상치 않은)를 추가했습니다 .
Gilles 'SO- 악의를 그만두십시오

감사! Spreadsheet :: XLSX를 사용했지만 제공 한 CPAN 링크의 코드를 사용했습니다. 작동 :)
allrite



6

Perl의 xls2csv 를 사용하여 xls파일을 로 변환하고 있습니다 csv.

그것이 작동하는지 확실하지 않습니다 xlsx.

약:

불행히도 일부 열에는 쉼표가 있으므로 쉼표로 구분할 수 없습니다

이것이 인용이 도입 된 이유입니다.

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

팁 주셔서 감사합니다, 나는 그것을 시도합니다. CSV 변환 후 파일이 awk스크립트를 통과하기 때문에 세미콜론으로 구분하는 것이 좋습니다. 그리고 필드 구분자로 세미콜론을 전달하는 것이 더 쉽습니다 awk. 따옴표 안에 쉼표를 사용하여 다른 것으로 바꿀 수 있습니다 ... 이제 다른 질문입니다 :)
allrite

@neurino에게 감사합니다. 대신 Gilles 방법을 사용했지만 어쨌든 답장을 보내 주셔서 감사합니다.
allrite

1

PHP를 사용합니다. http://phpexcel.codeplex.com/ 에서 PHPExel 라이브러리를 설치하고 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 파일을보십시오.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.