全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 R语言论坛
16444 10
2015-05-21
如题。

R处理excel文件,可以用xlsx包,也可以把xlsx批量转化为csv。我发现用vba把xlsx批量转化为csv更快(数据量大时)

1、用xlsx包,这个包需要配置java环境
1、 安装最新版本的java。如果你用的R是64位的,请下载64位java。
下载地址: http://www.java.com/en/download/manual.jsp
要安装在 C:\Program Files\Java 下面,win8的尤其小心不要安装为C:\Program Files(x86)。可能是R在读取路径时,对x86这样的文件夹不大好识别吧,我第一次装在x86里,读取是失败的。

2、在R中加载环境,即一行代码,路径要依据你的java版本做出更改。
Sys.setenv(JAVA_HOME='C:\\Program Files\\Java\\jre1.8.0_45\\')
之后再加载rjava包或者xlsx包就成功了。

xlsx包加载成功后,用read.xlsx就可以直接读取xlsx文件,还可以指定读取的行和段,以及第几个表,以及可以保存为xlsx文件,这个包还是很强大的。
但是很遗憾,如果在公司装这个xlsx包的话,可能要找IT帮你装java环境,然后它读大数据速度很慢(不如data.table包里的fread函数)
总之这个适合:小数据、实验式,以及可以自由配置java环境的地方

2、放弃用xlsx包,利用VBA直接把xlsx转化为csv格式

前情略,具体请参看我原来的随笔。。我改写的VBA代码如下:
代码总是莫名其妙没有……直接插附件吧
vba.txt
大小:(1.12 KB)

 马上下载



Sub getCSV()
'这是网上看到的xlsx批量转化,而改写的一个xlsx批量转化csv格式
'1)批量转化csv参考:http://club.excelhome.net/thread-1036776-2-1.html
'2)创建文件夹参考:http://jingyan.baidu.com/article/f54ae2fcdc79bc1e92b8491f.html
'这里设置屏幕不动,警告忽略
Application.DisplayAlerts = False
Application.ScreenUpdating = False
Dim data As Workbook
'这里用GetOpenFilename弹出一个多选窗口,选中我们要转化成csv的xlsx文件,
file = Application.GetOpenFilename(MultiSelect:=True)
'用LBound和UBound
For i = LBound(file) To UBound(file)
    Workbooks.Open Filename:=file(i)
    Set data = ActiveWorkbook
    Path = data.Path
    '这里设置要保存在目录下面的csv文件夹里,之后可以自己调
    '参考了里面的第一种方法
    On Error Resume Next
    VBA.MkDir (Path & "\csv")
    With data
        .SaveAs Path & "\csv\" & Replace(data.Name, ".xlsx", ".csv"), xlCSV
        .Close True
      End With
Next i
'弹出对话框表示转化已完成,这时去相应地方的csv里查看即可
MsgBox "已转换了" & (i-1) & "个文档"
Application.ScreenUpdating = True
Application.DisplayAlerts = True
End Sub


把代码复制进excel的vba编辑器里,然后运行getcsv这个宏,会跳出一个窗口,要求选择你要转化的xlsx文件。(可多选)

选中以后,等一段时间,再回到xlsx文件下,会多一个csv文件夹,里面就是我们要导入R的文本文件了。

这个方法的好处是:

1、操作简单,直接依托于excel的VBA操作,不用配置java环境,之后沟通成本/换电脑成本小
2、特别适用于有一定数据量,但是数据格式整齐的文件,譬如从某数据端读入的数据。用fread还可以控制读取的行(skip=NNN),代码写入整洁方便。就算有一些异行数据,也可以事先用VBA进行操作,简单方便。


总之我最后是放弃xlsx包,选择用VBA批量转化xlsx文件了。
供大家参考。细节的话请看我原来的博文:http://www.cnblogs.com/weibaar/p/4506144.html


二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

全部回复
2015-5-22 10:53:21
谢谢分享
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2015-5-24 21:22:34
你好,非常感谢,请问如果我想把输出路径设置成   F:\csvfiles   该怎么修改啊
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2015-5-24 23:21:13
小鳄鱼a 发表于 2015-5-24 21:22
你好,非常感谢,请问如果我想把输出路径设置成   F:\csvfiles   该怎么修改啊
VBA代码里
  .SaveAs Path & "\csv\" & Replace(data.Name, ".xlsx", ".csv"), xlCSV

这一段修改为F:\csvfiles\即可
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2015-5-24 23:33:39
weibazyy 发表于 2015-5-24 23:21
VBA代码里
  .SaveAs Path & "\csv\" & Replace(data.Name, ".xlsx", ".csv"), xlCSV
变红色了哦  
附件列表
QQ截图20150524233824.jpg

原图尺寸 24.75 KB

QQ截图20150524233824.jpg

二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2015-5-25 09:16:42
小鳄鱼a 发表于 2015-5-24 23:33
变红色了哦
噢。。你要加双引号。。。在这个地址里
以及后来有人跟我说hadley又推出了一个叫readxl的包,可以直接读取xlsx,不需要java环境,更关键的是速度跟fread等差不多~有空可以试试 #论哪里都是Hadley
http://www.r-bloggers.com/get-data-out-of-excel-and-into-r-with-readxl/
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

点击查看更多内容…
相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群