On 5/20/2012 6:47 AM, Marc Schwartz wrote:
On May 19, 2012, at 8:32 PM, Spencer Graves 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

library(WriteXLS)
testPerl()
#Perl found.
#The following Perl modules were not found on this system:
#Text::CSV_XS
#If you have more than one Perl installation, be sure the correct one was used 
here.
#Otherwise, please install the missing modules. See the package INSTALL file 
for more information.

# *** NOTE:  I may be able to fix this for myself.
# *** However, I want to use this in the 'sos' package,
# *** and if it doesn't work easily for me, it may not work for others.

library(RODBC)
xlsFile<- odbcConnectExcel(outFile, readOnly=FALSE)
# NOTE:  This works with R 2.15.0 32-bit.
# However, with 64-bit, I get the following error message here:
# Error in odbcConnectExcel(outFile, readOnly = FALSE) :
#   odbcConnectExcel is only usable with 32-bit Windows

# When this works, the following 3 lines of code
#    suffice to create the outFile:
sqlSave(xlsFile, df1, tablename='sheet1')
sqlSave(xlsFile, df2, tablename='sheet2')
odbcClose(xlsFile)

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

#other attached packages:
#[1] RODBC_1.3-5          WriteXLS_2.1.0       dataframes2xls_0.4.5
Hi Spencer,

The INSTALL file referenced for WriteXLS is also available on CRAN:

   http://cran.r-project.org/web/packages/WriteXLS/INSTALL

The missing Perl modules cannot be provided with the CRAN package as they 
contain C code that must be compiled for the target platform. So one either 
needs to install the source Perl package from CPAN via the CLI and have a C 
compiler on their computer or use a Perl package manager infrastructure (eg. 
ActiveState Perl) that provides pre-compiled binaries for each OS and a nice 
GUI. The INSTALL file provides instructions for Windows, OSX and Linux as to 
how to address that issue.

Note that the key issue that you face is that some of the mechanisms that you 
are trying will be OS specific (primarily Windows), such as RODBC, since ODBC 
drivers for Excel will be Windows only. If you want to provide your users of 
sos with cross-platform functionality, then you would need to look at solutions 
using Perl such as WriteXLS, Java such as XLConnect or Python such as 
dataframes2xls. Each will have installation issues, depending upon the OS and 
the useR's skill sets in ensuring the presence of the required foundation. Some 
users may have issues in certain environments in installing Perl, Python or 
Java due to IT/Security issues, so something to consider.

The path of least resistance would be to simply write CSV files, which can then 
be opened with Excel or similar applications. It just depends upon what 
assumptions you want to make pertaining to maximizing your potential user base, 
while minimizing the installation challenges useRs may face with your package.


      Thanks, Marc.


The current code first tries WriteXLS If that fails, it then tries RODBC. If that fails, it writes csv files. If I can get dataframes2xls and / or XLConnect to work, I plan to start with one of those. These other packages are "suggests", so sos will load without them.


      Best Wishes,
      Spencer

Regards,

Marc Schwartz








--
Spencer Graves, PE, PhD
President and Chief Technology Officer
Structure Inspection and Monitoring, Inc.
751 Emerson Ct.
San José, CA 95126
ph:  408-655-4567
web:  www.structuremonitoring.com

______________________________________________
R-help@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.

Reply via email to