使用R将Excel电子表格保存为.csv格式?

8
什么是将包含多个工作表的大型Excel电子表格转换为.CSV文件的最简单方法?请注意,我已经测试了XLConnect和XLSX,并发现我的Excel表会导致它崩溃。因此,我特别寻找不使用XLConnect或XLSX软件包的解决方案。

1
为什么不直接使用Excel将其转换为CSV呢? - Stedy
6
也许这个 Excel 电子表格是自动定期生成的一部分,AME 无法修改但仍需要使用。或者,AME 实际上有 5000 个这样的 Excel 表,并且需要从每个表中提取多个工作表,但已经知道如何循环遍历文件。我可以想象很多情况下手动转换会变成噩梦。 - Matt Parker
1
更不用说,从可重复研究的角度来看,通常最好将Excel表格视为“主要”(例如,如果它来自合作者),并在R中进行处理,包括转换。 - Drew Steen
3个回答

9
这是一个循环,用于输出所有表格:
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)
}

5

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镜像后成功运行。


这是一个很好的资源,但我认为如果您包括一些个人评论以及您使用它们的经验,那么您的答案会更好。在像那样的列表中很难知道从哪里开始。 - Matt Parker
正如您在评论中所指出的那样,由于没有提供任何相关细节,因此很难为问题提供量身定制的答案。似乎需要给出一个普遍性的回答来回应这个模糊的问题,并希望引出更多的澄清细节。 - IRTFM
感谢提供链接,DWin。这个问题实际上与我使用XLConnect和XLSX包无法读取一个特别大的.xlsx文件有关。如果我手动将电子表格转换为CSV文件,我的R代码就可以正常工作。因此,为了自动化这个过程,我需要使用一个能够读取大型.xlsx文件并将它们转换为.csv文件的R包。在阅读了您提供的参考资料后,我想我会尝试一下gdata。您能帮我弄清楚如何使用"gdata"包转换.xlsx文件吗? - AME
1
@AME 评论区不是提供详细帮助和跟进问题的合适场所。尝试更多的方法,如果再次遇到困难,请提出单独的问题。 - joran

1
基于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) %>% data.table::fwrite(fileout) - Rob

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接