[R] write.xls

Spencer Graves spencer.graves at structuremonitoring.com
Mon May 21 02:28:03 CEST 2012


Hi, Jim:


On 5/20/2012 4:54 PM, jim holtman wrote:
> Here is what it take to write out two sheets with XLConnect
>
>
> # function to write out a sheet to an EXCEL file that I use
> f.writeXLSheet<-
> function (data, sheet, fileToWrite, rownames = NULL)
> {
>      require(XLConnect)
>      writeWorksheetToFile(fileToWrite, data = data, sheet = sheet,
>          rownames = rownames, styleAction = XLC$STYLE_ACTION.NONE)
> }


Thanks.  Unfortunately, I can't get that far:


 > library(XLConnect)
Loading required package: XLConnectJars
Loading required package: rJava
Error : .onLoad failed in loadNamespace() for 'rJava', details:
   call: stop("No CurrentVersion entry in '", key, "'! Try re-installing 
Java and make sure R and Java have matching architectures.")
   error: object 'key' not found
Error: package 'rJava' could not be loaded

 > sessionInfo()
R version 2.15.0 (2012-03-30)
Platform: x86_64-pc-mingw32/x64 (64-bit)

locale:
[1] LC_COLLATE=English_United States.1252
[2] LC_CTYPE=English_United States.1252
[3] LC_MONETARY=English_United States.1252
[4] LC_NUMERIC=C
[5] LC_TIME=English_United States.1252

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base
 >

       Best Wishes,
       Spencer
>
> df1<- data.frame(c1=1:2, c2=3:4, c3=5:6)
> df2<- data.frame(c21=c(10.10101010101,20, 3), c22=c(50E50,60, 3) )
> outFile<- 'df12.xls'
>
> unlink(outFile)  # make sure there is no file to start with
> f.writeXLSheet(df1, 'df1', outFile)
> f.writeXLSheet(df2, 'df2', outFile)
>
> I have attached the resulting Excel file (see how far it makes it).
>
> On Sun, May 20, 2012 at 7:15 PM, Spencer Graves
> <spencer.graves at structuremonitoring.com>  wrote:
>> On 5/20/2012 5:52 AM, Gabor Grothendieck wrote:
>>> On Sun, May 20, 2012 at 8:30 AM, Gabor Grothendieck
>>> <ggrothendieck at gmail.com>    wrote:
>>>> On Sat, May 19, 2012 at 9:32 PM, Spencer Graves
>>>> <spencer.graves at structuremonitoring.com>    wrote:
>>>>> Hello, All:
>>>>>
>>>>>
>>>>>       The "writeFindFn2xls" function in the "sos" package tries to write
>>>>> an
>>>>> Excel file with 3 sheets ('PackageSum2', 'findFn', 'call').
>>>>> Unfortunately,
>>>>> it is often unable to do this because of configuration problems that are
>>>>> not
>>>>> easy to fix.  I've found 3 contributed packages that provide facilities
>>>>> to
>>>>> write Excel files with multiple sheets. Unfortunately, I can't get any
>>>>> of
>>>>> them to work consistently for me. Below please find test cases that
>>>>> illustrate the problems.  Any suggestions for how to solve this problem
>>>>> will
>>>>> be appreciated.
>>>>>
>>>>>
>>>>>       Thanks,
>>>>>       Spencer
>>>>>
>>>>>
>>>>> library(dataframes2xls)
>>>>>
>>>>> df1<- data.frame(c1=1:2, c2=3:4, c3=5:6)
>>>>> df2<- data.frame(c21=c(10.10101010101,20, 3), c22=c(50E50,60, 3) )
>>>>> outFile<- 'df12.xls'
>>>>>
>>>>> write.xls(c(df1,df2), outFile)
>>>>> # works
>>>>>
>>>>> do.call(write.xls, list(c(df1, df2), outFile))
>>>>> # Error in get(s[i]) : object 'structure(list(c1=1:2' not found
>>>>>
>>>> Try this:
>>>>
>>>> dd<- list(df1 = df1, df2 = df2)
>>>> do.call("WriteXLS", list("dd", outFile))
>>>>
>>>> or this:
>>>>
>>>> do.call("WriteXLS", list(c("df1", "df2"), outFile)
>>>>
>>> That was for WriteXLS.  For dataframes2xls try this:
>>>
>>> do.call("write.xls", list(quote(c(df1, df2)), outFile))
>>
>> Hi, Gabor:  Thanks.  I think we're gaining on it, but I'm still not quite
>> there.  Consider the following extension of my previous toy example:
>>
>> library(dataframes2xls)
>>
>> df1<- data.frame(c1=1:2, c2=3:4, c3=5:6)
>> df2<- data.frame(c21=c(10.10101010101,20, 3), c22=c(50E50,60, 3) )
>> outFile<- 'df12.xls'
>>
>> write.xls(c(df1,df2), outFile)
>> # works
>>
>> do.call(write.xls, list(quote(c(df1, df2)), outFile))
>> # works
>>
>> df2x<- function(x, file)
>>     do.call(write.xls, list(x, file))
>> df2x(quote(c(df1, df2)), outFile)
>> # works
>>
>> df2<- function(x1, x2, file){
>>     x23<- quote(c(x1, x2))
>>     do.call(write.xls, list(x23, file))
>> }
>> df2(df1, df2, outFile)
>> # Error in get(s[i]) : object 'x1' not found
>>
>>
>>       This is closer to what I need.  The answer may lie in getting the right
>> "envir" argument for "do.call".  However, I haven't yet found something that
>> works there.
>>
>>
>>       Thanks,
>>       Spencer
>>>
>>> and also check out this page:
>>>
>>> http://rwiki.sciviews.org/doku.php?id=tips:data-io:ms_windows
>>>
>> ______________________________________________
>> R-help at r-project.org mailing list
>> https://stat.ethz.ch/mailman/listinfo/r-help
>> PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
>> and provide commented, minimal, self-contained, reproducible code.



More information about the R-help mailing list