在 Ubuntu 下打开的 Excel 文件,由 R、OpenOffice 读取
Posted
技术标签:
【中文标题】在 Ubuntu 下打开的 Excel 文件,由 R、OpenOffice 读取【英文标题】:Excel File opened under Ubuntu, read by R, OpenOffice 【发布时间】:2011-01-09 14:34:43 【问题描述】:我有一堆 Excel 文件,这些文件每天都会在 Windows 机器上更新。我将它们转移到一台 Ubuntu 机器上并想在那里打开它们。具体来说,我想将文件作为 R 下的数据库读取。
几年前,我在Windows机器下使用ODBC通过R打开Excel文件。有什么办法,我可以在Ubuntu下用R做到这一点吗?
我可以使用 OpenOffice 为相应的 XLS 文件创建一个数据库 .ODB 文件,但我不知道如何连接到 .ODB 数据库。 OpenOffice 似乎有办法连接 TO 数据库,但没有办法连接到 ODB。
感谢您提供任何可能的解决方案。
【问题讨论】:
追加:当我说“将文件作为数据库读取”时,我的意思是,使用 SQL 从工作表中获取数据会很好。 sqldf 包可能是一个选项:cran.r-project.org/web/packages/sqldf/index.html 【参考方案1】:您也许可以使用apt-get install catdoc
中的xls2csv 将Excel 文件转储为CSV。然后你几乎可以选择你的毒药,了解它们是如何从那里处理的。如果您想使用 SQL 语句提取信息,sqldf
包中的 read.csv.sql
可能非常方便。
【讨论】:
@Roman Luštrik:至少可以通过系统调用(参见:?system)。 鉴于 gdata 和 xlsx 都因内存问题而让我失望,我可能不得不尽快尝试 xls2csv。 @Roman Luštrik:Catdoc 的xls2csv
实用程序是一个命令行工具,可通过 R 的 system
调用访问。【参考方案2】:
我建议xlsx 包,它没有特殊要求(如xlsReadWrite 等),因此可以在Linux 下轻松使用。虽然它只读取(和写入)xlsx 格式。
另一个方法是使用gdata 包中的read.xls
函数,它首先将xls 文件转换为csv,然后读取这些数据帧。您需要安装 Perl 和 xls2csv,这在 Linux 下不是什么大问题。
【讨论】:
xlsx 包需要安装 Java。 gdata 中的read.xls
要求安装 perl。 xls2csv
是 gdata 包的一部分,不必单独安装。在 R wiki 中讨论了各种可用的替代方案,包括 xlsx 和 gadata,用于阅读 Excel 电子表格:rwiki.sciviews.org/doku.php?id=tips:data-io:ms_windows
我尝试使用 xlsx 包,但我似乎遇到了内存问题。电子表格并不庞大,大约 100 - 150 Mb,但即使将工作表读取到数据框也会失败。【参考方案3】:
您的 ODBC 解决方案应该可以在 Linux 上运行,前提是您安装了 uniXODBC
软件包(对于您的操作系统,如果编译 RODBC
,您可能还需要 unixODBC-devel
软件包)和 R 的 RODBC
软件包。链接Gabor 在他对@daroczig 的回答中提供了一些关于Linux 上RODBC 的详细信息;请注意关于这在 Linux 上是只读的以及可能难以设置的要点。
@daroczig 和 Gabor 建议的选项可能会更好,但如果您熟悉 ODBC,您可能还想在 Ubuntu 上尝试一下。
【讨论】:
捐赠,谢谢。我不确定 RODBC 选项是否适用于 Linux 下的 Excel 文件。从某个地方开始,我一直认为 RODBC + Excel 需要一些 Excel 特定的驱动程序,而这些驱动程序在 Linux 上是不可用的。实际上,我仍然不知道如何在 Linux 上通过 ODBC 访问 Excel 文件。我已经在 Windows 上做到了。而且我对 Linux 上的 ODBC 没问题,我通过 unixODBC 将其他一些 DB 与 R 一起使用。 . Gavin,您知道如何通过 unixODBC 使 .XLSX 文件可用吗? @Vishal Belsare - 不,抱歉,我没有。我发现 ODBC 在 Linux 上有点像魔法。我只是在您已经习惯在 Linux 上设置 ODBC 资源的情况下才提供我的答案。我非常讨厌 Excel - 我坚持任何与我合作的人都导出 csv 或类似文件,如果他们希望我对它们进行分析。 没问题。我很好地使用 unixODBC,但似乎无法通过这种方式在 Linux 上流水线传输到 XLSX 文件。 ODBC 可以与其他任何工具一起正常工作,例如 Postgres 或 mysql。我同意您对 Excel 的看法 - 但整个金融行业都沉迷于此,我正在处理以 XLSX 文件形式从金融数据终端 (Bloomberg/Reuters) 获取的数据。我只需要定期阅读这些内容,然后填充 RDBMS 来执行我的工作。 ..哦,好吧。【参考方案4】:还有另一种解决方案 - 将您的数据托管在您的两台机器都可以访问的数据库中。如果您手头有现金,Postgres 或 MySQL 将不会花费您任何费用或 MS-SQL 服务器。您似乎正在尝试做的正是网络 RDBMS 的设计目的。您将能够在远程计算机上使用 Excel 和 R 中的数据。赢了。
复制 Excel 文件是一个等待发生的巨大失败。给自己一个真正的 RDBMS。我会选择 Postgres。
【讨论】:
我受制于必须存在于 Excel 文件中的数据。 (想想在财务数据终端上更新的文件)。如果不是数据管道,我会完全取消 Excel。顺便提一句。我将 Postgres+R、MonetDB+R 用于其他项目。 .在这种情况下,我需要能够读取每天更新的 Excel 文件,然后我打算填充 RDBMS,很可能是 Postgres以上是关于在 Ubuntu 下打开的 Excel 文件,由 R、OpenOffice 读取的主要内容,如果未能解决你的问题,请参考以下文章
用于读取由其他用户独占打开的 Excel 文件的 OleDB 连接字符串