programing

GUI 없이 Excel(xls) 파일을 쉼표로 구분된(csv) 파일로 변환

newstyles 2023. 6. 18. 12:26

GUI 없이 Excel(xls) 파일을 쉼표로 구분된(csv) 파일로 변환

Excel 창 응용 프로그램을 시작하지 않고 XLS를 CSV 형식의 파일로 변환하는 간단한 방법이 있습니까?

스크립트가 포함된 Excel XLS 워크북을 처리해야 합니다.이를 위해 xls 파일을 csv 파일로 변환해야 합니다.이 작업은 Excel 응용 프로그램의 save-as를 사용하여 수행할 수 있습니다.하지만 저는 이것을 자동화하고 싶습니다(따라서 엑셀 애플리케이션 창을 열지 않습니다).

워크북의 첫 번째 시트를 CSV 형식으로 변환하면 충분합니다.저는 그 시트의 데이터만 처리하면 됩니다.

제 시스템에 Cygwin과 Excel이 설치되어 있습니다. 도움이 된다면요.

편집: 네, Perl로 작동하는 솔루션이 있습니다.다른 사용자가 나중에 사용할 수 있도록 업데이트합니다.

스프레드시트를 설치했습니다.:Excel 모듈을 구문 분석한 다음 read-excel.pl 샘플을 사용합니다.

제 코드는 아래와 같이 이 샘플 코드를 약간 변형한 것입니다.

#!/usr/bin/perl -w
# For each tab (worksheet) in a file (workbook),
# spit out columns separated by ",",
# and rows separated by c/r.

use Spreadsheet::ParseExcel;
use strict;

my $filename = shift || "Book1.xls";
my $e = new Spreadsheet::ParseExcel;
my $eBook = $e->Parse($filename);
my $sheets = $eBook->{SheetCount};
my ($eSheet, $sheetName);

foreach my $sheet (0 .. $sheets - 1) {
    $eSheet = $eBook->{Worksheet}[$sheet];
    $sheetName = $eSheet->{Name};
    print "#Worksheet $sheet: $sheetName\n";
    next unless (exists ($eSheet->{MaxRow}) and (exists ($eSheet->{MaxCol})));
    foreach my $row ($eSheet->{MinRow} .. $eSheet->{MaxRow}) {
        foreach my $column ($eSheet->{MinCol} .. $eSheet->{MaxCol}) {
            if (defined $eSheet->{Cells}[$row][$column])
            {
                print $eSheet->{Cells}[$row][$column]->Value . ",";
            } else {
                print ",";
            }
        }
        print "\n";
    }
}

업데이트: 이 MSDN 블로그 SO 레퍼런스에서 현재 상태로 작업할 수 있는 Powershell 스크립트가 있습니다.

$excel = New-Object -comobject Excel.Application
$workbooks = $excel.Workbooks.Open("C:\test.xlsx")
$worksheets = $workbooks.Worksheets
$worksheet = $worksheets.Item(1)
$range = $worksheet.UsedRange
foreach($row in $range.Rows)
{
    foreach($col in $row.Columns)
    {
        echo $col.Text
    }
}

업데이트: 최근에 이 Superuser 답변에서 CSV로 표시된 Windows 을 발견했는데, 이 툴은 일부 사용자에게 유용할 수 있습니다.

데비안/우분투에 있는 경우 catdoc 패키지에서 xls2csv를 사용할 수 있습니다.

자바 세계에서는 아파치 포이를 사용할 수 있습니다.다음 그루비 스니펫에서 시작할 수 있습니다.

FileInputStream fis = new FileInputStream(filename);
Workbook wb = new HSSFWorkbook(fis); 
Sheet sheet = wb.getSheetAt(0);
for (Row row : sheet) {
  for (Cell cell : row) {
    doSomething(cell.toString())
  }

}

Gnumeric 문서에서:

Gnumeric은 사용자 개입 없이 파일을 자동으로 변환할 수 있습니다.이를 통해 스크립트를 사용하여 많은 수의 파일을 변환할 수 있습니다.은 Gnumeric이라는 프로그램과 됩니다.ssconvert파일을 자동으로 변환하는 데 사용되는 프로그램입니다.Gnumeric에서 지원하는 모든 파일 형식은 인쇄 시스템을 통해 작동하는 Postscript 및 PDF 파일 형식을 제외하고 사용할 수 있습니다.

