【问题标题】:Save Excel spreadsheet as .csv with R?使用 R 将 Excel 电子表格另存为 .csv?
【发布时间】:2011-11-18 20:01:50
【问题描述】:

在 R 中将具有多个工作表的大型 Excel 电子表格转换为 .CSV 文件的最简单方法是什么?

请注意,我测试了 XLConnect 和 XLSX,发现我的 Excel 工作表导致它崩溃。所以我特意寻找不使用 XLConnect 或 XLSX 包的解决方案。

【问题讨论】:

  • 为什么不用excel转成CSV?
  • @Stedy - 也许 Excel 电子表格是作为自动定期过程的一部分生成的,AME 无法修改但仍必须使用该过程。或者,也许 AME 实际上有 5,000 个这样的 Excel 工作表,需要从每个工作表中提取多个工作表,但已经知道如何在文件之间循环。我可以想到很多手动转换会变成噩梦的场景。
  • @MattParker - 好点
  • 更不用说,从可重复研究的角度来看,最好将 excel 表视为“主要”(例如,如果它来自合作者)并进行处理,包括转换,在R.

标签: excel r


【解决方案1】:

这是写出所有工作表的循环:

require(gdata)
## install support for xlsx files
installXLSXsupport()
excelFile <- ("/full/path/to/excelFile.xlsx")
## note that the perl scripts that gdata uses do not cope well will tilde expansion
## on *nix machines. So use the full path. 
numSheets <- sheetCount(excelFile, verbose=TRUE)

for ( i in 1:numSheets) {
  mySheet <- read.xls(excelFile, sheet=i)
  write.csv(mySheet, file=paste(i, "csv", sep="."), row.names=FALSE)
}

【讨论】:

    【解决方案2】:

    http://rwiki.sciviews.org/doku.php?id=tips:data-io:ms_windows

    编辑:解决 read.xlsx 选项:

    如果您正在运行 Perl,则需要当前版本的 gdata

    require(gdata)
    installXLSXsupport()   #now the example from help(read.xls)
        # load the third worksheet, skipping the first two non-data lines...
        if( 'XLSX' %in% xlsFormats() )  # if XLSX is supported..
          data <- read.xls(exampleFile2007, sheet="Sheet with initial text", skip=2)
     data
    #-----------------------
       X       X.1 D E.  F  G Factor
    1 NA  FirstRow 1 NA NA NA   Red 
    2 NA SecondRow 2  1 NA NA Green 
    3 NA  ThirdRow 3  2  1 NA   Red 
    4 NA FourthRow 4  3  2  1 Black 
    #------------------------
    write.csv(data)
    

    这是在 Mac 上完成的,直到这个问题我总是在 installXLSXsupport() 阶段偶然发现,因为我总是遇到错误。这次我从终端命令行启动 Perl,并在第一次设置我的个人配置、在我的大陆上定义 CPAN 镜像后成功,然后我让 perl 运行。

    【讨论】:

    • 这是一个很好的资源,但我认为如果您包含一些关于您使用过哪些选项以及您使用它们的经验的个人评论,您的答案会更好。在这样的清单上很难知道从哪里开始。
    • 即使您在评论中指出,也很难根据提问者的情况提供适合的答案,因为没有提供此类信息的详细信息。似乎需要一个一般性的回应来回答一个模糊的问题,并希望能引出澄清细节。
    • 感谢 DWin 的链接。这个问题实际上与我遇到的 XLConnect 和 XLSX 包无法读取特别大的 .xlsx 文件的问题有关。如果我手动将电子表格转换为 CSV 文件,我的 R 代码就可以正常工作。所以,为了自动化这个过程,我需要使用一个可以读取大型 .xlsx 文件并将它们转换为 .csv 文件的 R 包。在阅读了您的参考资料后,我想我会给 gdata 一个镜头。你能帮我弄清楚如何使用“gdata”包转换 .xlsx 文件吗?
    • @AME cmets 不适合提供扩展帮助和后续问题。尝试更多的东西,如果您再次遇到困难,请提出一个单独的问题。
    【解决方案3】:

    根据 readxl 包更新了答案。

    library("readxl")
    
    #function to read all sheets of a workbook
    read_excel_allsheets <- function(filename) {
      sheets <- readxl::excel_sheets(filename)
      x <-    lapply(sheets, function(X) readxl::read_excel(filename, sheet = X))
      names(x) <- sheets
      x
    }
    
    sheetnames <- read_excel_allsheets("excelFile.xlsx")
    names(sheetnames)
    

    【讨论】:

    • 简单且推荐。 read_excel(file) %&gt;% data.table::fwrite(fileout)
    猜你喜欢
    • 2015-12-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-22
    • 2011-12-14
    • 1970-01-01
    • 2014-04-13
    相关资源
    最近更新 更多