我正在寻找一种方法将xlsx文件转换为Linux上的csv文件.
我不想使用PHP/Perl或类似的东西,因为我正在寻找处理数百万行,所以我需要一些快速的东西.我在Ubuntu repos上找到了一个名为xls2csv的程序,但它只会转换xls(Office 2003)文件(我目前正在使用),但我需要支持更新的Excel文件.
有任何想法吗?
我正在尝试使用下面显示的代码读取Excel(xlsx)文件.我得到一个"外部表不是预期的格式." 错误,除非我已在Excel中打开该文件.换句话说,我必须首先在Excel中打开文件,然后才能从我的C#程序中读取.xlsx文件位于我们网络上的共享中.如何在不先打开文件的情况下读取文件?谢谢
string sql = "SELECT * FROM [Sheet1$]";
string excelConnection = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + pathname + ";Extended Properties=\"Excel 8.0;HDR=YES;IMEX=1;\"";
using (OleDbDataAdapter adaptor = new OleDbDataAdapter(sql, excelConnection)) {
DataSet ds = new DataSet();
adaptor.Fill(ds);
}
Run Code Online (Sandbox Code Playgroud) 请有人帮助我将excel 2007(.xlsx)文件导入R的最佳方法.我尝试了几种方法,但似乎都没有.我已升级到2.13.1,Windows XP,xlsx 0.3.0,我不知道为什么错误不断出现.我试过了:
AB<-read.xlsx("C:/AB_DNA_Tag_Numbers.xlsx","DNA_Tag_Numbers")
Run Code Online (Sandbox Code Playgroud)
要么
AB<-read.xlsx("C:/AB_DNA_Tag_Numbers.xlsx",1)
Run Code Online (Sandbox Code Playgroud)
但我得到错误:
Error in .jnew("java/io/FileInputStream", file) :
java.io.FileNotFoundException: C:\AB_DNA_Tag_Numbers.xlsx (The system cannot find the file specified)
Run Code Online (Sandbox Code Playgroud)
谢谢.
该xlsx
软件包可用于从R读取和写入Excel电子表格.不幸的是,即使对于中等大小的电子表格,java.lang.OutOfMemoryError
也可能发生.特别是,
library(xlsx)
set.seed(19790801)
n_sheets <- 40
the_data <- replicate(
n_sheets,
{
n_rows <- sample(2e5, 1)
data.frame(
x = runif(n_rows),
y = sample(letters, n_rows, replace = TRUE)
)
},
simplify = FALSE
)
names(the_data) <- paste("Sheet", seq_len(n_sheets))
Run Code Online (Sandbox Code Playgroud)
(其他相关的例外也是可能的,但更罕见.)
在阅读电子表格时,有人提出了类似的问题.
使用Excel电子表格作为CSV上的数据存储介质的主要优点是,您可以在同一文件中存储多个工作表,因此我们在此处考虑每个工作表要写入一个数据框的数据框列表.此示例数据集包含40个数据框,每个数据框具有两列,最多200k行.它设计得足够大,有问题,但你可以通过改变n_sheets
和改变大小n_rows
.
wb <- createWorkbook()
for(i in seq_along(the_data))
{
message("Creating sheet", i)
sheet <- createSheet(wb, sheetName = names(the_data)[i])
message("Adding data frame", i)
addDataFrame(the_data[[i]], sheet)
}
saveWorkbook(wb, "test.xlsx")
Run Code Online (Sandbox Code Playgroud)
将此文件写入文件的自然方法是使用创建工作簿createWorkbook
,然后循环遍历每个数据框调用createSheet
和addDataFrame
.最后,可以使用工作簿将文件写入文件 …
我想知道是否有人知道从"大"xlsx文件(~20Mb)导入数据的方法.我尝试使用xlsx和XLConnect库.不幸的是,两者都使用rJava,我总是得到同样的错误:
> library(XLConnect)
> wb <- loadWorkbook("MyBigFile.xlsx")
Error: OutOfMemoryError (Java): Java heap space
Run Code Online (Sandbox Code Playgroud)
要么
> library(xlsx)
> mydata <- read.xlsx2(file="MyBigFile.xlsx")
Error in .jcall("RJavaTools", "Ljava/lang/Object;", "invokeMethod", cl, :
java.lang.OutOfMemoryError: Java heap space
Run Code Online (Sandbox Code Playgroud)
我还尝试在加载rJava之前修改java.parameters:
> options( java.parameters = "-Xmx2500m")
> library(xlsx) # load rJava
> mydata <- read.xlsx2(file="MyBigFile.xlsx")
Error in .jcall("RJavaTools", "Ljava/lang/Object;", "invokeMethod", cl, :
java.lang.OutOfMemoryError: Java heap space
Run Code Online (Sandbox Code Playgroud)
或者在加载rJava之后(我认为这有点愚蠢):
> library(xlsx) # load rJava
> options( java.parameters = "-Xmx2500m")
> mydata <- read.xlsx2(file="MyBigFile.xlsx")
Error in .jcall("RJavaTools", "Ljava/lang/Object;", "invokeMethod", cl, :
java.lang.OutOfMemoryError: …
Run Code Online (Sandbox Code Playgroud) 我很惊讶地发现没有简单的方法将多个data.frame导出到excel文件的多个工作表中?我试过xlsx包,看来它只能写一张表(覆盖旧表); 我也试过WriteXLS包,但它一直给我错误...
我的代码结构是这样的:按照设计,对于每次迭代,输出数据帧(tempTable)和sheetName(sn)都已更新并导出到一个选项卡中.
for (i in 2 : ncol(code)){
...
tempTable <- ...
sn <- ...
WriteXLS("tempTable", ExcelFileName = "C:/R_code/../file.xlsx",
SheetNames = sn);
}
Run Code Online (Sandbox Code Playgroud)
我可以导出到几个cvs文件,但在excel中必须有一个简单的方法,对吧?
提前致谢.
我在加载xlsx包和使用choose.files时遇到了一个奇怪的问题.
一旦我将RStudio更新到最新版本(v0.97.237),就会出现此问题.如果我启动RStudio然后加载xlsx(即library(xlsx)
)包加载就好了.但是,如果我尝试使用choose.files()
,RStudio会冻结(实际上它会持续运行,无法在不使用Win7任务管理器结束的情况下关闭).如果我启动RStudio并首先使用choose.files,它可以正常工作.如果我然后运行该library(xlsx)
行,xlsx包将不会加载.它给出了下面的错误.
我已经尝试重新安装xlsx包(以及xlsxjars和rJava),但这不起作用.也没有重新安装Java.
有什么建议?我正在使用R v2.15.2.
library(xlsx)
Loading required package: xlsxjars
Loading required package: rJava
Error occurred during initialization of VM
Could not reserve enough space for object heap
Error : .onLoad failed in loadNamespace() for 'xlsxjars', details:
call: .jinit()
error: Cannot create Java virtual machine (-4)
Error: package ‘xlsxjars’ could not be loaded
Run Code Online (Sandbox Code Playgroud)
编辑:这是问题所在.对不起任何困惑.当我输入这个:
filename<-file.choose() #select file
library(xlsx)
mydata<-read.xlsx(filename,1) #load datafile
Run Code Online (Sandbox Code Playgroud)
我可以成功选择文件名,但xlsx包无法加载,因此我无法打开数据文件.我得到上面的错误.但是,如果我改为运行它(在我关闭并重新启动RStudio之后):
library(xlsx)
filename<-file.choose() #select file
mydata<-read.xlsx(filename,1) #load datafile
Run Code Online (Sandbox Code Playgroud)
xlsx包正确加载,但file.choose
导致R无限期运行,因此脚本冻结,我无法加载我的文件.这也是使用的情况choose.files()
.我不知道为什么这两件事(xlsx和 …
我正在尝试在iOS上以编程方式创建xlsx文件.由于xlsx文件的内部数据基本上存储在单独的xml文件中,因此我尝试使用其所有文件和子目录重新创建xlsx结构,将它们压缩为zip文件并将其扩展名设置为xlsx.我使用GDataXML解析器/编写器来创建所有必需的xml文件.但是,我得到的文件无法作为xlsx文件打开.即使我从有效的xlsx文件中删除所有数据,也可以通过从原始xml文件复制数据并手动压缩来手动创建所有xml文件,但我无法重新创建有效的xlsx文件.
问题是:
好的,所以我发现这个记录非常好,node_module
名为js-xlsx
问题: 如何解析xlsx以输出json?
以下是Excel工作表的样子:
最后,json应如下所示:
[
{
"id": 1,
"Headline": "Team: Sally Pearson",
"Location": "Austrailia",
"BodyText": "...",
"Media: "..."
},
{
"id": 2,
"Headline": "Team: Rebeca Andrade",
"Location": "Brazil",
"BodyText": "...",
"Media: "..."
}
]
Run Code Online (Sandbox Code Playgroud)
index.js:
if(typeof require !== 'undefined') {
console.log('hey');
XLSX = require('xlsx');
}
var workbook = XLSX.readFile('./assets/visa.xlsx');
var sheet_name_list = workbook.SheetNames;
sheet_name_list.forEach(function(y) { /* iterate through sheets */
var worksheet = workbook.Sheets[y];
for (z in worksheet) {
/* all keys that do …
Run Code Online (Sandbox Code Playgroud)