当前位置:  开发笔记 > 编程语言 > 正文

在没有GUI的情况下将Excel(xls)文件转换为逗号分隔(csv)文件

如何解决《在没有GUI的情况下将Excel(xls)文件转换为逗号分隔(csv)文件》经验,为你挑选了1个好方法。

有没有一种简单的方法可以将XLS转换为CSV格式的文件而无需启动Excel窗口应用程序?

我需要使用脚本处理一些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脚本,可能也很容易使用; 来自这个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
    }
}

更新:我最近在这个超级用户答案中遇到了一个CSV工具,这可能对某些人有用.



1> Rory..:

如果您使用的是Debian/Ubuntu,可以使用catdoc软件包中的xls2csv

推荐阅读
殉情放开那只小兔子
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有