web-dev-qa-db-ja.com

GUIなしでExcel(xls)ファイルをコンマ区切り(csv)ファイルに変換する

Excelウィンドウアプリケーションを起動せずにXLSをCSV形式のファイルに変換する簡単な方法はありますか?

一部のExcel XLSワークブックをスクリプトで処理する必要があります。このため、xlsファイルをcsvファイルに変換する必要があります。これは、Excelアプリケーションから名前を付けて保存することで実行できます。しかし、これを自動化したいと思います(したがって、Excelアプリケーションウィンドウを開きません)。

ワークブックの最初のシートがCSV形式に変換されれば十分です。そのシートのデータを処理するだけです。

CygwinとExcelがシステムにインストールされています。

編集:わかりました、私はPerlで動作するソリューションを持っています。他の人が将来使用するために更新しています。

インストールした スプレッドシート:: ParseExcel モジュール。次に 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";
    }
}

更新:これも簡単に操作できるPowershellスクリプトです。現状のまま このMSDNブログおよびSO参照

$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
    }
}

更新:私は最近Windowsツールに出くわしました CSVed これで スーパーユーザーの回答 役立つかもしれません一部の人に。

21
nik

Perlスクリプトを使用します。 CPANのSpreadsheet :: ParseExcel Perlモジュールを使用してxlsファイルを解析し、csvが正常に機能するように出力します。

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

VBScriptを使用することもできます。

3
PatrickBateman

Debian/Ubuntuを使用している場合は、catdocパッケージのxls2csvを使用できます

6
Rory

Gnumeric docs から:

Gnumericは、ユーザーの介入を必要とせずにファイルを自動的に変換できます。これにより、スクリプトを使用して多数のファイルを変換できます。 Gnumericは、ファイルを自動的に変換するために使用されるプログラムであるssconvertと呼ばれるプログラムと共に配布されます。 Gnumericでサポートされているすべてのファイル形式を使用できますが、印刷システムで動作するPostscriptおよびPDFファイル形式は除きます。

このアプリケーションは、コマンドラインから、必要なオプション、入力ファイル、出力ファイルを指定して使用します。例えば、

ssconvert myfile.xls myfile.gnumeric

excel形式のファイルをGnumeric形式のファイルに変換します。

Ssconvertが読み込める利用可能なインポートおよびエクスポートファイル形式は、

ssconvert --list-importers

または

ssconvert --list-exporters

それぞれ。

他のGNUコマンドラインアプリケーションと同様に、ssconvertにはマニュアルページが含まれています。このページには、次のように入力してアクセスできます。

man ssconvert

マニュアルページが開きます。このページは、スペースバーを入力するか、Page UpおよびPage Downボタンを使用してナビゲートできます。 manプログラムは、qキーを入力することで閉じることができます。

私はそれを使用していて、うまくいきます。

4
Marcello Nuccio

Javaの世界では、Apache poiを使用できます。次のGroovyスニペットから開始できます。

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())
  }

}
4
jens

移植可能な[Python]ライブラリのいずれかを使用します。

pyxlreader.sourceforge.net/

sourceforge.net/projects/pyexcelerator

その上に追加のスクリプトレイヤーを作成します。

2
Denis Barmenkov

Excelをデータソースとして使用でき、データベースとしてExcelにアクセスできるドライバーがあります。

1.)CSVに変換するExcelファイルへの接続を作成して開きます。

2.)「SELECT * From 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.Arguments For I = 0をobjArgs.Count-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

1
Rasterman

@ John Machin:私はこのフォーラムのnewbeeとしてコメントを追加できません:)

私は古いパッケージpyXLreaderを使用していませんが、-xlrdを念頭に置いて投稿します;)

1か月前に見ましたが、プロジェクトでは使用されていません。

WBR

0
Denis Barmenkov

XLSの変換を推奨: http://www.softinterface.com/Convert-XLS%5CConvert-XLS.htm

「XLSの変換」は、Excel、テキスト、およびCSV(文字/カンマ区切り)ファイル用に特別に設計された、使いやすく洗練されたExcelコンバータユーティリティです。 1つまたは多くのフォルダーにある1つまたは数千のファイルを変換/操作する必要がある場合、これがツールです。 MS Excelを使用しない場合、変換は10〜15倍速く実行できます。

以下を使用してExcel変換タスクを自動化します。

  • 内蔵スケジューラ
  • コマンドライン
  • インターフェースCOMインターフェース
0
William Leara

Alacon- Alasql データベース用のコマンドラインユーティリティで実行できます。

Node.jsで動作するため、 Node.js をインストールしてから Alasql パッケージをインストールする必要があります。

> npm install alasql

ExcelファイルをCVS(ot TSV)に変換するには、次のように入力します。

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

Alaconは他のタイプの変換(CSV、TSV、TXT、XLSX、XLS)とSQL言語の構成をサポートしています(例については ユーザーマニュアル を参照)。

0
agershun

あなたがCygwinを持っているなら、おそらくあなたはPythonを持っているでしょう。そうでない場合-インストールpythonそしてこれを使用してください script 。これは必要以上のものですが、簡単かつ高速に変換されます。

0
praavDa

これらのフォーラムではかなり新しいiamであり、タイムスタンプ(pet peeve)に年を付ければいいので、投稿の年齢がわかります。 iamは2009年からのものであると想定します。

pythonでの良い解決策は、xlrdを使用してxlsファイルを読み取ることです。これは、非常に簡単な導入チュートリアルです。 http://scienceoss.com/read-Excel- files-from-python / 私のものではありません。

唯一の問題はExcelの日付でした。ここにそれらのための迅速な修正があります:

日付= xlrd.xldate_as_Tuple(int(sheet.cell(rowNum、colNum).value)、workBookName.datemode)

組み込みのcsvモジュールでcsvファイルを作成するよりも、新しいユーザーとして、私はハイパーリンクを1つだけ投稿できます。しかし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; 
0
Mr.P