이 응용 프로그램은 원하는 옵션, 입력 파일 및 출력 파일을 지정하여 명령줄에서 사용됩니다.예를들면,

ssconvert myfile.xls myfile.gnumeric

Excel 형식 파일을 G숫자 형식 파일로 변환합니다.

ssconvert가 읽을 수 있는 사용 가능한 가져오기 및 내보내기 파일 형식은 다음을 사용하여 나열할 수 있습니다.

ssconvert --list-importers

또는

ssconvert --list-exporters

각각 다음과 같다.

다른 GNU 명령줄 응용 프로그램과 마찬가지로 ssconvert에는 수동 페이지가 포함되어 있습니다.다음을 입력하여 이 페이지에 액세스할 수 있습니다.

man ssconvert

메뉴얼 페이지가 열립니다.스페이스 바를 입력하거나 페이지 위로 및 페이지 아래로 단추를 사용하여 이 페이지를 탐색할 수 있습니다.맨 프로그램은 q 키를 입력하여 해제할 수 있습니다.

저는 그것을 사용하고 있고 잘 작동합니다.

Perl 스크립트를 사용합니다.스프레드시트 사용:CPAN에서 Excel perl 모듈을 구문 분석하여 xls 파일을 구문 분석한 후 csv가 정상적으로 작동할 것이므로 출력을 구문 분석합니다.

http://search.cpan.org/dist/Spreadsheet-ParseExcel

VBScript를 사용해 볼 수도 있습니다.

휴대용 [Python] 라이브러리 중 하나를 사용합니다.

파이xl 판독기sourceforge.net/

sourceforge.net/projects/pyexcelerator

그 위에 스크립트 레이어를 추가로 만듭니다.

Excel은 데이터 소스로 사용할 수 있으며 데이터베이스로 Excel에 액세스할 수 있는 드라이버가 있습니다.

1.) CSV로 변환할 EXCEL 파일에 대한 연결을 만들고 엽니다.

2.) "SELECT * Sheet1에서"와 같은 쿼리를 실행하면 Sheet1의 모든 데이터가 레코드 세트 또는 데이터 테이블에 로드됩니다.

3.) .net을 사용하고 있기 때문에 데이터 테이블에 레코드를 저장하고 다음 확장 방법을 사용하여 CSV로 변환할 수 있습니다.

        public static string ToCSV(this DataTable _dataTable)
        {
            StringBuilder csv = new StringBuilder();
            StringWriter sw = new StringWriter(csv);
            int icolcount = _dataTable.Columns.Count;
            for (int i = 0; i < icolcount; i++)
            {
                sw.Write(_dataTable.Columns[i]);
                if (i < icolcount - 1)
                {
                    sw.Write(",");
                }
            }
            sw.Write(sw.NewLine);
            foreach (DataRow drow in _dataTable.Rows)
            {
                for (int i = 0; i < icolcount; i++)
                {
                    if (!Convert.IsDBNull(drow[i]))
                    {
                        sw.Write(drow[i].ToString());
                    }
                    if (i < icolcount - 1)
                    {
                        sw.Write(",");
                    }
                }
                sw.Write(sw.NewLine);
            }
            sw.Close();
            return csv.ToString();
        }

작업 중인 플랫폼에서 이 접근 방식을 적용할 수 있습니다.

감사해요.

VBS 스크립트와 그것은 멋진 작동을 합니다. http://www.go4expert.com/forums/showthread.php?t=18188

objArgs = WScript를 설정합니다.I = 0 to objArgs에 대한 인수입니다.카운트 - 1

FullName = objArgs(I)
FileName = Left(objArgs(I), InstrRev(objArgs(I), ".") )

Set objExcel = CreateObject("Excel.application")
set objExcelBook = objExcel.Workbooks.Open(FullName)

objExcel.application.visible=false
objExcel.application.displayalerts=false

