【问题标题】:R Linux Shell convert multi-sheet xls to csv in batchR Linux Shell将多页xls批量转换为csv
【发布时间】:2013-02-17 03:55:20
【问题描述】:

在 R 中,我有一个脚本获取多个 xls 文件的内容 Loop over directory to get Excel content>。

所有文件大约 2 MB。该脚本需要几秒钟来处理 3 个文件,但现在在 Debian i7 系统上运行了 6 个小时,但对 120 个文件没有结果。

因此,更好的解决方案是 [希望] 使用 ssconvert 将所有 xls 文件转换为 csv,使用 bash 脚本 Linux Shell Script For Each File in a Directory Grab the filename and execute a program>:

for f in *.xls ; do xls2csv "$f" "${f%.xls}.csv" ; done

这个脚本可以完成这项工作,但是我的内容在第 nr 14 工作表中,而这个脚本生成的 csv 文件只返回第一个工作表 [我将 'xls2csv' 替换为 'ssconvert']。

是否可以采用此脚本仅拾取工作簿中的第 14 表?

【问题讨论】:

    标签: r bash csv xls


    【解决方案1】:

    如果您知道工作表名称,您可以这样做:

    for f in *.xls ; xls2csv -x "$f" -w sheetName -c "${f%.xls}.csv";done
    

    要查看所有 xls2csv 详细信息,请参阅 here

    编辑

    OP 找到了正确的答案,所以我编辑我的添加它:

    for f in *.xls ; do xls2csv -x "$f" -f -n 14 -c "${f%.xls}.csv" 
    

    【讨论】:

    • 感谢 agstudy,将尝试此操作,但我的工作表有时在第一列中没有值,在这种情况下,脚本假定整行为空。
    • @Henk 我不明白。看起来你在谈论另一个问题。有时?多少钱?该脚本是否解决了您 80% 的问题。您可以混合使用这些方法,当它工作时使用转换为 csv,否则使用 readxls 方法。
    • agstudy,xls2csv 链接的“警告”部分表示“如果第一列中没有任何内容,则假定电子表格中的一行为空白。”有时 A 列中没有值,这意味着脚本将跳过整行 - 但我需要 12:14 列的值。
    • 1.07版本的Perl脚本包含一个-f开关,强制解析所有内容[避免空行问题],但是上面的脚本有一些问题:bash: syntax error near unexpected token` xls2csv'
    • 已解决:对于 *.xls 中的 f ;做 xls2csv -x "$f" -f -n 14 -c "${f%.xls}.csv" ;完成
    【解决方案2】:

    对于这项工作,我使用了一个名为 ssconverter.py 的 Python 脚本(您可以找到 here,向下滚动并下载两个附件,ssconverter.py 和 ooutils.py),我使用 @987654322 直接从 R 调用它@。

    它可以提取工作簿中的特定工作表,不仅可以按名称,还可以按工作表编号,例如:

    ssconverter.py infile.xls:2 outfile.csv
    

    提取第二张纸。

    您需要安装 python 和 python-uno。

    【讨论】:

    • 这听起来很棒西奥多。您将如何在我拥有的 120 个电子表格中循环使用它?
    • +1!看起来很有希望!要做到这一点,你可以使用类似的东西,ll <- list.files(patt='*.xls'); lapply(ll, function(x) system(paste('sconverter.py ',x,':2 ', gsub('(.*)[.]xls','\\1.csv',x),sep='')))
    • 嗨西奥多,它不工作。已安装 Python 和 python3-uno。产生:sh:语法错误:“(”意外。
    • 您究竟是如何尝试运行它的?我觉得奇怪的是,您从 sh 而不是从 python 解释器收到语法错误;请粘贴您使用的确切命令。对我(debian sid)来说,它适用于 python2.7 和 python-uno,尚未使用 python3 和 python3-uno 进行测试。您需要将 ssconverter.py 和 ooutils.py 放在同一个目录中,通常我将它们放在 R 工作目录中并使用 lapply() 循环,就像 agstudy 显示的那样。
    • 这里是代码:ll .xls') lapply(ll, function(x) system(paste('sconverter.py ',x, ':2 ', gsub('(.)[.]xls','\\1.csv',x),sep=''))) - python-uno 不想安装,只python3-uno,可能是这个问题。.py 文件与 .R 脚本和 .xls 文件位于同一目录中。
    猜你喜欢
    • 2011-10-05
    • 2012-06-03
    • 1970-01-01
    • 2011-06-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-05
    相关资源
    最近更新 更多