将Excel(xls)文件转换为不带GUI的逗号分隔(csv)文件
有没有一种简单的方法来将XLS转换为CSV格式的文件,而无需启动Excel窗口化的应用程序?
我需要用脚本处理一些Excel XLS工作簿。 为此,我需要将xls文件转换为csv文件。 这可以通过Excel应用程序的保存来完成。 但是,我想自动化这(所以,不要打开Excel应用程序窗口)。
如果将工作簿中的第一张工作表转换为CSV格式就足够了。 我只需要在表格中处理数据。
我的系统上安装了Cygwin和Excel,如果有帮助的话。
编辑:好吧,我有一个Perl的工作解决scheme。 更新以供将来由他人使用。
我安装了Spreadsheet :: 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模块parsingxls文件,然后输出为csv应该可以正常工作。
http://search.cpan.org/dist/Spreadsheet-ParseExcel
你也可以尝试使用VBScript。
如果你在Debian / Ubuntu上,你可以使用catdoc包中的xls2csv
在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()) } }
从Gnumeric文档 :
Gnumeric可以自动转换文件,无需用户干预。 这允许使用脚本来转换大量的文件。 Gnumeric与一个名为
ssconvert
的程序一起分发,该程序是用来自动转换文件的程序。 Gnumeric支持的所有文件格式都可以使用,除了通过打印系统操作的Postscript和PDF文件格式之外。这个应用程序在命令行中通过指定使用任何所需的选项,一个input文件和一个输出文件。 例如,
ssconvert myfile.xls myfile.gnumeric
将Excel格式文件转换为Gnumeric格式文件。
ssconvert可以读取的可用导入和导出文件格式可以使用列出
ssconvert --list-importers
要么
ssconvert --list-exporters
分别。
像其他GNU命令行应用程序一样,ssconvert包含一个手册页面。 通过input以下内容可以访问此页面:
man ssconvert
这将打开手册页面。 可以通过键入空格键或使用Page Up和Page Downbutton来导航此页面。 man程序可以通过inputq键来解除。
我使用它,运作良好。
使用便携式[Python]库之一:
pyxlreader.sourceforge.net/
sourceforge.net/projects/pyexcelerator
并在其上创build额外的脚本层。
Excel可以用作数据源,并且有可用的驱动程序作为数据库访问EXCEL。
1.)创build并打开EXCEL文件的连接,将其转换为CSV文件。
2.)启动一个类似于“SELECT * From Sheet1”的查询,这会将Sheet1的所有数据加载到logging集或数据表中。
3.)由于我使用.net,我可以将这些logging保存在数据表中,并使用以下扩展方法将其转换为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对于I = 0 to 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
下一个
build议转换XLS: http : //www.softinterface.com/Convert-XLS%5CConvert-XLS.htm
“转换XLS”是一个简单易用,但复杂的Excel转换工具,专门为Excel,文本和CSV(字符/逗号分隔)文件devise的。 如果您需要转换/操纵一个或数千个文件,位于一个或多个文件夹,这是工具! 无需MS Excel,转换速度可以提高10-15倍。
使用以下方式自动执行Excel转换任务:
- 内置调度器
- 命令行
- 接口COM接口
如果你有Cygwin,最有可能你会有Python。 如果没有 – 安装python并使用这个脚本 。 它比你需要的要多得多,但是会轻而易举地转换。
@ John Machin:我无法添加coment作为我newbee这个论坛:)
我没有使用旧的包pyXLreader,但用xlrd记住我的post;)
我在一个月前看过,但没有用于项目。
WBR
我很喜欢这些论坛,如果他们把时间放在时间戳上(pet peeve),所以我知道这些post是多么的旧。 我将假设他们是从2009年。
但在python中的一个很好的解决scheme是使用xlrd来读取您的xls文件。 这里是一个非常简单的介绍教程: http : //scienceoss.com/read-excel-files-from-python/它不是我的。
我遇到的唯一问题是exceldate。 这里是他们的快速解决scheme:
date = xlrd.xldate_as_tuple(int(sheet.cell(rowNum,colNum).value),workBookName.datemode)
比创build一个csv文件与内置csv模块,因为我是一个新的用户,我只能发布一个超链接。 但谷歌csv模块api。
希望是有帮助的
我的解决scheme
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;
您可以使用Alacon – Alasql数据库的命令行实用程序。
它适用于Node.js,所以你需要安装Node.js ,然后安装Alasql包:
> npm install alasql
要将Excel文件转换为CVS(TSV),您可以input:
> node alacon "SELECT * INTO CSV('mydata.csv', {headers:true}) FROM XLS('mydata.xls', {headers:true})"
Alacon支持其他types的转换(CSV,TSV,TXT,XLSX,XLS)和SQL语言结构(请参阅用户手册中的示例)。