objExcelBook.SaveAs FileName & "csv", 23

objExcel.Application.Quit
objExcel.Quit   

Set objExcel = Nothing
set objExcelBook = Nothing

다음 분.

XLS 변환 권장: http://www.softinterface.com/Convert-XLS%5CConvert-XLS.htm

'Convert XLS'는 Excel, 텍스트 및 CSV(문자/콤마 구분) 파일을 위해 특별히 설계된 사용하기 쉽지만 정교한 Excel 변환기 유틸리티입니다.하나 이상의 폴더에 위치한 하나 또는 수천 개의 파일을 변환/조작해야 하는 경우 이 도구가 바로 이 도구입니다!MS Excel 없이도 10-15배 더 빠르게 변환할 수 있습니다.

다음을 사용하여 Excel 변환 작업을 자동화합니다.

  • 내장 스케줄러
  • 명령줄
  • 인터페이스 COM 인터페이스

만약 당신이 Cygwin을 가지고 있다면, 아마도 당신은 Python을 가지고 있을 것입니다.그렇지 않은 경우 - python을 설치하고 이 스크립트를 사용합니다.필요한 것보다 훨씬 많지만 쉽고 빠르게 변환할 수 있습니다.

John Machin:저는 이 포럼의 신입이기 때문에 의견을 추가할 수 없습니다 :)

저는 오래된 패키지 pyXLreader를 사용하지 않았지만 xlrd를 염두에 두고 게시물을 작성했습니다;)

저는 그것을 한 달 전에 보았지만 프로젝트에 사용되지 않았습니다.

WBR

저는 이 포럼들에 꽤 새로 왔고, 만약 그들이 타임스탬프(petepe)에 연도를 올려놓는다면 좋을 것입니다. 그래서 저는 게시물이 얼마나 오래되었는지 압니다. 저는 그것들이 2009년부터라고 가정할 것입니다.

하지만 파이썬에서 좋은 해결책은 xlrd를 사용하여 xls 파일을 읽는 것입니다.여기 꽤 간단한 입문서가 있습니다: http://scienceoss.com/read-excel-files-from-python/ 그건 제 것이 아닙니다.

내가 가진 유일한 문제는 엑셀 데이트였습니다.여기 그들을 위한 빠른 해결책이 있습니다.

date = xlrd.xlddate_as_module(int( sheet.cell(행 번호, colNum).value), workBookName.date 모드)

내장된 csv 모듈로 csv 파일을 만드는 것보다, 나는 새로운 사용자이기 때문에 하이퍼링크를 하나만 올릴 수 있지만, csv 모듈 api를 구글에 검색합니다.

그것이 도움이 되었기를 바랍니다.

내 해결책:

use Spreadsheet::BasicRead;

my $xls = 'file.xls';   
my $csv = 'file.csv';

   my $ss = new Spreadsheet::BasicRead($xls) or die "Could not open '$xls': $!";
   my $name = '';
   my $row = 0;

   open(FILE, ">$csv") or die "Could not open : $!\n";
      flock(FILE, 2) or die "Could not lock file\n"; 

        while (my $data = $ss->getNextRow()){
            $row++;
            $name = join(';',@$data);         
            print FILE $name."\n" if ($name ne "");
        }

      flock(FILE, 8); 
   close FILE; 

Alasql 데이터베이스에 대한 Alacon - 명령줄 유틸리티를 사용하여 이 작업을 수행할 수 있습니다.

Node.js와 함께 작동하므로 Node.js를 설치한 다음 Alasql 패키지를 설치해야 합니다.

> npm install alasql

Excel 파일을 TSV가 아닌 CVS로 변환하려면 다음을 입력합니다.

> node alacon "SELECT * INTO CSV('mydata.csv', {headers:true}) FROM XLS('mydata.xls', {headers:true})"

Alacon은 다른 유형의 변환(CSV, TSV, TXT, XLSX, XLS) 및 SQL 언어 구성을 지원합니다(예: 사용 설명서 참조).

언급URL : https://stackoverflow.com/questions/943153/converting-an-excel-xls-file-to-a-comma-separated-csv-file-without-the-gui