楼主: weibazyy
16573 10

[学习分享] 其实R处理excel最好的办法应该是把xlsx批量转化为csv [推广有奖]

  • 0关注
  • 0粉丝

本科生

40%

还不是VIP/贵宾

-

威望
0
论坛币
2728 个
通用积分
0.0600
学术水平
14 点
热心指数
14 点
信用等级
5 点
经验
510 点
帖子
24
精华
0
在线时间
149 小时
注册时间
2014-4-28
最后登录
2015-11-29

楼主
weibazyy 发表于 2015-5-21 21:18:27 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
如题。

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


二维码

扫码加我 拉你入群

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

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

关键词:EXCEL xlsx xcel exce xls excel

已有 3 人评分经验 论坛币 收起 理由
求证1加1 + 20 根据规定进行奖励
dxystata + 50 + 20 鼓励积极发帖讨论
李会超 + 60 + 20 鼓励积极发帖讨论

总评分: 经验 + 130  论坛币 + 40   查看全部评分

本帖被以下文库推荐

沙发
zxy9082 发表于 2015-5-22 10:53:21 来自手机
谢谢分享

藤椅
小鳄鱼a 发表于 2015-5-24 21:22:34
你好,非常感谢,请问如果我想把输出路径设置成   F:\csvfiles   该怎么修改啊

板凳
weibazyy 发表于 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\即可
已有 1 人评分论坛币 学术水平 热心指数 收起 理由
小鳄鱼a + 5 + 2 + 2 精彩帖子

总评分: 论坛币 + 5  学术水平 + 2  热心指数 + 2   查看全部评分

报纸
小鳄鱼a 发表于 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

地板
weibazyy 发表于 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/

7
小鳄鱼a 发表于 2015-5-25 21:57:22
weibazyy 发表于 2015-5-25 09:16
噢。。你要加双引号。。。在这个地址里
以及后来有人跟我说hadley又推出了一个叫readxl的包,可以直接读 ...
不好意思   那个vba  还是不显示    我是输出到   F:\output     你能否给我直接写在你给的vba代码上   多谢了啊

8
gsjqwuyao 学生认证  发表于 2016-1-9 01:46:58
楼主您好,非常感谢您基于VBA的代码,很快很好用,请问如果一个xlsx里面有多个sheet怎么办?

9
king64 发表于 2016-1-11 09:13:10
放弃是对的!
Microsoft这些公司总是给你设置些障碍,让你无法完整读取Excel数据。
比如,最常见的但你的Excel表格列出超出多少列时,后面的数据就无法读取了。RODBC呀xlsx包估计都是如此!

10
jiangbeilu 学生认证  发表于 2016-1-11 09:28:59
king64 发表于 2016-1-11 09:13
放弃是对的!
Microsoft这些公司总是给你设置些障碍,让你无法完整读取Excel数据。
比如,最常见的但你的 ...
数据太大,就不能用Excel处理了啊。人家是明确自己的定位。

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2025-12-30 12:03