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 これで スーパーユーザーの回答 役立つかもしれません一部の人に。
Perlスクリプトを使用します。 CPANのSpreadsheet :: ParseExcel Perlモジュールを使用してxlsファイルを解析し、csvが正常に機能するように出力します。
http://search.cpan.org/dist/Spreadsheet-ParseExcel
VBScriptを使用することもできます。
Debian/Ubuntuを使用している場合は、catdocパッケージのxls2csvを使用できます
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キーを入力することで閉じることができます。
私はそれを使用していて、うまくいきます。
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())
}
}
移植可能な[Python]ライブラリのいずれかを使用します。
pyxlreader.sourceforge.net/
sourceforge.net/projects/pyexcelerator
その上に追加のスクリプトレイヤーを作成します。
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
次
@ John Machin:私はこのフォーラムのnewbeeとしてコメントを追加できません:)
私は古いパッケージpyXLreaderを使用していませんが、-xlrdを念頭に置いて投稿します;)
1か月前に見ましたが、プロジェクトでは使用されていません。
WBR
XLSの変換を推奨: http://www.softinterface.com/Convert-XLS%5CConvert-XLS.htm
「XLSの変換」は、Excel、テキスト、およびCSV(文字/カンマ区切り)ファイル用に特別に設計された、使いやすく洗練されたExcelコンバータユーティリティです。 1つまたは多くのフォルダーにある1つまたは数千のファイルを変換/操作する必要がある場合、これがツールです。 MS Excelを使用しない場合、変換は10〜15倍速く実行できます。
以下を使用してExcel変換タスクを自動化します。
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言語の構成をサポートしています(例については ユーザーマニュアル を参照)。
あなたがCygwinを持っているなら、おそらくあなたはPythonを持っているでしょう。そうでない場合-インストールpythonそしてこれを使用してください script 。これは必要以上のものですが、簡単かつ高速に変換されます。
これらのフォーラムではかなり新しい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;