是否有一种简单的方法可以在不启动Excel窗口应用程序的情况下将XLS转换为CSV格式的文件?
我需要使用脚本处理一些Excel XLS工作簿。为此,我需要将xls文件转换为csv文件。这可以通过Excel应用程序中的保存来完成。但是,我想自动执行此操作(因此,不要打开Excel应用程序窗口)。
如果工作簿中的第一个工作表转换为CSV格式就足够了。 我需要处理该表中的数据。
我的系统上安装了Cygwin和Excel - 如果有帮助的话。
编辑:好的,我有一个使用Perl的工作解决方案。更新以供其他人使用。
我安装了 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脚本,可能也很容易使用; 来自this MSDN blog and, SO Reference。
$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
}
}
更新:我最近在此CSVed遇到了一个Windows工具Superuser answer,这可能对某些人有用。
答案 0 :(得分:6)
如果您使用的是Debian / Ubuntu,可以使用catdoc软件包中的xls2csv
答案 1 :(得分:4)
在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())
}
}
答案 2 :(得分:4)
Gnumeric可以自动转换文件而无需用户干预。这允许使用脚本转换大量文件。 Gnumeric与一个名为
ssconvert
的程序一起分发,该程序用于自动转换文件。除了通过打印系统运行的Postscript和PDF文件格式外,可以使用Gnumeric支持的所有文件格式。通过指定命令行,可以使用此应用程序,任何所需的选项,输入文件和输出文件。例如,
ssconvert myfile.xls myfile.gnumeric
会将Excel格式文件转换为Gnumeric格式文件。
可以使用
列出ssconvert可以读取的可用导入和导出文件格式ssconvert --list-importers
或
ssconvert --list-exporters
分别
与其他GNU命令行应用程序一样,ssconvert包含一个手册页。键入以下命令可访问此页面:
man ssconvert
将打开手册页。可以通过键入空格键或使用Page Up和Page Down按钮来导航此页面。通过输入q键可以解除man程序。
我正在使用它并且效果很好。
答案 3 :(得分:3)
使用perl脚本。使用CPAN中的Spreadsheet :: ParseExcel perl模块解析xls文件,然后输出为csv应该可以正常工作。
http://search.cpan.org/dist/Spreadsheet-ParseExcel
您也可以尝试使用VBScript。
答案 4 :(得分:2)
使用一个可移植的[Python]库:
pyxlreader.sourceforge.net /
sourceforge.net/projects/pyexcelerator
并在其上添加额外的脚本层。
答案 5 :(得分:2)
Excel可以用作数据源,并且有可用于访问EXCEL作为数据库的驱动程序。
1。)创建并打开与要转换为CSV的EXCEL文件的连接。
2.。)触发像“SELECT * From Sheet1”这样的查询,它会将Sheet1的所有数据加载到记录集或数据表中。
3。)由于我使用.net,我可以在datatable上保存这些记录,并使用以下扩展方法转换为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();
}
您可以在此处应用此方法 你正在努力的平台。
感谢。
答案 6 :(得分:1)
VBS脚本,它工作得很棒 http://www.go4expert.com/forums/showthread.php?t=18188
设置objArgs = WScript.Arguments 对于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
下一步
答案 7 :(得分:0)
推荐转换XLS: http://www.softinterface.com/Convert-XLS%5CConvert-XLS.htm
'转换XLS'是一个简单易用,但复杂的Excel转换器实用程序,专门为Excel,文本和CSV(字符/逗号分隔)文件设计。如果您需要转换/操作位于一个或多个文件夹中的一个或数千个文件,这就是工具!如果没有MS Excel,转换速度可以提高10-15倍。
使用以下方法自动执行Excel转换任务:
答案 8 :(得分:0)
如果你有Cygwin,最可能的是你会有Python。如果没有 - 安装python并使用此script。它远远超过你的需要,但会很容易转换。
答案 9 :(得分:0)
@ John Machin: 我不能为这个论坛添加新的内容:)
我没有使用旧包 pyXLreader ,但请记住 xlrd 的帖子;)
我在一个月前看过,但没有在项目中使用过。
WBR
答案 10 :(得分:0)
我对这些论坛很新,如果他们把年份放在时间戳(宠儿小便)上会很好,所以我知道帖子的年龄。我想假设他们来自2009年。
但是python中的一个很好的解决方案是使用xlrd来读取你的xls文件。这是一个非常简单的介绍教程: http://scienceoss.com/read-excel-files-from-python/ 它不是我的。
我唯一的问题是excel日期。这是他们的快速解决方法:
date = xlrd.xldate_as_tuple(int(sheet.cell(rowNum,colNum).value),workBookName.datemode)
使用内置的csv模块创建一个csv文件,因为我是一个新用户,我只能发布一个超链接。但谷歌的csv模块api。
希望这是有帮助的
答案 11 :(得分:0)
我的解决方案:
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;
答案 12 :(得分:0)
您可以使用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语言结构(例如,请参阅User Manual)。