Duncans-MacBook-Pro-4[R-51]>R

R version 2.13.0 Under development (unstable) (2011-01-24 r54100)
Copyright (C) 2011 The R Foundation for Statistical Computing
ISBN 3-900051-07-0
Platform: x86_64-apple-darwin10.4.0 (64-bit)

R is free software and comes with ABSOLUTELY NO WARRANTY.
You are welcome to redistribute it under certain conditions.
Type 'license()' or 'licence()' for distribution details.

  Natural language support but running in an English locale

R is a collaborative project with many contributors.
Type 'contributors()' for more information and
'citation()' on how to cite R or R packages in publications.

Type 'demo()' for some demos, 'help()' for on-line help, or
'help.start()' for an HTML browser interface to help.
Type 'q()' to quit R.

> source("namespaces.R"); source("spreadsheet.R")
> read.ods("~/test2.ods")
Error in read.ods("~/test2.ods") : could not find function "getNodeSet"

Enter a frame number, or 0 to exit   

1: read.ods("~/test2.ods")

Selection: 0
> library(XML)
> read.ods("~/test2.ods")
Error in xmlParse(zipArchive(file)[["content.xml"]]) : 
  could not find function "zipArchive"

Enter a frame number, or 0 to exit   

1: read.ods("~/test2.ods")
2: spreadsheet.R#20: getNodeSet(doc, "//table:table", "table")
3: xpathApply(doc, path, fun, ..., namespaces = namespaces, sessionEnc
4: xmlParse(zipArchive(file)[["content.xml"]])

Selection: 0
> library(XML); library(Rcompression)

Attaching package: 'Rcompression'

The following object(s) are masked from 'package:utils':

    zip

> read.ods("~/test2.ods")
Error in is(object, Class) : 
  trying to get slot "className" from an object of a basic class ("NULL") with no slots

Enter a frame number, or 0 to exit   

1: read.ods("~/test2.ods")
2: spreadsheet.R#21: lapply(tb, read.odsSheet, header = header, string
3: FUN(X[[1]], ...)
4: spreadsheet.R#112: lapply(seq(length = ncol(ans)), function(i) {
5: FUN(1:5[[2]], ...)
6: spreadsheet.R#120: as(unlist(ans[, i]), colType)
7: is(object, Class)

Selection: 6
Called from: eval(substitute(browser(skipCalls = skip), list(skip = 7 - which)), 
    envir = sys.frame(which))
Browse[1]> ls()
 [1] "asMethod"      "canCache"      "Class"         "coerceFun"    
 [5] "coerceMethods" "ext"           "inherited"     "object"       
 [9] "sig"           "strict"        "thisClass"     "where"        
Browse[1]> 

Enter a frame number, or 0 to exit   

1: read.ods("~/test2.ods")
2: spreadsheet.R#21: lapply(tb, read.odsSheet, header = header, string
3: FUN(X[[1]], ...)
4: spreadsheet.R#112: lapply(seq(length = ncol(ans)), function(i) {
5: FUN(1:5[[2]], ...)
6: spreadsheet.R#120: as(unlist(ans[, i]), colType)
7: is(object, Class)

Selection: 5
*** output flushed ***
Browse[1]> ls()
[1] "colType" "i"       "tp"     
Browse[1]> colType
NULL
Browse[1]> i
[1] 2
Browse[1]> tp
[1] "float"      "string"     "percentage"
Browse[1]> 

Enter a frame number, or 0 to exit   

1: read.ods("~/test2.ods")
2: spreadsheet.R#21: lapply(tb, read.odsSheet, header = header, string
3: FUN(X[[1]], ...)
4: spreadsheet.R#112: lapply(seq(length = ncol(ans)), function(i) {
5: FUN(1:5[[2]], ...)
6: spreadsheet.R#120: as(unlist(ans[, i]), colType)
7: is(object, Class)

Selection: 3
Called from: as(unlist(ans[, i]), colType)
Browse[1]> 

Enter a frame number, or 0 to exit   

1: read.ods("~/test2.ods")
2: spreadsheet.R#21: lapply(tb, read.odsSheet, header = header, string
3: FUN(X[[1]], ...)
4: spreadsheet.R#112: lapply(seq(length = ncol(ans)), function(i) {
5: FUN(1:5[[2]], ...)
6: spreadsheet.R#120: as(unlist(ans[, i]), colType)
7: is(object, Class)

Selection: 1
Called from: lapply(seq(length = ncol(ans)), function(i) {
    if (all(is.na(types[, i]))) 
        return(NULL)
    tp = unique(unlist(types[, i]))
    if (is.null(tp)) 
        return(NULL)
    colType = getColType(tp)
    if (is.function(colType)) 
        colType(ans[, i])
    else as(unlist(ans[, i]), colType)
})
Browse[1]> doc
*** output flushed ***
Browse[1]> length(tb)
[1] 4
Browse[1]> tb[[4]]
<table:table table:name="Sheet3" table:style-name="ta1" table:print="false">
  <table:table-column table:style-name="co6" table:default-cell-style-name="Default"/>
  <table:table-row table:style-name="ro1">
    <table:table-cell/>
  </table:table-row>
</table:table> 
Browse[1]> tb[[3]]
*** output flushed ***
Browse[1]> tb[[1]]
<table:table table:name="cc" table:style-name="ta1" table:print="false">
  <table:table-column table:style-name="co1" table:default-cell-style-name="ce5"/>
  <table:table-column table:style-name="co2" table:default-cell-style-name="Default"/>
  <table:table-column table:style-name="co3" table:default-cell-style-name="Default"/>
  <table:table-column table:style-name="co4" table:default-cell-style-name="Default"/>
  <table:table-column table:style-name="co5" table:default-cell-style-name="Default"/>
  <table:table-row table:style-name="ro1">
    <table:table-cell table:style-name="ce1" office:value-type="string">
      <text:p>n</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="ce7" office:value-type="string">
      <text:p>Group 1</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="ce7" office:value-type="string">
      <text:p>Group 3</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="ce7" office:value-type="string">
      <text:p>Group 4</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="ce7" office:value-type="string">
      <text:p>Group 5</text:p>
    </table:table-cell>
  </table:table-row>
  <table:table-row table:style-name="ro1">
    <table:table-cell table:style-name="ce1" office:value-type="float" office:value="937">
      <text:p>937</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="ce1" office:value-type="float" office:value="14">
      <text:p>14</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="ce1" office:value-type="float" office:value="8">
      <text:p>8</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="ce1" office:value-type="float" office:value="17">
      <text:p>17</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="ce1" office:value-type="float" office:value="898">
      <text:p>898</text:p>
    </table:table-cell>
  </table:table-row>
  <table:table-row table:style-name="ro1">
    <table:table-cell table:style-name="Default"/>
    <table:table-cell table:number-columns-repeated="4"/>
  </table:table-row>
  <table:table-row table:style-name="ro1">
    <table:table-cell table:style-name="ce2" office:value-type="string">
      <text:p>Age</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="ce2" office:value-type="string">
      <text:p>Group 1</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="ce2" office:value-type="string">
      <text:p>Group 3</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="ce2" office:value-type="string">
      <text:p>Group 4</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="ce2" office:value-type="string">
      <text:p>Group 5</text:p>
    </table:table-cell>
  </table:table-row>
  <table:table-row table:style-name="ro1">
    <table:table-cell table:style-name="ce2"/>
    <table:table-cell table:style-name="ce2" office:value-type="string">
      <text:p>37.07 (10.6)</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="ce2" office:value-type="string">
      <text:p>40.88 (6.29)</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="ce2" office:value-type="string">
      <text:p>29.94(10.1)</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="ce2" office:value-type="string">
      <text:p>39.17(11.8)</text:p>
    </table:table-cell>
  </table:table-row>
  <table:table-row table:style-name="ro1">
    <table:table-cell table:style-name="Default"/>
    <table:table-cell table:number-columns-repeated="4"/>
  </table:table-row>
  <table:table-row table:style-name="ro1">
    <table:table-cell table:style-name="ce3"/>
    <table:table-cell table:style-name="ce3" office:value-type="string">
      <text:p>Group 1</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="ce3" office:value-type="string">
      <text:p>Group 3</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="ce3" office:value-type="string">
      <text:p>Group 4</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="ce3" office:value-type="string">
      <text:p>Group 5</text:p>
    </table:table-cell>
  </table:table-row>
  <table:table-row table:style-name="ro1">
    <table:table-cell table:style-name="ce3" office:value-type="string">
      <text:p>male </text:p>
    </table:table-cell>
    <table:table-cell table:style-name="ce3" office:value-type="float" office:value="9">
      <text:p>9</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="ce3" office:value-type="float" office:value="4">
      <text:p>4</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="ce3" office:value-type="float" office:value="3">
      <text:p>3</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="ce3" office:value-type="float" office:value="505">
      <text:p>505</text:p>
    </table:table-cell>
  </table:table-row>
  <table:table-row table:style-name="ro1">
    <table:table-cell table:style-name="ce3"/>
    <table:table-cell table:style-name="ce8" table:formula="of:=[.B8]/SUM([.B8:.E8])" office:value-type="percentage" office:value="0.017274472168906">
      <text:p>1.73%</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="ce8" table:formula="of:=[.C8]/SUM([.B8:.E8])" office:value-type="percentage" office:value="0.00767754318618042">
      <text:p>0.77%</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="ce8" table:formula="of:=[.D8]/SUM([.B8:.E8])" office:value-type="percentage" office:value="0.00575815738963532">
      <text:p>0.58%</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="ce8" table:formula="of:=[.E8]/SUM([.B8:.E8])" office:value-type="percentage" office:value="0.969289827255278">
      <text:p>96.93%</text:p>
    </table:table-cell>
  </table:table-row>
  <table:table-row table:style-name="ro1">
    <table:table-cell table:style-name="ce3" office:value-type="string">
      <text:p>female</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="ce3" office:value-type="float" office:value="5">
      <text:p>5</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="ce3" office:value-type="float" office:value="4">
      <text:p>4</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="ce3" office:value-type="float" office:value="14">
      <text:p>14</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="ce3" office:value-type="float" office:value="393">
      <text:p>393</text:p>
    </table:table-cell>
  </table:table-row>
  <table:table-row table:style-name="ro1">
    <table:table-cell table:style-name="ce3"/>
    <table:table-cell table:style-name="ce8" table:formula="of:=[.B10]/SUM([.B10:.E10])" office:value-type="percentage" office:value="0.0120192307692308">
      <text:p>1.20%</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="ce8" table:formula="of:=[.C10]/SUM([.B10:.E10])" office:value-type="percentage" office:value="0.00961538461538462">
      <text:p>0.96%</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="ce8" table:formula="of:=[.D10]/SUM([.B10:.E10])" office:value-type="percentage" office:value="0.0336538461538461">
      <text:p>3.37%</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="ce8" table:formula="of:=[.E10]/SUM([.B10:.E10])" office:value-type="percentage" office:value="0.944711538461538">
      <text:p>94.47%</text:p>
    </table:table-cell>
  </table:table-row>
  <table:table-row table:style-name="ro1">
    <table:table-cell table:style-name="Default"/>
    <table:table-cell table:number-columns-repeated="4" office:value-type="string">
      <text:p>
        <text:s/>
      </text:p>
    </table:table-cell>
  </table:table-row>
  <table:table-row table:style-name="ro1">
    <table:table-cell table:style-name="ce4" office:value-type="string">
      <text:p>race</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="ce4" office:value-type="string">
      <text:p>Group 1</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="ce4" office:value-type="string">
      <text:p>Group 3</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="ce4" office:value-type="string">
      <text:p>Group 4</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="ce4" office:value-type="string">
      <text:p>Group 5</text:p>
    </table:table-cell>
  </table:table-row>
  <table:table-row table:style-name="ro1">
    <table:table-cell table:style-name="ce4" office:value-type="string">
      <text:p>African</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="ce4" office:value-type="float" office:value="8">
      <text:p>8</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="ce4" office:value-type="float" office:value="6">
      <text:p>6</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="ce4" office:value-type="float" office:value="12">
      <text:p>12</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="ce4" office:value-type="float" office:value="472">
      <text:p>472</text:p>
    </table:table-cell>
  </table:table-row>
  <table:table-row table:style-name="ro1">
    <table:table-cell table:style-name="ce4"/>
    <table:table-cell table:style-name="ce9" table:formula="of:=[.B14]/SUM([.B14:.E14])" office:value-type="percentage" office:value="0.0160642570281124">
      <text:p>1.61%</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="ce9" table:formula="of:=[.C14]/SUM([.B14:.E14])" office:value-type="percentage" office:value="0.0120481927710843">
      <text:p>1.20%</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="ce9" table:formula="of:=[.D14]/SUM([.B14:.E14])" office:value-type="percentage" office:value="0.0240963855421687">
      <text:p>2.41%</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="ce9" table:formula="of:=[.E14]/SUM([.B14:.E14])" office:value-type="percentage" office:value="0.947791164658634">
      <text:p>94.78%</text:p>
    </table:table-cell>
  </table:table-row>
  <table:table-row table:style-name="ro1">
    <table:table-cell table:style-name="ce4" office:value-type="string">
      <text:p>Caucasian</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="ce4" office:value-type="float" office:value="6">
      <text:p>6</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="ce4" office:value-type="float" office:value="2">
      <text:p>2</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="ce4" office:value-type="float" office:value="5">
      <text:p>5</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="ce4" office:value-type="float" office:value="426">
      <text:p>426</text:p>
    </table:table-cell>
  </table:table-row>
  <table:table-row table:style-name="ro1">
    <table:table-cell table:style-name="ce4"/>
    <table:table-cell table:style-name="ce9" table:formula="of:=[.B16]/SUM([.B16:.E16])" office:value-type="percentage" office:value="0.0136674259681093">
      <text:p>1.37%</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="ce9" table:formula="of:=[.C16]/SUM([.B16:.E16])" office:value-type="percentage" office:value="0.00455580865603645">
      <text:p>0.46%</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="ce9" table:formula="of:=[.D16]/SUM([.B16:.E16])" office:value-type="percentage" office:value="0.0113895216400911">
      <text:p>1.14%</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="ce9" table:formula="of:=[.E16]/SUM([.B16:.E16])" office:value-type="percentage" office:value="0.970387243735763">
      <text:p>97.04%</text:p>
    </table:table-cell>
  </table:table-row>
  <table:table-row table:style-name="ro1">
    <table:table-cell table:style-name="Default"/>
    <table:table-cell table:number-columns-repeated="4"/>
  </table:table-row>
  <table:table-row table:style-name="ro1">
    <table:table-cell office:value-type="string">
      <text:p>Edu.shc <text:s text:c="2"/></text:p>
    </table:table-cell>
    <table:table-cell table:style-name="ce5" office:value-type="string">
      <text:p>Group 1</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="ce5" office:value-type="string">
      <text:p>Group 3</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="ce5" office:value-type="string">
      <text:p>Group 4</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="ce5" office:value-type="string">
      <text:p>Group 5</text:p>
    </table:table-cell>
  </table:table-row>
  <table:table-row table:style-name="ro1">
    <table:table-cell office:value-type="string">
      <text:p><text:s text:c="2"/>beyond SH <text:s/></text:p>
    </table:table-cell>
    <table:table-cell table:style-name="ce5" office:value-type="float" office:value="8">
      <text:p>8</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="ce5" office:value-type="float" office:value="5">
      <text:p>5</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="ce5" office:value-type="float" office:value="13">
      <text:p>13</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="ce5" office:value-type="float" office:value="398">
      <text:p>398</text:p>
    </table:table-cell>
  </table:table-row>
  <table:table-row table:style-name="ro1">
    <table:table-cell/>
    <table:table-cell table:style-name="ce10" table:formula="of:=[.B20]/SUM([.B20:.E20])" office:value-type="percentage" office:value="0.0188679245283019">
      <text:p>1.89%</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="ce10" table:formula="of:=[.C20]/SUM([.B20:.E20])" office:value-type="percentage" office:value="0.0117924528301887">
      <text:p>1.18%</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="ce10" table:formula="of:=[.D20]/SUM([.B20:.E20])" office:value-type="percentage" office:value="0.0306603773584906">
      <text:p>3.07%</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="ce10" table:formula="of:=[.E20]/SUM([.B20:.E20])" office:value-type="percentage" office:value="0.938679245283019">
      <text:p>93.87%</text:p>
    </table:table-cell>
  </table:table-row>
  <table:table-row table:style-name="ro1">
    <table:table-cell office:value-type="string">
      <text:p><text:s text:c="2"/>no SH <text:s text:c="6"/></text:p>
    </table:table-cell>
    <table:table-cell table:style-name="ce5" office:value-type="float" office:value="1">
      <text:p>1</text:p>
    </table:table-cell>
    <table:table-cell table:number-columns-repeated="2" table:style-name="ce5" office:value-type="float" office:value="0">
      <text:p>0</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="ce5" office:value-type="float" office:value="24">
      <text:p>24</text:p>
    </table:table-cell>
  </table:table-row>
  <table:table-row table:style-name="ro1">
    <table:table-cell/>
    <table:table-cell table:style-name="ce10" table:formula="of:=[.B22]/SUM([.B22:.E22])" office:value-type="percentage" office:value="0.04">
      <text:p>4.00%</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="ce10" table:formula="of:=[.C22]/SUM([.B22:.E22])" office:value-type="percentage" office:value="0">
      <text:p>0.00%</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="ce10" table:formula="of:=[.D22]/SUM([.B22:.E22])" office:value-type="percentage" office:value="0">
      <text:p>0.00%</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="ce10" table:formula="of:=[.E22]/SUM([.B22:.E22])" office:value-type="percentage" office:value="0.96">
      <text:p>96.00%</text:p>
    </table:table-cell>
  </table:table-row>
  <table:table-row table:style-name="ro1">
    <table:table-cell office:value-type="string">
      <text:p><text:s text:c="2"/>SH graduate </text:p>
    </table:table-cell>
    <table:table-cell table:style-name="ce5" office:value-type="float" office:value="2">
      <text:p>2</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="ce5" office:value-type="float" office:value="1">
      <text:p>1</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="ce5" office:value-type="float" office:value="3">
      <text:p>3</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="ce5" office:value-type="float" office:value="228">
      <text:p>228</text:p>
    </table:table-cell>
  </table:table-row>
  <table:table-row table:style-name="ro1">
    <table:table-cell/>
    <table:table-cell table:style-name="ce10" table:formula="of:=[.B24]/SUM([.B24:.E24])" office:value-type="percentage" office:value="0.00854700854700855">
      <text:p>0.85%</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="ce10" table:formula="of:=[.C24]/SUM([.B24:.E24])" office:value-type="percentage" office:value="0.00427350427350427">
      <text:p>0.43%</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="ce10" table:formula="of:=[.D24]/SUM([.B24:.E24])" office:value-type="percentage" office:value="0.0128205128205128">
      <text:p>1.28%</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="ce10" table:formula="of:=[.E24]/SUM([.B24:.E24])" office:value-type="percentage" office:value="0.974358974358974">
      <text:p>97.44%</text:p>
    </table:table-cell>
  </table:table-row>
  <table:table-row table:style-name="ro1">
    <table:table-cell office:value-type="string">
      <text:p><text:s text:c="2"/>some SH <text:s/></text:p>
    </table:table-cell>
    <table:table-cell table:style-name="ce5" office:value-type="float" office:value="3">
      <text:p>3</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="ce5" office:value-type="float" office:value="2">
      <text:p>2</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="ce5" office:value-type="float" office:value="1">
      <text:p>1</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="ce5" office:value-type="float" office:value="247">
      <text:p>247</text:p>
    </table:table-cell>
  </table:table-row>
  <table:table-row table:style-name="ro1">
    <table:table-cell/>
    <table:table-cell table:style-name="ce10" table:formula="of:=[.B26]/SUM([.B26:.E26])" office:value-type="percentage" office:value="0.0118577075098814">
      <text:p>1.19%</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="ce10" table:formula="of:=[.C26]/SUM([.B26:.E26])" office:value-type="percentage" office:value="0.00790513833992095">
      <text:p>0.79%</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="ce10" table:formula="of:=[.D26]/SUM([.B26:.E26])" office:value-type="percentage" office:value="0.00395256916996047">
      <text:p>0.40%</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="ce10" table:formula="of:=[.E26]/SUM([.B26:.E26])" office:value-type="percentage" office:value="0.976284584980237">
      <text:p>97.63%</text:p>
    </table:table-cell>
  </table:table-row>
  <table:table-row table:style-name="ro1">
    <table:table-cell table:style-name="Default"/>
    <table:table-cell table:number-columns-repeated="4"/>
  </table:table-row>
  <table:table-row table:style-name="ro1">
    <table:table-cell table:style-name="ce6" office:value-type="string">
      <text:p>marital <text:s/></text:p>
    </table:table-cell>
    <table:table-cell table:style-name="ce6" office:value-type="string">
      <text:p>Group 1</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="ce6" office:value-type="string">
      <text:p>Group 3</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="ce6" office:value-type="string">
      <text:p>Group 4</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="ce6" office:value-type="string">
      <text:p>Group 5</text:p>
    </table:table-cell>
  </table:table-row>
  <table:table-row table:style-name="ro1">
    <table:table-cell table:style-name="ce6" office:value-type="string">
      <text:p><text:s text:c="2"/>Div/Sep/Wid <text:s/></text:p>
    </table:table-cell>
    <table:table-cell table:style-name="ce6" office:value-type="float" office:value="4">
      <text:p>4</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="ce6" office:value-type="float" office:value="2">
      <text:p>2</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="ce6" office:value-type="float" office:value="4">
      <text:p>4</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="ce6" office:value-type="float" office:value="216">
      <text:p>216</text:p>
    </table:table-cell>
  </table:table-row>
  <table:table-row table:style-name="ro1">
    <table:table-cell table:style-name="ce6"/>
    <table:table-cell table:style-name="ce11" table:formula="of:=[.B30]/SUM([.B30:.E30])" office:value-type="percentage" office:value="0.0176991150442478">
      <text:p>1.77%</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="ce11" table:formula="of:=[.C30]/SUM([.B30:.E30])" office:value-type="percentage" office:value="0.00884955752212389">
      <text:p>0.88%</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="ce11" table:formula="of:=[.D30]/SUM([.B30:.E30])" office:value-type="percentage" office:value="0.0176991150442478">
      <text:p>1.77%</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="ce11" table:formula="of:=[.E30]/SUM([.B30:.E30])" office:value-type="percentage" office:value="0.955752212389381">
      <text:p>95.58%</text:p>
    </table:table-cell>
  </table:table-row>
  <table:table-row table:style-name="ro1">
    <table:table-cell table:style-name="ce6" office:value-type="string">
      <text:p><text:s text:c="2"/>Married <text:s/></text:p>
    </table:table-cell>
    <table:table-cell table:style-name="ce6" office:value-type="float" office:value="1">
      <text:p>1</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="ce6" office:value-type="float" office:value="0">
      <text:p>0</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="ce6" office:value-type="float" office:value="4">
      <text:p>4</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="ce6" office:value-type="float" office:value="175">
      <text:p>175</text:p>
    </table:table-cell>
  </table:table-row>
  <table:table-row table:style-name="ro1">
    <table:table-cell table:style-name="ce6"/>
    <table:table-cell table:style-name="ce11" table:formula="of:=[.B32]/SUM([.B32:.E32])" office:value-type="percentage" office:value="0.00555555555555556">
      <text:p>0.56%</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="ce11" table:formula="of:=[.C32]/SUM([.B32:.E32])" office:value-type="percentage" office:value="0">
      <text:p>0.00%</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="ce11" table:formula="of:=[.D32]/SUM([.B32:.E32])" office:value-type="percentage" office:value="0.0222222222222222">
      <text:p>2.22%</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="ce11" table:formula="of:=[.E32]/SUM([.B32:.E32])" office:value-type="percentage" office:value="0.972222222222222">
      <text:p>97.22%</text:p>
    </table:table-cell>
  </table:table-row>
  <table:table-row table:style-name="ro1">
    <table:table-cell table:style-name="ce6" office:value-type="string">
      <text:p><text:s text:c="2"/>Never married </text:p>
    </table:table-cell>
    <table:table-cell table:style-name="ce6" office:value-type="float" office:value="9">
      <text:p>9</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="ce6" office:value-type="float" office:value="6">
      <text:p>6</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="ce6" office:value-type="float" office:value="9">
      <text:p>9</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="ce6" office:value-type="float" office:value="507">
      <text:p>507</text:p>
    </table:table-cell>
  </table:table-row>
  <table:table-row table:style-name="ro1">
    <table:table-cell table:style-name="ce6"/>
    <table:table-cell table:style-name="ce11" table:formula="of:=[.B34]/SUM([.B34:.E34])" office:value-type="percentage" office:value="0.0169491525423729">
      <text:p>1.69%</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="ce11" table:formula="of:=[.C34]/SUM([.B34:.E34])" office:value-type="percentage" office:value="0.0112994350282486">
      <text:p>1.13%</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="ce11" table:formula="of:=[.D34]/SUM([.B34:.E34])" office:value-type="percentage" office:value="0.0169491525423729">
      <text:p>1.69%</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="ce11" table:formula="of:=[.E34]/SUM([.B34:.E34])" office:value-type="percentage" office:value="0.954802259887006">
      <text:p>95.48%</text:p>
    </table:table-cell>
  </table:table-row>
</table:table> 
Browse[1]> read.odsSheet(tb[[1]], TRUE)
Error during wrapup: trying to get slot "className" from an object of a basic class ("NULL") with no slots
Browse[1]> c

Enter a frame number, or 0 to exit   

1: read.ods("~/test2.ods")
2: spreadsheet.R#21: lapply(tb, read.odsSheet, header = header, string
3: FUN(X[[1]], ...)
4: spreadsheet.R#112: lapply(seq(length = ncol(ans)), function(i) {
5: FUN(1:5[[2]], ...)
6: spreadsheet.R#120: as(unlist(ans[, i]), colType)
7: is(object, Class)

Selection: 0
> debug(read.odsShet)
Error in debug(read.odsShet) : object 'read.odsShet' not found

Enter a frame number, or 0 to exit   

1: debug(read.odsShet)

Selection: 0
> debug(read.odsSheet)
> read.ods("~/test2.ods")
debugging in: FUN(X[[1L]], ...)
debug at spreadsheet.R#45: {
    numCols = xmlGetAttr(tb[[1]], "number-columns-repeated", 
        0, as.integer)
    rows = getNodeSet(tb, "./table:table-row[./table:table-cell[@office:value | @office:value-type]]", 
        OpenOfficeNamespaces[c("office", "table")])
    if (length(rows) == 0) 
        return(NULL)
    rowNames = FALSE
    varNames = character()
    if (header) {
        varNames = xmlSApply(rows[[1]], getCellValue)
        rows = rows[-1]
    }
    types = t(sapply(rows, function(x) unlist(xmlApply(x, getCellType))))
    ans = t(sapply(rows, function(x) {
        unlist(xmlApply(x, getCellValue), recursive = FALSE)
    }))
    realCols = apply(ans, 2, function(x) any(!is.na(x)))
    if (!realCols[1]) {
        rowNames = FALSE
    }
    if (header) {
        if (is.na(varNames[1]) && realCols[1]) {
            rowNames = TRUE
        }
    }
    ans = ans[, realCols]
    types = types[, realCols]
    if (!is.matrix(ans)) {
        tp = getColType(types)
        return(if (is.function(tp)) tp(ans) else as(ans, tp))
    }
    if (length(varNames)) 
        varNames = varNames[realCols]
    tmp = lapply(seq(length = ncol(ans)), function(i) {
        if (all(is.na(types[, i]))) 
            return(NULL)
        tp = unique(unlist(types[, i]))
        if (is.null(tp)) 
            return(NULL)
        colType = getColType(tp)
        if (is.function(colType)) 
            colType(ans[, i])
        else as(unlist(ans[, i]), colType)
    })
    tmp = tmp[!sapply(tmp, is.null)]
    ans = as.data.frame(tmp, stringsAsFactors = stringsAsFactors)
    if (rowNames) {
        rownames(ans) = ans[, 1]
        ans = ans[, -1]
        varNames = varNames[-1]
    }
    structure(ans, names = if (length(varNames)) 
        as.character(varNames)
    else paste("V", seq(length = length(tmp)), sep = ""))
}
attr(,"srcfile")
spreadsheet.R 
attr(,"wholeSrcref")
# Came from RExcelML
if(FALSE) {
setClass("OOWorkbook", contains = "ZipArchiveEntry")
setClass("OOWorksheet", representation(content = "XMLInternalDocument", name = "ZipArchiveEntry"))
setClass("OOWorksheetFile", contains = "ZipArchiveEntry")

setMethod("names", "OOWorkbook",
            function(x) {
              doc = xmlParse(x[["content.xml"]])
              unlist(getNodeSet(doc, "//table:table/@table:name", "table"))
            })
#setMethod("[[", "Workbook"
}

read.ods =
function(file, header = TRUE, simplify = TRUE,
          doc = xmlParse(zipArchive(file)[["content.xml"]]),
          stringsAsFactors = TRUE)
{
  tb = getNodeSet(doc, "//table:table", "table")
  ans = lapply(tb, read.odsSheet, header = header, stringsAsFactors = stringsAsFactors)

  n = sapply(ans, is.null)
  if(any(n)) {
     ans = ans[!n]
     tb = tb[!n]
  }
  
  if(simplify && length(ans) == 1)
    return(ans[[1]])

  names(ans) = sapply(tb, xmlGetAttr, "name")
  ans
}

read.odsSheet =
  #
  #
  # We need to deal with blank rows and where cells are repeated.
  #   In progress
  #
  # tb is the table:table node.
  #
function(tb, header = TRUE, stringsAsFactors = TRUE) # really a header?
{

    # Get num columns from the first row.
  numCols = xmlGetAttr(tb[[1]], "number-columns-repeated", 0, as.integer)

    # Get all rows which have a cell with a office:value entry. Otherwise
    # it is an empty row.
  rows = getNodeSet(tb, "./table:table-row[./table:table-cell[@office:value | @office:value-type]]",
                        OpenOfficeNamespaces[c("office", "table")])

  if(length(rows) == 0)
     return(NULL)

  rowNames = FALSE
  varNames = character()
  
  if(header) {
    varNames = xmlSApply(rows[[1]], getCellValue)
#   if(length(varNames) && is.na(varNames[1])) {
#      rowNames = TRUE
#      varNames = varNames[-1]
#   }
    rows = rows[-1]
  } 


     # This gets the types by row and this might be ragged, i.e. not by column
     # Now changed to expand the missing columns so won't be ragged.
  types = t(sapply(rows, function(x) unlist(xmlApply(x, getCellType))))
     # Now get all the cells, expanding the elements that are missing so all the
     # the result will be a matrix
  ans = t(sapply(rows,
                 function(x) {
                    unlist(xmlApply(x, getCellValue), recursive = FALSE)
                  }))

  realCols = apply(ans, 2, function(x) any(!is.na(x)))

  if(!realCols[1]) {
      rowNames = FALSE
  }

  if(header) {
    if(is.na(varNames[1]) && realCols[1]) {
       rowNames = TRUE
    }
  }  

  
  ans = ans[ , realCols ]
  types = types[, realCols]


  if(!is.matrix(ans)) {
    tp = getColType(types)
    return(if(is.function(tp))
             tp(ans)
           else
             as(ans, tp))
  }  
  
  if(length(varNames))
     varNames = varNames[realCols]



    # This seems to go along rows, not columns
  tmp = lapply(seq(length = ncol(ans)),
               function(i) {
                  if(all(is.na(types[,i])))
                    return(NULL)
                  tp = unique(unlist(types[,i]))
                  if(is.null(tp))
                    return(NULL)
                  colType = getColType(tp)
                  if(is.function(colType))
                    colType(ans[,i])
                  else
                    as(unlist(ans[,i]), colType)
               })
  tmp = tmp[!sapply(tmp, is.null)]
  ans = as.data.frame(tmp, stringsAsFactors = stringsAsFactors)

  
  if(rowNames) {
    rownames(ans) = ans[,1]
    ans = ans[,-1]
    varNames = varNames[-1]
  }
  
  structure(ans, names = if(length(varNames))
                            as.character(varNames)
                         else
                            paste("V", seq(length = length(tmp)), sep = ""))
}
Browse[2]> n
debug at spreadsheet.R#48: numCols = xmlGetAttr(tb[[1]], "number-columns-repeated", 0, as.integer)
Browse[2]> n
debug at spreadsheet.R#52: rows = getNodeSet(tb, "./table:table-row[./table:table-cell[@office:value | @office:value-type]]", 
    OpenOfficeNamespaces[c("office", "table")])
Browse[2]> n
debug at spreadsheet.R#55: if (length(rows) == 0) return(NULL)
Browse[2]> n
debug at spreadsheet.R#55: NULL
Browse[2]> n
debug at spreadsheet.R#58: rowNames = FALSE
Browse[2]> n
debug at spreadsheet.R#59: varNames = character()
Browse[2]> n
debug at spreadsheet.R#61: if (header) {
    varNames = xmlSApply(rows[[1]], getCellValue)
    rows = rows[-1]
}
Browse[2]> n
debug at spreadsheet.R#61: {
    varNames = xmlSApply(rows[[1]], getCellValue)
    rows = rows[-1]
}
attr(,"srcfile")
spreadsheet.R 
attr(,"wholeSrcref")
# Came from RExcelML
if(FALSE) {
setClass("OOWorkbook", contains = "ZipArchiveEntry")
setClass("OOWorksheet", representation(content = "XMLInternalDocument", name = "ZipArchiveEntry"))
setClass("OOWorksheetFile", contains = "ZipArchiveEntry")

setMethod("names", "OOWorkbook",
            function(x) {
              doc = xmlParse(x[["content.xml"]])
              unlist(getNodeSet(doc, "//table:table/@table:name", "table"))
            })
#setMethod("[[", "Workbook"
}

read.ods =
function(file, header = TRUE, simplify = TRUE,
          doc = xmlParse(zipArchive(file)[["content.xml"]]),
          stringsAsFactors = TRUE)
{
  tb = getNodeSet(doc, "//table:table", "table")
  ans = lapply(tb, read.odsSheet, header = header, stringsAsFactors = stringsAsFactors)

  n = sapply(ans, is.null)
  if(any(n)) {
     ans = ans[!n]
     tb = tb[!n]
  }
  
  if(simplify && length(ans) == 1)
    return(ans[[1]])

  names(ans) = sapply(tb, xmlGetAttr, "name")
  ans
}

read.odsSheet =
  #
  #
  # We need to deal with blank rows and where cells are repeated.
  #   In progress
  #
  # tb is the table:table node.
  #
function(tb, header = TRUE, stringsAsFactors = TRUE) # really a header?
{

    # Get num columns from the first row.
  numCols = xmlGetAttr(tb[[1]], "number-columns-repeated", 0, as.integer)

    # Get all rows which have a cell with a office:value entry. Otherwise
    # it is an empty row.
  rows = getNodeSet(tb, "./table:table-row[./table:table-cell[@office:value | @office:value-type]]",
                        OpenOfficeNamespaces[c("office", "table")])

  if(length(rows) == 0)
     return(NULL)

  rowNames = FALSE
  varNames = character()
  
  if(header) {
    varNames = xmlSApply(rows[[1]], getCellValue)
#   if(length(varNames) && is.na(varNames[1])) {
#      rowNames = TRUE
#      varNames = varNames[-1]
#   }
    rows = rows[-1]
  }
Browse[2]> n
debug at spreadsheet.R#62: varNames = xmlSApply(rows[[1]], getCellValue)
Browse[2]> n
debug at spreadsheet.R#67: rows = rows[-1]
Browse[2]> varNames
table-cell table-cell table-cell table-cell table-cell 
       "n"  "Group 1"  "Group 3"  "Group 4"  "Group 5" 
Browse[2]> n
debug at spreadsheet.R#73: types = t(sapply(rows, function(x) unlist(xmlApply(x, getCellType))))
Browse[2]> n
debug at spreadsheet.R#76: ans = t(sapply(rows, function(x) {
    unlist(xmlApply(x, getCellValue), recursive = FALSE)
}))
Browse[2]> types
*** output flushed ***
Browse[2]> n
debug at spreadsheet.R#81: realCols = apply(ans, 2, function(x) any(!is.na(x)))
Browse[2]> n
debug at spreadsheet.R#83: if (!realCols[1]) {
    rowNames = FALSE
}
Browse[2]> n
debug at spreadsheet.R#83: NULL
Browse[2]> n
debug at spreadsheet.R#87: if (header) {
    if (is.na(varNames[1]) && realCols[1]) {
        rowNames = TRUE
    }
}
Browse[2]> n
debug at spreadsheet.R#87: {
    if (is.na(varNames[1]) && realCols[1]) {
        rowNames = TRUE
    }
}
attr(,"srcfile")
spreadsheet.R 
attr(,"wholeSrcref")
# Came from RExcelML
if(FALSE) {
setClass("OOWorkbook", contains = "ZipArchiveEntry")
setClass("OOWorksheet", representation(content = "XMLInternalDocument", name = "ZipArchiveEntry"))
setClass("OOWorksheetFile", contains = "ZipArchiveEntry")

setMethod("names", "OOWorkbook",
            function(x) {
              doc = xmlParse(x[["content.xml"]])
              unlist(getNodeSet(doc, "//table:table/@table:name", "table"))
            })
#setMethod("[[", "Workbook"
}

read.ods =
function(file, header = TRUE, simplify = TRUE,
          doc = xmlParse(zipArchive(file)[["content.xml"]]),
          stringsAsFactors = TRUE)
{
  tb = getNodeSet(doc, "//table:table", "table")
  ans = lapply(tb, read.odsSheet, header = header, stringsAsFactors = stringsAsFactors)

  n = sapply(ans, is.null)
  if(any(n)) {
     ans = ans[!n]
     tb = tb[!n]
  }
  
  if(simplify && length(ans) == 1)
    return(ans[[1]])

  names(ans) = sapply(tb, xmlGetAttr, "name")
  ans
}

read.odsSheet =
  #
  #
  # We need to deal with blank rows and where cells are repeated.
  #   In progress
  #
  # tb is the table:table node.
  #
function(tb, header = TRUE, stringsAsFactors = TRUE) # really a header?
{

    # Get num columns from the first row.
  numCols = xmlGetAttr(tb[[1]], "number-columns-repeated", 0, as.integer)

    # Get all rows which have a cell with a office:value entry. Otherwise
    # it is an empty row.
  rows = getNodeSet(tb, "./table:table-row[./table:table-cell[@office:value | @office:value-type]]",
                        OpenOfficeNamespaces[c("office", "table")])

  if(length(rows) == 0)
     return(NULL)

  rowNames = FALSE
  varNames = character()
  
  if(header) {
    varNames = xmlSApply(rows[[1]], getCellValue)
#   if(length(varNames) && is.na(varNames[1])) {
#      rowNames = TRUE
#      varNames = varNames[-1]
#   }
    rows = rows[-1]
  } 


     # This gets the types by row and this might be ragged, i.e. not by column
     # Now changed to expand the missing columns so won't be ragged.
  types = t(sapply(rows, function(x) unlist(xmlApply(x, getCellType))))
     # Now get all the cells, expanding the elements that are missing so all the
     # the result will be a matrix
  ans = t(sapply(rows,
                 function(x) {
                    unlist(xmlApply(x, getCellValue), recursive = FALSE)
                  }))

  realCols = apply(ans, 2, function(x) any(!is.na(x)))

  if(!realCols[1]) {
      rowNames = FALSE
  }

  if(header) {
    if(is.na(varNames[1]) && realCols[1]) {
       rowNames = TRUE
    }
  }
Browse[2]> n
debug at spreadsheet.R#88: if (is.na(varNames[1]) && realCols[1]) {
    rowNames = TRUE
}
Browse[2]> n
debug at spreadsheet.R#88: NULL
Browse[2]> n
debug at spreadsheet.R#94: ans = ans[, realCols]
Browse[2]> n
debug at spreadsheet.R#95: types = types[, realCols]
Browse[2]> n
debug at spreadsheet.R#98: if (!is.matrix(ans)) {
    tp = getColType(types)
    return(if (is.function(tp)) tp(ans) else as(ans, tp))
}
Browse[2]> types
*** output flushed ***
Browse[2]> n
debug at spreadsheet.R#98: NULL
Browse[2]> n
debug at spreadsheet.R#106: if (length(varNames)) varNames = varNames[realCols]
Browse[2]> n
debug at spreadsheet.R#106: varNames = varNames[realCols]
Browse[2]> n
debug at spreadsheet.R#112: tmp = lapply(seq(length = ncol(ans)), function(i) {
    if (all(is.na(types[, i]))) 
        return(NULL)
    tp = unique(unlist(types[, i]))
    if (is.null(tp)) 
        return(NULL)
    colType = getColType(tp)
    if (is.function(colType)) 
        colType(ans[, i])
    else as(unlist(ans[, i]), colType)
})
Browse[2]> varNames
table-cell table-cell table-cell table-cell table-cell 
       "n"  "Group 1"  "Group 3"  "Group 4"  "Group 5" 
Browse[2]> types
*** output flushed ***
Browse[2]> ls()
 [1] "ans"              "header"           "numCols"         
 [4] "realCols"         "rowNames"         "rows"            
 [7] "stringsAsFactors" "tb"               "types"           
[10] "varNames"        
Browse[2]> tb
<table:table table:name="cc" table:style-name="ta1" table:print="false">
  <table:table-column table:style-name="co1" table:default-cell-style-name="ce5"/>
  <table:table-column table:style-name="co2" table:default-cell-style-name="Default"/>
  <table:table-column table:style-name="co3" table:default-cell-style-name="Default"/>
  <table:table-column table:style-name="co4" table:default-cell-style-name="Default"/>
  <table:table-column table:style-name="co5" table:default-cell-style-name="Default"/>
  <table:table-row table:style-name="ro1">
    <table:table-cell table:style-name="ce1" office:value-type="string">
      <text:p>n</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="ce7" office:value-type="string">
      <text:p>Group 1</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="ce7" office:value-type="string">
      <text:p>Group 3</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="ce7" office:value-type="string">
      <text:p>Group 4</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="ce7" office:value-type="string">
      <text:p>Group 5</text:p>
    </table:table-cell>
  </table:table-row>
  <table:table-row table:style-name="ro1">
    <table:table-cell table:style-name="ce1" office:value-type="float" office:value="937">
      <text:p>937</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="ce1" office:value-type="float" office:value="14">
      <text:p>14</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="ce1" office:value-type="float" office:value="8">
      <text:p>8</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="ce1" office:value-type="float" office:value="17">
      <text:p>17</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="ce1" office:value-type="float" office:value="898">
      <text:p>898</text:p>
    </table:table-cell>
  </table:table-row>
  <table:table-row table:style-name="ro1">
    <table:table-cell table:style-name="Default"/>
    <table:table-cell table:number-columns-repeated="4"/>
  </table:table-row>
  <table:table-row table:style-name="ro1">
    <table:table-cell table:style-name="ce2" office:value-type="string">
      <text:p>Age</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="ce2" office:value-type="string">
      <text:p>Group 1</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="ce2" office:value-type="string">
      <text:p>Group 3</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="ce2" office:value-type="string">
      <text:p>Group 4</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="ce2" office:value-type="string">
      <text:p>Group 5</text:p>
    </table:table-cell>
  </table:table-row>
  <table:table-row table:style-name="ro1">
    <table:table-cell table:style-name="ce2"/>
    <table:table-cell table:style-name="ce2" office:value-type="string">
      <text:p>37.07 (10.6)</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="ce2" office:value-type="string">
      <text:p>40.88 (6.29)</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="ce2" office:value-type="string">
      <text:p>29.94(10.1)</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="ce2" office:value-type="string">
      <text:p>39.17(11.8)</text:p>
    </table:table-cell>
  </table:table-row>
  <table:table-row table:style-name="ro1">
    <table:table-cell table:style-name="Default"/>
    <table:table-cell table:number-columns-repeated="4"/>
  </table:table-row>
  <table:table-row table:style-name="ro1">
    <table:table-cell table:style-name="ce3"/>
    <table:table-cell table:style-name="ce3" office:value-type="string">
      <text:p>Group 1</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="ce3" office:value-type="string">
      <text:p>Group 3</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="ce3" office:value-type="string">
      <text:p>Group 4</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="ce3" office:value-type="string">
      <text:p>Group 5</text:p>
    </table:table-cell>
  </table:table-row>
  <table:table-row table:style-name="ro1">
    <table:table-cell table:style-name="ce3" office:value-type="string">
      <text:p>male </text:p>
    </table:table-cell>
    <table:table-cell table:style-name="ce3" office:value-type="float" office:value="9">
      <text:p>9</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="ce3" office:value-type="float" office:value="4">
      <text:p>4</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="ce3" office:value-type="float" office:value="3">
      <text:p>3</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="ce3" office:value-type="float" office:value="505">
      <text:p>505</text:p>
    </table:table-cell>
  </table:table-row>
  <table:table-row table:style-name="ro1">
    <table:table-cell table:style-name="ce3"/>
    <table:table-cell table:style-name="ce8" table:formula="of:=[.B8]/SUM([.B8:.E8])" office:value-type="percentage" office:value="0.017274472168906">
      <text:p>1.73%</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="ce8" table:formula="of:=[.C8]/SUM([.B8:.E8])" office:value-type="percentage" office:value="0.00767754318618042">
      <text:p>0.77%</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="ce8" table:formula="of:=[.D8]/SUM([.B8:.E8])" office:value-type="percentage" office:value="0.00575815738963532">
      <text:p>0.58%</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="ce8" table:formula="of:=[.E8]/SUM([.B8:.E8])" office:value-type="percentage" office:value="0.969289827255278">
      <text:p>96.93%</text:p>
    </table:table-cell>
  </table:table-row>
  <table:table-row table:style-name="ro1">
    <table:table-cell table:style-name="ce3" office:value-type="string">
      <text:p>female</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="ce3" office:value-type="float" office:value="5">
      <text:p>5</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="ce3" office:value-type="float" office:value="4">
      <text:p>4</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="ce3" office:value-type="float" office:value="14">
      <text:p>14</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="ce3" office:value-type="float" office:value="393">
      <text:p>393</text:p>
    </table:table-cell>
  </table:table-row>
  <table:table-row table:style-name="ro1">
    <table:table-cell table:style-name="ce3"/>
    <table:table-cell table:style-name="ce8" table:formula="of:=[.B10]/SUM([.B10:.E10])" office:value-type="percentage" office:value="0.0120192307692308">
      <text:p>1.20%</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="ce8" table:formula="of:=[.C10]/SUM([.B10:.E10])" office:value-type="percentage" office:value="0.00961538461538462">
      <text:p>0.96%</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="ce8" table:formula="of:=[.D10]/SUM([.B10:.E10])" office:value-type="percentage" office:value="0.0336538461538461">
      <text:p>3.37%</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="ce8" table:formula="of:=[.E10]/SUM([.B10:.E10])" office:value-type="percentage" office:value="0.944711538461538">
      <text:p>94.47%</text:p>
    </table:table-cell>
  </table:table-row>
  <table:table-row table:style-name="ro1">
    <table:table-cell table:style-name="Default"/>
    <table:table-cell table:number-columns-repeated="4" office:value-type="string">
      <text:p>
        <text:s/>
      </text:p>
    </table:table-cell>
  </table:table-row>
  <table:table-row table:style-name="ro1">
    <table:table-cell table:style-name="ce4" office:value-type="string">
      <text:p>race</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="ce4" office:value-type="string">
      <text:p>Group 1</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="ce4" office:value-type="string">
      <text:p>Group 3</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="ce4" office:value-type="string">
      <text:p>Group 4</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="ce4" office:value-type="string">
      <text:p>Group 5</text:p>
    </table:table-cell>
  </table:table-row>
  <table:table-row table:style-name="ro1">
    <table:table-cell table:style-name="ce4" office:value-type="string">
      <text:p>African</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="ce4" office:value-type="float" office:value="8">
      <text:p>8</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="ce4" office:value-type="float" office:value="6">
      <text:p>6</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="ce4" office:value-type="float" office:value="12">
      <text:p>12</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="ce4" office:value-type="float" office:value="472">
      <text:p>472</text:p>
    </table:table-cell>
  </table:table-row>
  <table:table-row table:style-name="ro1">
    <table:table-cell table:style-name="ce4"/>
    <table:table-cell table:style-name="ce9" table:formula="of:=[.B14]/SUM([.B14:.E14])" office:value-type="percentage" office:value="0.0160642570281124">
      <text:p>1.61%</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="ce9" table:formula="of:=[.C14]/SUM([.B14:.E14])" office:value-type="percentage" office:value="0.0120481927710843">
      <text:p>1.20%</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="ce9" table:formula="of:=[.D14]/SUM([.B14:.E14])" office:value-type="percentage" office:value="0.0240963855421687">
      <text:p>2.41%</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="ce9" table:formula="of:=[.E14]/SUM([.B14:.E14])" office:value-type="percentage" office:value="0.947791164658634">
      <text:p>94.78%</text:p>
    </table:table-cell>
  </table:table-row>
  <table:table-row table:style-name="ro1">
    <table:table-cell table:style-name="ce4" office:value-type="string">
      <text:p>Caucasian</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="ce4" office:value-type="float" office:value="6">
      <text:p>6</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="ce4" office:value-type="float" office:value="2">
      <text:p>2</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="ce4" office:value-type="float" office:value="5">
      <text:p>5</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="ce4" office:value-type="float" office:value="426">
      <text:p>426</text:p>
    </table:table-cell>
  </table:table-row>
  <table:table-row table:style-name="ro1">
    <table:table-cell table:style-name="ce4"/>
    <table:table-cell table:style-name="ce9" table:formula="of:=[.B16]/SUM([.B16:.E16])" office:value-type="percentage" office:value="0.0136674259681093">
      <text:p>1.37%</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="ce9" table:formula="of:=[.C16]/SUM([.B16:.E16])" office:value-type="percentage" office:value="0.00455580865603645">
      <text:p>0.46%</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="ce9" table:formula="of:=[.D16]/SUM([.B16:.E16])" office:value-type="percentage" office:value="0.0113895216400911">
      <text:p>1.14%</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="ce9" table:formula="of:=[.E16]/SUM([.B16:.E16])" office:value-type="percentage" office:value="0.970387243735763">
      <text:p>97.04%</text:p>
    </table:table-cell>
  </table:table-row>
  <table:table-row table:style-name="ro1">
    <table:table-cell table:style-name="Default"/>
    <table:table-cell table:number-columns-repeated="4"/>
  </table:table-row>
  <table:table-row table:style-name="ro1">
    <table:table-cell office:value-type="string">
      <text:p>Edu.shc <text:s text:c="2"/></text:p>
    </table:table-cell>
    <table:table-cell table:style-name="ce5" office:value-type="string">
      <text:p>Group 1</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="ce5" office:value-type="string">
      <text:p>Group 3</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="ce5" office:value-type="string">
      <text:p>Group 4</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="ce5" office:value-type="string">
      <text:p>Group 5</text:p>
    </table:table-cell>
  </table:table-row>
  <table:table-row table:style-name="ro1">
    <table:table-cell office:value-type="string">
      <text:p><text:s text:c="2"/>beyond SH <text:s/></text:p>
    </table:table-cell>
    <table:table-cell table:style-name="ce5" office:value-type="float" office:value="8">
      <text:p>8</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="ce5" office:value-type="float" office:value="5">
      <text:p>5</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="ce5" office:value-type="float" office:value="13">
      <text:p>13</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="ce5" office:value-type="float" office:value="398">
      <text:p>398</text:p>
    </table:table-cell>
  </table:table-row>
  <table:table-row table:style-name="ro1">
    <table:table-cell/>
    <table:table-cell table:style-name="ce10" table:formula="of:=[.B20]/SUM([.B20:.E20])" office:value-type="percentage" office:value="0.0188679245283019">
      <text:p>1.89%</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="ce10" table:formula="of:=[.C20]/SUM([.B20:.E20])" office:value-type="percentage" office:value="0.0117924528301887">
      <text:p>1.18%</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="ce10" table:formula="of:=[.D20]/SUM([.B20:.E20])" office:value-type="percentage" office:value="0.0306603773584906">
      <text:p>3.07%</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="ce10" table:formula="of:=[.E20]/SUM([.B20:.E20])" office:value-type="percentage" office:value="0.938679245283019">
      <text:p>93.87%</text:p>
    </table:table-cell>
  </table:table-row>
  <table:table-row table:style-name="ro1">
    <table:table-cell office:value-type="string">
      <text:p><text:s text:c="2"/>no SH <text:s text:c="6"/></text:p>
    </table:table-cell>
    <table:table-cell table:style-name="ce5" office:value-type="float" office:value="1">
      <text:p>1</text:p>
    </table:table-cell>
    <table:table-cell table:number-columns-repeated="2" table:style-name="ce5" office:value-type="float" office:value="0">
      <text:p>0</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="ce5" office:value-type="float" office:value="24">
      <text:p>24</text:p>
    </table:table-cell>
  </table:table-row>
  <table:table-row table:style-name="ro1">
    <table:table-cell/>
    <table:table-cell table:style-name="ce10" table:formula="of:=[.B22]/SUM([.B22:.E22])" office:value-type="percentage" office:value="0.04">
      <text:p>4.00%</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="ce10" table:formula="of:=[.C22]/SUM([.B22:.E22])" office:value-type="percentage" office:value="0">
      <text:p>0.00%</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="ce10" table:formula="of:=[.D22]/SUM([.B22:.E22])" office:value-type="percentage" office:value="0">
      <text:p>0.00%</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="ce10" table:formula="of:=[.E22]/SUM([.B22:.E22])" office:value-type="percentage" office:value="0.96">
      <text:p>96.00%</text:p>
    </table:table-cell>
  </table:table-row>
  <table:table-row table:style-name="ro1">
    <table:table-cell office:value-type="string">
      <text:p><text:s text:c="2"/>SH graduate </text:p>
    </table:table-cell>
    <table:table-cell table:style-name="ce5" office:value-type="float" office:value="2">
      <text:p>2</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="ce5" office:value-type="float" office:value="1">
      <text:p>1</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="ce5" office:value-type="float" office:value="3">
      <text:p>3</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="ce5" office:value-type="float" office:value="228">
      <text:p>228</text:p>
    </table:table-cell>
  </table:table-row>
  <table:table-row table:style-name="ro1">
    <table:table-cell/>
    <table:table-cell table:style-name="ce10" table:formula="of:=[.B24]/SUM([.B24:.E24])" office:value-type="percentage" office:value="0.00854700854700855">
      <text:p>0.85%</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="ce10" table:formula="of:=[.C24]/SUM([.B24:.E24])" office:value-type="percentage" office:value="0.00427350427350427">
      <text:p>0.43%</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="ce10" table:formula="of:=[.D24]/SUM([.B24:.E24])" office:value-type="percentage" office:value="0.0128205128205128">
      <text:p>1.28%</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="ce10" table:formula="of:=[.E24]/SUM([.B24:.E24])" office:value-type="percentage" office:value="0.974358974358974">
      <text:p>97.44%</text:p>
    </table:table-cell>
  </table:table-row>
  <table:table-row table:style-name="ro1">
    <table:table-cell office:value-type="string">
      <text:p><text:s text:c="2"/>some SH <text:s/></text:p>
    </table:table-cell>
    <table:table-cell table:style-name="ce5" office:value-type="float" office:value="3">
      <text:p>3</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="ce5" office:value-type="float" office:value="2">
      <text:p>2</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="ce5" office:value-type="float" office:value="1">
      <text:p>1</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="ce5" office:value-type="float" office:value="247">
      <text:p>247</text:p>
    </table:table-cell>
  </table:table-row>
  <table:table-row table:style-name="ro1">
    <table:table-cell/>
    <table:table-cell table:style-name="ce10" table:formula="of:=[.B26]/SUM([.B26:.E26])" office:value-type="percentage" office:value="0.0118577075098814">
      <text:p>1.19%</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="ce10" table:formula="of:=[.C26]/SUM([.B26:.E26])" office:value-type="percentage" office:value="0.00790513833992095">
      <text:p>0.79%</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="ce10" table:formula="of:=[.D26]/SUM([.B26:.E26])" office:value-type="percentage" office:value="0.00395256916996047">
      <text:p>0.40%</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="ce10" table:formula="of:=[.E26]/SUM([.B26:.E26])" office:value-type="percentage" office:value="0.976284584980237">
      <text:p>97.63%</text:p>
    </table:table-cell>
  </table:table-row>
  <table:table-row table:style-name="ro1">
    <table:table-cell table:style-name="Default"/>
    <table:table-cell table:number-columns-repeated="4"/>
  </table:table-row>
  <table:table-row table:style-name="ro1">
    <table:table-cell table:style-name="ce6" office:value-type="string">
      <text:p>marital <text:s/></text:p>
    </table:table-cell>
    <table:table-cell table:style-name="ce6" office:value-type="string">
      <text:p>Group 1</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="ce6" office:value-type="string">
      <text:p>Group 3</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="ce6" office:value-type="string">
      <text:p>Group 4</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="ce6" office:value-type="string">
      <text:p>Group 5</text:p>
    </table:table-cell>
  </table:table-row>
  <table:table-row table:style-name="ro1">
    <table:table-cell table:style-name="ce6" office:value-type="string">
      <text:p><text:s text:c="2"/>Div/Sep/Wid <text:s/></text:p>
    </table:table-cell>
    <table:table-cell table:style-name="ce6" office:value-type="float" office:value="4">
      <text:p>4</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="ce6" office:value-type="float" office:value="2">
      <text:p>2</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="ce6" office:value-type="float" office:value="4">
      <text:p>4</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="ce6" office:value-type="float" office:value="216">
      <text:p>216</text:p>
    </table:table-cell>
  </table:table-row>
  <table:table-row table:style-name="ro1">
    <table:table-cell table:style-name="ce6"/>
    <table:table-cell table:style-name="ce11" table:formula="of:=[.B30]/SUM([.B30:.E30])" office:value-type="percentage" office:value="0.0176991150442478">
      <text:p>1.77%</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="ce11" table:formula="of:=[.C30]/SUM([.B30:.E30])" office:value-type="percentage" office:value="0.00884955752212389">
      <text:p>0.88%</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="ce11" table:formula="of:=[.D30]/SUM([.B30:.E30])" office:value-type="percentage" office:value="0.0176991150442478">
      <text:p>1.77%</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="ce11" table:formula="of:=[.E30]/SUM([.B30:.E30])" office:value-type="percentage" office:value="0.955752212389381">
      <text:p>95.58%</text:p>
    </table:table-cell>
  </table:table-row>
  <table:table-row table:style-name="ro1">
    <table:table-cell table:style-name="ce6" office:value-type="string">
      <text:p><text:s text:c="2"/>Married <text:s/></text:p>
    </table:table-cell>
    <table:table-cell table:style-name="ce6" office:value-type="float" office:value="1">
      <text:p>1</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="ce6" office:value-type="float" office:value="0">
      <text:p>0</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="ce6" office:value-type="float" office:value="4">
      <text:p>4</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="ce6" office:value-type="float" office:value="175">
      <text:p>175</text:p>
    </table:table-cell>
  </table:table-row>
  <table:table-row table:style-name="ro1">
    <table:table-cell table:style-name="ce6"/>
    <table:table-cell table:style-name="ce11" table:formula="of:=[.B32]/SUM([.B32:.E32])" office:value-type="percentage" office:value="0.00555555555555556">
      <text:p>0.56%</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="ce11" table:formula="of:=[.C32]/SUM([.B32:.E32])" office:value-type="percentage" office:value="0">
      <text:p>0.00%</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="ce11" table:formula="of:=[.D32]/SUM([.B32:.E32])" office:value-type="percentage" office:value="0.0222222222222222">
      <text:p>2.22%</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="ce11" table:formula="of:=[.E32]/SUM([.B32:.E32])" office:value-type="percentage" office:value="0.972222222222222">
      <text:p>97.22%</text:p>
    </table:table-cell>
  </table:table-row>
  <table:table-row table:style-name="ro1">
    <table:table-cell table:style-name="ce6" office:value-type="string">
      <text:p><text:s text:c="2"/>Never married </text:p>
    </table:table-cell>
    <table:table-cell table:style-name="ce6" office:value-type="float" office:value="9">
      <text:p>9</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="ce6" office:value-type="float" office:value="6">
      <text:p>6</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="ce6" office:value-type="float" office:value="9">
      <text:p>9</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="ce6" office:value-type="float" office:value="507">
      <text:p>507</text:p>
    </table:table-cell>
  </table:table-row>
  <table:table-row table:style-name="ro1">
    <table:table-cell table:style-name="ce6"/>
    <table:table-cell table:style-name="ce11" table:formula="of:=[.B34]/SUM([.B34:.E34])" office:value-type="percentage" office:value="0.0169491525423729">
      <text:p>1.69%</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="ce11" table:formula="of:=[.C34]/SUM([.B34:.E34])" office:value-type="percentage" office:value="0.0112994350282486">
      <text:p>1.13%</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="ce11" table:formula="of:=[.D34]/SUM([.B34:.E34])" office:value-type="percentage" office:value="0.0169491525423729">
      <text:p>1.69%</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="ce11" table:formula="of:=[.E34]/SUM([.B34:.E34])" office:value-type="percentage" office:value="0.954802259887006">
      <text:p>95.48%</text:p>
    </table:table-cell>
  </table:table-row>
</table:table> 
Browse[2]> c
Error in is(object, Class) : 
  trying to get slot "className" from an object of a basic class ("NULL") with no slots

Enter a frame number, or 0 to exit   

1: read.ods("~/test2.ods")
2: spreadsheet.R#21: lapply(tb, read.odsSheet, header = header, string
3: FUN(X[[1]], ...)
4: spreadsheet.R#112: lapply(seq(length = ncol(ans)), function(i) {
5: FUN(1:5[[2]], ...)
6: spreadsheet.R#120: as(unlist(ans[, i]), colType)
7: is(object, Class)

Selection: 0
> source("namespaces.R"); source("spreadsheet.R")
> read.ods("~/test2.ods")
                n      Group 1      Group 3     Group 4     Group 5
1             937           14            8          17         898
2             Age      Group 1      Group 3     Group 4     Group 5
3            <NA> 37.07 (10.6) 40.88 (6.29) 29.94(10.1) 39.17(11.8)
4            <NA>      Group 1      Group 3     Group 4     Group 5
5           male             9            4           3         505
6            <NA>        1.73%        0.77%       0.58%      96.93%
7          female            5            4          14         393
8            <NA>        1.20%        0.96%       3.37%      94.47%
9            <NA>                                                  
10           race      Group 1      Group 3     Group 4     Group 5
11        African            8            6          12         472
12           <NA>        1.61%        1.20%       2.41%      94.78%
13      Caucasian            6            2           5         426
14           <NA>        1.37%        0.46%       1.14%      97.04%
15       Edu.shc       Group 1      Group 3     Group 4     Group 5
16     beyond SH             8            5          13         398
17           <NA>        1.89%        1.18%       3.07%      93.87%
18         no SH             1            0           0          24
19           <NA>        4.00%        0.00%       0.00%      96.00%
20   SH graduate             2            1           3         228
21           <NA>        0.85%        0.43%       1.28%      97.44%
22       some SH             3            2           1         247
23           <NA>        1.19%        0.79%       0.40%      97.63%
24       marital       Group 1      Group 3     Group 4     Group 5
25   Div/Sep/Wid             4            2           4         216
26           <NA>        1.77%        0.88%       1.77%      95.58%
27       Married             1            0           4         175
28           <NA>        0.56%        0.00%       2.22%      97.22%
29 Never married             9            6           9         507
30           <NA>        1.69%        1.13%       1.69%      95.48%
> source("namespaces.R"); source("spreadsheet.R")
> read.ods("../inst/sampleData/CellTypes.ods")
Error in is(object, Class) : 
  trying to get slot "className" from an object of a basic class ("NULL") with no slots

Enter a frame number, or 0 to exit   

1: read.ods("../inst/sampleData/CellTypes.ods")
2: spreadsheet.R#21: lapply(tb, read.odsSheet, header = header, string
3: FUN(X[[1]], ...)
4: spreadsheet.R#112: lapply(seq(length = ncol(ans)), function(i) {
5: FUN(1:2[[1]], ...)
6: spreadsheet.R#120: as(unlist(ans[, i]), colType)
7: is(object, Class)

Selection: 0
> source("namespaces.R"); source("spreadsheet.R")
> read.ods("../inst/sampleData/CellTypes.ods")
Error in is(object, Class) : 
  trying to get slot "className" from an object of a basic class ("NULL") with no slots

Enter a frame number, or 0 to exit   

1: read.ods("../inst/sampleData/CellTypes.ods")
2: spreadsheet.R#21: lapply(tb, read.odsSheet, header = header, string
3: FUN(X[[1]], ...)
4: spreadsheet.R#112: lapply(seq(length = ncol(ans)), function(i) {
5: FUN(1:2[[1]], ...)
6: spreadsheet.R#120: as(unlist(ans[, i]), colType)
7: is(object, Class)

Selection: 3
Called from: as(unlist(ans[, i]), colType)
Browse[1]> ls()
 [1] "ans"              "header"           "numCols"         
 [4] "realCols"         "rowNames"         "rows"            
 [7] "stringsAsFactors" "tb"               "types"           
[10] "varNames"        
Browse[1]> tb
*** output flushed ***
Browse[1]> types
     table-cell   table-cell
[1,] "percentage" "string"  
[2,] "currency"   "string"  
[3,] "date"       "string"  
[4,] "float"      "string"  
[5,] "float"      "string"  
[6,] "boolean"    "string"  
[7,] "time"       "string"  
[8,] "float"      "string"  
Browse[1]> tb
<table:table table:name="Sheet1" table:style-name="ta1" table:print="false">
  <table:table-column table:style-name="co1" table:default-cell-style-name="Default"/>
  <table:table-column table:style-name="co1" table:default-cell-style-name="ce9"/>
  <table:table-row table:style-name="ro1">
    <table:table-cell/>
    <table:table-cell table:style-name="Default"/>
  </table:table-row>
  <table:table-row table:style-name="ro1">
    <table:table-cell office:value-type="float" office:value="23">
      <text:p>23</text:p>
    </table:table-cell>
    <table:table-cell office:value-type="string">
      <text:p>number</text:p>
    </table:table-cell>
  </table:table-row>
  <table:table-row table:style-name="ro1">
    <table:table-cell table:style-name="ce1" office:value-type="percentage" office:value="0.23">
      <text:p>23.00%</text:p>
    </table:table-cell>
    <table:table-cell office:value-type="string">
      <text:p>percentage</text:p>
    </table:table-cell>
  </table:table-row>
  <table:table-row table:style-name="ro1">
    <table:table-cell table:style-name="ce2" office:value-type="currency" office:currency="USD" office:value="23">
      <text:p>$23.00</text:p>
    </table:table-cell>
    <table:table-cell office:value-type="string">
      <text:p>currency</text:p>
    </table:table-cell>
  </table:table-row>
  <table:table-row table:style-name="ro1">
    <table:table-cell table:style-name="ce3" office:value-type="date" office:date-value="2011-12-23">
      <text:p>12/23/11</text:p>
    </table:table-cell>
    <table:table-cell office:value-type="string">
      <text:p>date</text:p>
    </table:table-cell>
  </table:table-row>
  <table:table-row table:style-name="ro1">
    <table:table-cell table:style-name="ce4" office:value-type="float" office:value="23">
      <text:p>2.30E+001</text:p>
    </table:table-cell>
    <table:table-cell office:value-type="string">
      <text:p>scientific</text:p>
    </table:table-cell>
  </table:table-row>
  <table:table-row table:style-name="ro1">
    <table:table-cell table:style-name="ce5" office:value-type="float" office:value="23">
      <text:p>23</text:p>
    </table:table-cell>
    <table:table-cell office:value-type="string">
      <text:p>text</text:p>
    </table:table-cell>
  </table:table-row>
  <table:table-row table:style-name="ro1">
    <table:table-cell table:style-name="ce6" office:value-type="boolean" office:boolean-value="23">
      <text:p>TRUE</text:p>
    </table:table-cell>
    <table:table-cell office:value-type="string">
      <text:p>boolean</text:p>
    </table:table-cell>
  </table:table-row>
  <table:table-row table:style-name="ro1">
    <table:table-cell table:style-name="ce7" office:value-type="time" office:time-value="PT23H01M02S">
      <text:p>23:01</text:p>
    </table:table-cell>
    <table:table-cell office:value-type="string">
      <text:p>time</text:p>
    </table:table-cell>
  </table:table-row>
  <table:table-row table:style-name="ro1">
    <table:table-cell table:style-name="ce8" office:value-type="float" office:value="23.125">
      <text:p>23 1/8</text:p>
    </table:table-cell>
    <table:table-cell office:value-type="string">
      <text:p>fraction</text:p>
    </table:table-cell>
  </table:table-row>
</table:table> 
Browse[1]> types
     table-cell   table-cell
[1,] "percentage" "string"  
[2,] "currency"   "string"  
[3,] "date"       "string"  
[4,] "float"      "string"  
[5,] "float"      "string"  
[6,] "boolean"    "string"  
[7,] "time"       "string"  
[8,] "float"      "string"  
Browse[1]> c

Enter a frame number, or 0 to exit   

1: read.ods("../inst/sampleData/CellTypes.ods")
2: spreadsheet.R#21: lapply(tb, read.odsSheet, header = header, string
3: FUN(X[[1]], ...)
4: spreadsheet.R#112: lapply(seq(length = ncol(ans)), function(i) {
5: FUN(1:2[[1]], ...)
6: spreadsheet.R#120: as(unlist(ans[, i]), colType)
7: is(object, Class)

Selection: 0
> source("namespaces.R"); source("spreadsheet.R")
Error in c(string = "character", float = "numeric", date = function(x) { : 
  argument 7 is empty

Enter a frame number, or 0 to exit   

1: source("spreadsheet.R")
2: source("spreadsheet.R")
3: eval.with.vis(ei, envir)
4: eval.with.vis(expr, envir, enclos)

Selection: 0
> source("namespaces.R"); source("spreadsheet.R")
Error in c(string = "character", float = "numeric", date = function(x) { : 
  argument 7 is empty

Enter a frame number, or 0 to exit   

1: source("spreadsheet.R")
2: source("spreadsheet.R")
3: eval.with.vis(ei, envir)
4: eval.with.vis(expr, envir, enclos)

Selection: 0
> source("namespaces.R"); source("spreadsheet.R")
> read.ods("../inst/sampleData/CellTypes.ods")
Error in getColType(tp) : unrecognized cell type

Enter a frame number, or 0 to exit   

1: read.ods("../inst/sampleData/CellTypes.ods")
2: spreadsheet.R#21: lapply(tb, read.odsSheet, header = header, string
3: FUN(X[[1]], ...)
4: spreadsheet.R#112: lapply(seq(length = ncol(ans)), function(i) {
5: FUN(1:2[[1]], ...)
6: spreadsheet.R#119: getColType(tp)

Selection: 6
Called from: eval(substitute(browser(skipCalls = skip), list(skip = 7 - which)), 
    envir = sys.frame(which))
Browse[1]> types
[1] "percentage" "currency"   "date"       "float"      "boolean"   
[6] "time"      
Browse[1]> i
[1]  4  5  3  2  6 NA
Browse[1]> read.table
*** output flushed ***
Browse[1]> ?type.convert
WARNING: terminal is not fully functional
-  (press RETURN)
type.convert               package:utils               R Documentation

Type Conversion on Character Variables

Description:

     Convert a character vector to logical, integer, numeric, complex
     or factor as appropriate.

Usage:

     type.convert(x, na.strings = "NA", as.is = FALSE, dec = ".")
     
Arguments:

       x: a character vector.

na.strings: a vector of strings which are to be interpreted as 'NA'
          values.  Blank fields are also considered to be missing
          values in logical, integer, numeric or complex vectors.

   as.is: logical.  See 'Details'.

: 
     dec: the character to be assumed for decimal points.

Details:

     This is principally a helper function for 'read.table'.  Given a
     character vector, it attempts to convert it to logical, integer,
     numeric or complex, and failing that converts it to factor unless
     'as.is = TRUE'.  The first type that can accept all the
     non-missing values is chosen.

     Vectors which are entirely missing values are converted to
     logical, since 'NA' is primarily logical.

     Vectors containing 'F', 'T', 'FALSE', 'TRUE' or values from
     'na.strings' are converted to logical.  Vectors containing
     optional whitespace followed by decimal constants representable as
     R integers or values from 'na.strings' are converted to integer.
     Other vectors containing optional whitespace followed by other
     decimal or hexadecimal constants (see NumericConstants), or 'NaN',
     'Inf' or 'infinity' (ignoring case) or values from 'na.strings'
     are converted to numeric.

     Since this is a helper function, the caller should always pass an
     appropriate value of 'as.is'.
:q
Browse[1]> 

Enter a frame number, or 0 to exit   

1: read.ods("../inst/sampleData/CellTypes.ods")
2: spreadsheet.R#21: lapply(tb, read.odsSheet, header = header, string
3: FUN(X[[1]], ...)
4: spreadsheet.R#112: lapply(seq(length = ncol(ans)), function(i) {
5: FUN(1:2[[1]], ...)
6: spreadsheet.R#119: getColType(tp)

Selection: 0
> read.ods("../inst/sampleData/CellTypes.ods")
Error in getColType(tp) : unrecognized cell type

Enter a frame number, or 0 to exit   

1: read.ods("../inst/sampleData/CellTypes.ods")
2: spreadsheet.R#21: lapply(tb, read.odsSheet, header = header, string
3: FUN(X[[1]], ...)
4: spreadsheet.R#112: lapply(seq(length = ncol(ans)), function(i) {
5: FUN(1:2[[1]], ...)
6: spreadsheet.R#119: getColType(tp)

Selection: 3
Called from: getColType(tp)
Browse[1]> ls()
 [1] "ans"              "header"           "numCols"         
 [4] "realCols"         "rowNames"         "rows"            
 [7] "stringsAsFactors" "tb"               "types"           
[10] "varNames"        
Browse[1]> ans
     table-cell   table-cell  
[1,] "23.00%"     "percentage"
[2,] "$23.00"     "currency"  
[3,] "2011-12-23" "date"      
[4,] "2.30E+001"  "scientific"
[5,] "23"         "text"      
[6,] "TRUE"       "boolean"   
[7,] "23:01"      "time"      
[8,] "23 1/8"     "fraction"  
Browse[1]> t(sapply(rows, function(x) unlist(xmlApply(x, xmlGetAttr, "value"), recursive = FALSE)))
     [,1]   [,2] [,3] [,4] [,5] [,6] [,7] [,8]    
[1,] "0.23" "23" NULL "23" "23" NULL NULL "23.125"
Browse[1]> row
*** output flushed ***
Browse[1]> types
*** output flushed ***
Browse[1]> library(codetools)
Browse[1]> findGlobals(read.ods, FALSE)
*** output flushed ***
Browse[1]> findGlobals(read.odsSheet, FALSE)
$functions
 [1] "-"             "!"             "["             "[["           
 [5] "{"             "&&"            "="             "=="           
 [9] "all"           "any"           "apply"         "as"           
[13] "as.character"  "as.data.frame" "c"             "character"    
[17] "getColType"    "getNodeSet"    "if"            "is.function"  
[21] "is.matrix"     "is.na"         "is.null"       "lapply"       
[25] "length"        "ncol"          "paste"         "return"       
[29] "rownames<-"    "sapply"        "seq"           "structure"    
[33] "t"             "unique"        "unlist"        "xmlApply"     
[37] "xmlGetAttr"    "xmlSApply"    

$variables
[1] "as.integer"           "getCellType"          "getCellValue"        
[4] "is.null"              "OpenOfficeNamespaces"

Browse[1]> tb
<table:table table:name="Sheet1" table:style-name="ta1" table:print="false">
  <table:table-column table:style-name="co1" table:default-cell-style-name="Default"/>
  <table:table-column table:style-name="co1" table:default-cell-style-name="ce9"/>
  <table:table-row table:style-name="ro1">
    <table:table-cell/>
    <table:table-cell table:style-name="Default"/>
  </table:table-row>
  <table:table-row table:style-name="ro1">
    <table:table-cell office:value-type="float" office:value="23">
      <text:p>23</text:p>
    </table:table-cell>
    <table:table-cell office:value-type="string">
      <text:p>number</text:p>
    </table:table-cell>
  </table:table-row>
  <table:table-row table:style-name="ro1">
    <table:table-cell table:style-name="ce1" office:value-type="percentage" office:value="0.23">
      <text:p>23.00%</text:p>
    </table:table-cell>
    <table:table-cell office:value-type="string">
      <text:p>percentage</text:p>
    </table:table-cell>
  </table:table-row>
  <table:table-row table:style-name="ro1">
    <table:table-cell table:style-name="ce2" office:value-type="currency" office:currency="USD" office:value="23">
      <text:p>$23.00</text:p>
    </table:table-cell>
    <table:table-cell office:value-type="string">
      <text:p>currency</text:p>
    </table:table-cell>
  </table:table-row>
  <table:table-row table:style-name="ro1">
    <table:table-cell table:style-name="ce3" office:value-type="date" office:date-value="2011-12-23">
      <text:p>12/23/11</text:p>
    </table:table-cell>
    <table:table-cell office:value-type="string">
      <text:p>date</text:p>
    </table:table-cell>
  </table:table-row>
  <table:table-row table:style-name="ro1">
    <table:table-cell table:style-name="ce4" office:value-type="float" office:value="23">
      <text:p>2.30E+001</text:p>
    </table:table-cell>
    <table:table-cell office:value-type="string">
      <text:p>scientific</text:p>
    </table:table-cell>
  </table:table-row>
  <table:table-row table:style-name="ro1">
    <table:table-cell table:style-name="ce5" office:value-type="float" office:value="23">
      <text:p>23</text:p>
    </table:table-cell>
    <table:table-cell office:value-type="string">
      <text:p>text</text:p>
    </table:table-cell>
  </table:table-row>
  <table:table-row table:style-name="ro1">
    <table:table-cell table:style-name="ce6" office:value-type="boolean" office:boolean-value="23">
      <text:p>TRUE</text:p>
    </table:table-cell>
    <table:table-cell office:value-type="string">
      <text:p>boolean</text:p>
    </table:table-cell>
  </table:table-row>
  <table:table-row table:style-name="ro1">
    <table:table-cell table:style-name="ce7" office:value-type="time" office:time-value="PT23H01M02S">
      <text:p>23:01</text:p>
    </table:table-cell>
    <table:table-cell office:value-type="string">
      <text:p>time</text:p>
    </table:table-cell>
  </table:table-row>
  <table:table-row table:style-name="ro1">
    <table:table-cell table:style-name="ce8" office:value-type="float" office:value="23.125">
      <text:p>23 1/8</text:p>
    </table:table-cell>
    <table:table-cell office:value-type="string">
      <text:p>fraction</text:p>
    </table:table-cell>
  </table:table-row>
</table:table> 
Browse[1]> getNodeSet(tb, "//table:table-cell", "table")
[[1]]
<table:table-cell/> 

[[2]]
<table:table-cell table:style-name="Default"/> 

[[3]]
<table:table-cell office:value-type="float" office:value="23">
  <text:p>23</text:p>
</table:table-cell> 

[[4]]
<table:table-cell office:value-type="string">
  <text:p>number</text:p>
</table:table-cell> 

[[5]]
<table:table-cell table:style-name="ce1" office:value-type="percentage" office:value="0.23">
  <text:p>23.00%</text:p>
</table:table-cell> 

[[6]]
<table:table-cell office:value-type="string">
  <text:p>percentage</text:p>
</table:table-cell> 

[[7]]
<table:table-cell table:style-name="ce2" office:value-type="currency" office:currency="USD" office:value="23">
  <text:p>$23.00</text:p>
</table:table-cell> 

[[8]]
<table:table-cell office:value-type="string">
  <text:p>currency</text:p>
</table:table-cell> 

[[9]]
<table:table-cell table:style-name="ce3" office:value-type="date" office:date-value="2011-12-23">
  <text:p>12/23/11</text:p>
</table:table-cell> 

[[10]]
<table:table-cell office:value-type="string">
  <text:p>date</text:p>
</table:table-cell> 

[[11]]
<table:table-cell table:style-name="ce4" office:value-type="float" office:value="23">
  <text:p>2.30E+001</text:p>
</table:table-cell> 

[[12]]
<table:table-cell office:value-type="string">
  <text:p>scientific</text:p>
</table:table-cell> 

[[13]]
<table:table-cell table:style-name="ce5" office:value-type="float" office:value="23">
  <text:p>23</text:p>
</table:table-cell> 

[[14]]
<table:table-cell office:value-type="string">
  <text:p>text</text:p>
</table:table-cell> 

[[15]]
<table:table-cell table:style-name="ce6" office:value-type="boolean" office:boolean-value="23">
  <text:p>TRUE</text:p>
</table:table-cell> 

[[16]]
<table:table-cell office:value-type="string">
  <text:p>boolean</text:p>
</table:table-cell> 

[[17]]
<table:table-cell table:style-name="ce7" office:value-type="time" office:time-value="PT23H01M02S">
  <text:p>23:01</text:p>
</table:table-cell> 

[[18]]
<table:table-cell office:value-type="string">
  <text:p>time</text:p>
</table:table-cell> 

[[19]]
<table:table-cell table:style-name="ce8" office:value-type="float" office:value="23.125">
  <text:p>23 1/8</text:p>
</table:table-cell> 

[[20]]
<table:table-cell office:value-type="string">
  <text:p>fraction</text:p>
</table:table-cell> 

[[21]]
<table:table-cell/> 

[[22]]
<table:table-cell/> 

attr(,"class")
[1] "XMLNodeSet"
Browse[1]> t(sapply(rows, function(x) unlist(xmlApply(x, xmlGetAttr, "value"), recursive = FALSE)))
     [,1]   [,2] [,3] [,4] [,5] [,6] [,7] [,8]    
[1,] "0.23" "23" NULL "23" "23" NULL NULL "23.125"
Browse[1]> getNodeSet(tb, "//table:table-cell", "table")
[[1]]
<table:table-cell/> 

[[2]]
<table:table-cell table:style-name="Default"/> 

[[3]]
<table:table-cell office:value-type="float" office:value="23">
  <text:p>23</text:p>
</table:table-cell> 

[[4]]
<table:table-cell office:value-type="string">
  <text:p>number</text:p>
</table:table-cell> 

[[5]]
<table:table-cell table:style-name="ce1" office:value-type="percentage" office:value="0.23">
  <text:p>23.00%</text:p>
</table:table-cell> 

[[6]]
<table:table-cell office:value-type="string">
  <text:p>percentage</text:p>
</table:table-cell> 

[[7]]
<table:table-cell table:style-name="ce2" office:value-type="currency" office:currency="USD" office:value="23">
  <text:p>$23.00</text:p>
</table:table-cell> 

[[8]]
<table:table-cell office:value-type="string">
  <text:p>currency</text:p>
</table:table-cell> 

[[9]]
<table:table-cell table:style-name="ce3" office:value-type="date" office:date-value="2011-12-23">
  <text:p>12/23/11</text:p>
</table:table-cell> 

[[10]]
<table:table-cell office:value-type="string">
  <text:p>date</text:p>
</table:table-cell> 

[[11]]
<table:table-cell table:style-name="ce4" office:value-type="float" office:value="23">
  <text:p>2.30E+001</text:p>
</table:table-cell> 

[[12]]
<table:table-cell office:value-type="string">
  <text:p>scientific</text:p>
</table:table-cell> 

[[13]]
<table:table-cell table:style-name="ce5" office:value-type="float" office:value="23">
  <text:p>23</text:p>
</table:table-cell> 

[[14]]
<table:table-cell office:value-type="string">
  <text:p>text</text:p>
</table:table-cell> 

[[15]]
<table:table-cell table:style-name="ce6" office:value-type="boolean" office:boolean-value="23">
  <text:p>TRUE</text:p>
</table:table-cell> 

[[16]]
<table:table-cell office:value-type="string">
  <text:p>boolean</text:p>
</table:table-cell> 

[[17]]
<table:table-cell table:style-name="ce7" office:value-type="time" office:time-value="PT23H01M02S">
  <text:p>23:01</text:p>
</table:table-cell> 

[[18]]
<table:table-cell office:value-type="string">
  <text:p>time</text:p>
</table:table-cell> 

[[19]]
<table:table-cell table:style-name="ce8" office:value-type="float" office:value="23.125">
  <text:p>23 1/8</text:p>
</table:table-cell> 

[[20]]
<table:table-cell office:value-type="string">
  <text:p>fraction</text:p>
</table:table-cell> 

[[21]]
<table:table-cell/> 

[[22]]
<table:table-cell/> 

attr(,"class")
[1] "XMLNodeSet"
Browse[1]> t(sapply(rows, function(x) unlist(xmlApply(x, getCellValue), recursive = FALSE)))
     table-cell   table-cell  
[1,] "23.00%"     "percentage"
[2,] "$23.00"     "currency"  
[3,] "2011-12-23" "date"      
[4,] "2.30E+001"  "scientific"
[5,] "23"         "text"      
[6,] "TRUE"       "boolean"   
[7,] "23:01"      "time"      
[8,] "23 1/8"     "fraction"  
Browse[1]> c

Enter a frame number, or 0 to exit   

1: read.ods("../inst/sampleData/CellTypes.ods")
2: spreadsheet.R#21: lapply(tb, read.odsSheet, header = header, string
3: FUN(X[[1]], ...)
4: spreadsheet.R#112: lapply(seq(length = ncol(ans)), function(i) {
5: FUN(1:2[[1]], ...)
6: spreadsheet.R#119: getColType(tp)

Selection: 0
> source("namespaces.R"); source("spreadsheet.R")
> read.ods("../inst/sampleData/CellTypes.ods")
Error in getColType(tp) : unrecognized cell type

Enter a frame number, or 0 to exit   

1: read.ods("../inst/sampleData/CellTypes.ods")
2: spreadsheet.R#21: lapply(tb, read.odsSheet, header = header, string
3: FUN(X[[1]], ...)
4: spreadsheet.R#111: lapply(seq(length = ncol(ans)), function(i) {
5: FUN(1:2[[1]], ...)
6: spreadsheet.R#118: getColType(tp)

Selection: 3
Called from: getColType(tp)
Browse[1]> ans
     table-cell   table-cell  
[1,] "23.00%"     "percentage"
[2,] "$23.00"     "currency"  
[3,] "2011-12-23" "date"      
[4,] "2.30E+001"  "scientific"
[5,] "23"         "text"      
[6,] "TRUE"       "boolean"   
[7,] "23:01"      "time"      
[8,] "23 1/8"     "fraction"  
Browse[1]> c

Enter a frame number, or 0 to exit   

1: read.ods("../inst/sampleData/CellTypes.ods")
2: spreadsheet.R#21: lapply(tb, read.odsSheet, header = header, string
3: FUN(X[[1]], ...)
4: spreadsheet.R#111: lapply(seq(length = ncol(ans)), function(i) {
5: FUN(1:2[[1]], ...)
6: spreadsheet.R#118: getColType(tp)

Selection: 0
> source("namespaces.R"); source("spreadsheet.R")
> source("namespaces.R"); source("spreadsheet.R")
> read.ods("../inst/sampleData/CellTypes.ods")
Error in getColType(types) : unrecognized cell type

Enter a frame number, or 0 to exit   

1: read.ods("../inst/sampleData/CellTypes.ods")
2: spreadsheet.R#21: lapply(tb, read.odsSheet, header = header, string
3: FUN(X[[1]], ...)
4: spreadsheet.R#98: getColType(types)

Selection: 3
Called from: getColType(types)
Browse[1]> ls()
 [1] "ans"              "header"           "numCols"         
 [4] "realCols"         "rowNames"         "rows"            
 [7] "stringsAsFactors" "tb"               "types"           
[10] "varNames"        
Browse[1]> 

Enter a frame number, or 0 to exit   

1: read.ods("../inst/sampleData/CellTypes.ods")
2: spreadsheet.R#21: lapply(tb, read.odsSheet, header = header, string
3: FUN(X[[1]], ...)
4: spreadsheet.R#98: getColType(types)

Selection: 3
Called from: getColType(types)
Browse[1]> ans
[1] "0.23"       "23"         "2011-12-23" "23"         "23"        
[6] NA           NA           "23.125"    
Browse[1]> tb
<table:table table:name="Sheet1" table:style-name="ta1" table:print="false">
  <table:table-column table:style-name="co1" table:default-cell-style-name="Default"/>
  <table:table-column table:style-name="co1" table:default-cell-style-name="ce9"/>
  <table:table-row table:style-name="ro1">
    <table:table-cell/>
    <table:table-cell table:style-name="Default"/>
  </table:table-row>
  <table:table-row table:style-name="ro1">
    <table:table-cell office:value-type="float" office:value="23">
      <text:p>23</text:p>
    </table:table-cell>
    <table:table-cell office:value-type="string">
      <text:p>number</text:p>
    </table:table-cell>
  </table:table-row>
  <table:table-row table:style-name="ro1">
    <table:table-cell table:style-name="ce1" office:value-type="percentage" office:value="0.23">
      <text:p>23.00%</text:p>
    </table:table-cell>
    <table:table-cell office:value-type="string">
      <text:p>percentage</text:p>
    </table:table-cell>
  </table:table-row>
  <table:table-row table:style-name="ro1">
    <table:table-cell table:style-name="ce2" office:value-type="currency" office:currency="USD" office:value="23">
      <text:p>$23.00</text:p>
    </table:table-cell>
    <table:table-cell office:value-type="string">
      <text:p>currency</text:p>
    </table:table-cell>
  </table:table-row>
  <table:table-row table:style-name="ro1">
    <table:table-cell table:style-name="ce3" office:value-type="date" office:date-value="2011-12-23">
      <text:p>12/23/11</text:p>
    </table:table-cell>
    <table:table-cell office:value-type="string">
      <text:p>date</text:p>
    </table:table-cell>
  </table:table-row>
  <table:table-row table:style-name="ro1">
    <table:table-cell table:style-name="ce4" office:value-type="float" office:value="23">
      <text:p>2.30E+001</text:p>
    </table:table-cell>
    <table:table-cell office:value-type="string">
      <text:p>scientific</text:p>
    </table:table-cell>
  </table:table-row>
  <table:table-row table:style-name="ro1">
    <table:table-cell table:style-name="ce5" office:value-type="float" office:value="23">
      <text:p>23</text:p>
    </table:table-cell>
    <table:table-cell office:value-type="string">
      <text:p>text</text:p>
    </table:table-cell>
  </table:table-row>
  <table:table-row table:style-name="ro1">
    <table:table-cell table:style-name="ce6" office:value-type="boolean" office:boolean-value="23">
      <text:p>TRUE</text:p>
    </table:table-cell>
    <table:table-cell office:value-type="string">
      <text:p>boolean</text:p>
    </table:table-cell>
  </table:table-row>
  <table:table-row table:style-name="ro1">
    <table:table-cell table:style-name="ce7" office:value-type="time" office:time-value="PT23H01M02S">
      <text:p>23:01</text:p>
    </table:table-cell>
    <table:table-cell office:value-type="string">
      <text:p>time</text:p>
    </table:table-cell>
  </table:table-row>
  <table:table-row table:style-name="ro1">
    <table:table-cell table:style-name="ce8" office:value-type="float" office:value="23.125">
      <text:p>23 1/8</text:p>
    </table:table-cell>
    <table:table-cell office:value-type="string">
      <text:p>fraction</text:p>
    </table:table-cell>
  </table:table-row>
</table:table> 
Browse[1]> ans
[1] "0.23"       "23"         "2011-12-23" "23"         "23"        
[6] NA           NA           "23.125"    
Browse[1]> getNodeSet(tb, ".//table:table-cell", "table")
*** output flushed ***
Browse[1]> getNodeSet(tb, ".//table:table-cell", "table")[[15]]
<table:table-cell table:style-name="ce6" office:value-type="boolean" office:boolean-value="23">
  <text:p>TRUE</text:p>
</table:table-cell> 
Browse[1]> xmlGetAttr
function (node, name, default = NULL, converter = NULL, namespaceDefinition = character(), 
    addNamespace = length(grep(":", name)) > 0) 
{
    a <- xmlAttrs(node, addNamespace)
    if (is.null(a) || is.na(match(name, names(a)))) 
        return(default)
    if (length(namespaceDefinition)) 
        verifyNamespace(name, namespaceDefinition, node)
    if (!is.null(converter)) 
        converter(a[[name]])
    else a[[name]]
}
<environment: namespace:XML>
Browse[1]> xmlGetAttr(getNodeSet(tb, ".//table:table-cell", "table")[[15]], "boolean-value", as.logical)
[1] "23"
Browse[1]> xmlGetAttr(getNodeSet(tb, ".//table:table-cell", "table")[[15]], "boolean-value", NA, as.logical)
[1] NA
Browse[1]> getNodeSet(tb, ".//table:table-cell", "table")[[15]]
<table:table-cell table:style-name="ce6" office:value-type="boolean" office:boolean-value="23">
  <text:p>TRUE</text:p>
</table:table-cell> 
Browse[1]> xmlGetAttr(getNodeSet(tb, ".//table:table-cell", "table")[[15]], "boolean-value")
[1] "23"
Browse[1]> xmlGetAttr(getNodeSet(tb, ".//table:table-cell", "table")[[15]], "boolean-value", NA)
[1] "23"
Browse[1]> xmlGetAttr(getNodeSet(tb, ".//table:table-cell", "table")[[15]], "boolean-value", NA, as.logical)
[1] NA
Browse[1]> xmlGetAttr(getNodeSet(tb, ".//table:table-cell", "table")[[15]], "date-value", NA)
[1] NA
Browse[1]> xmlGetAttr(getNodeSet(tb, ".//table:table-cell", "table")[[13]], "date-value", NA)
[1] NA
Browse[1]> xmlGetAttr(getNodeSet(tb, ".//table:table-cell", "table")[[14]], "date-value", NA)
[1] NA
Browse[1]> xmlGetAttr(getNodeSet(tb, ".//table:table-cell", "table")[[12]], "date-value", NA)
[1] NA
Browse[1]> c

Enter a frame number, or 0 to exit   

1: read.ods("../inst/sampleData/CellTypes.ods")
2: spreadsheet.R#21: lapply(tb, read.odsSheet, header = header, string
3: FUN(X[[1]], ...)
4: spreadsheet.R#98: getColType(types)

Selection: 0
> source("namespaces.R"); source("spreadsheet.R")
> read.ods("../inst/sampleData/CellTypes.ods")
Error in getColType(types) : unrecognized cell type

Enter a frame number, or 0 to exit   

1: read.ods("../inst/sampleData/CellTypes.ods")
2: spreadsheet.R#21: lapply(tb, read.odsSheet, header = header, string
3: FUN(X[[1]], ...)
4: spreadsheet.R#98: getColType(types)

Selection: 3
Called from: getColType(types)
Browse[1]> ans
[1] "0.23"       "23"         "2011-12-23" "23"         "23"        
[6] NA           NA           "23.125"     NA          
Browse[1]> tb
<table:table table:name="Sheet1" table:style-name="ta1" table:print="false">
  <table:table-column table:style-name="co1" table:default-cell-style-name="Default"/>
  <table:table-column table:style-name="co1" table:default-cell-style-name="ce9"/>
  <table:table-row table:style-name="ro1">
    <table:table-cell/>
    <table:table-cell table:style-name="Default"/>
  </table:table-row>
  <table:table-row table:style-name="ro1">
    <table:table-cell office:value-type="float" office:value="23">
      <text:p>23</text:p>
    </table:table-cell>
    <table:table-cell office:value-type="string">
      <text:p>number</text:p>
    </table:table-cell>
  </table:table-row>
  <table:table-row table:style-name="ro1">
    <table:table-cell table:style-name="ce1" office:value-type="percentage" office:value="0.23">
      <text:p>23.00%</text:p>
    </table:table-cell>
    <table:table-cell office:value-type="string">
      <text:p>percentage</text:p>
    </table:table-cell>
  </table:table-row>
  <table:table-row table:style-name="ro1">
    <table:table-cell table:style-name="ce2" office:value-type="currency" office:currency="USD" office:value="23">
      <text:p>$23.00</text:p>
    </table:table-cell>
    <table:table-cell office:value-type="string">
      <text:p>currency</text:p>
    </table:table-cell>
  </table:table-row>
  <table:table-row table:style-name="ro1">
    <table:table-cell table:style-name="ce3" office:value-type="date" office:date-value="2011-12-23">
      <text:p>12/23/11</text:p>
    </table:table-cell>
    <table:table-cell office:value-type="string">
      <text:p>date</text:p>
    </table:table-cell>
  </table:table-row>
  <table:table-row table:style-name="ro1">
    <table:table-cell table:style-name="ce4" office:value-type="float" office:value="23">
      <text:p>2.30E+001</text:p>
    </table:table-cell>
    <table:table-cell office:value-type="string">
      <text:p>scientific</text:p>
    </table:table-cell>
  </table:table-row>
  <table:table-row table:style-name="ro1">
    <table:table-cell table:style-name="ce5" office:value-type="float" office:value="23">
      <text:p>23</text:p>
    </table:table-cell>
    <table:table-cell office:value-type="string">
      <text:p>text</text:p>
    </table:table-cell>
  </table:table-row>
  <table:table-row table:style-name="ro1">
    <table:table-cell table:style-name="ce6" office:value-type="boolean" office:boolean-value="23">
      <text:p>TRUE</text:p>
    </table:table-cell>
    <table:table-cell office:value-type="string">
      <text:p>boolean</text:p>
    </table:table-cell>
  </table:table-row>
  <table:table-row table:style-name="ro1">
    <table:table-cell table:style-name="ce7" office:value-type="time" office:time-value="PT23H01M02S">
      <text:p>23:01</text:p>
    </table:table-cell>
    <table:table-cell office:value-type="string">
      <text:p>time</text:p>
    </table:table-cell>
  </table:table-row>
  <table:table-row table:style-name="ro1">
    <table:table-cell table:style-name="ce8" office:value-type="float" office:value="23.125">
      <text:p>23 1/8</text:p>
    </table:table-cell>
    <table:table-cell office:value-type="string">
      <text:p>fraction</text:p>
    </table:table-cell>
  </table:table-row>
  <table:table-row table:style-name="ro1" table:number-rows-repeated="2">
    <table:table-cell/>
    <table:table-cell table:style-name="Default"/>
  </table:table-row>
  <table:table-row table:style-name="ro1">
    <table:table-cell table:style-name="ce6" office:value-type="string">
      <text:p>T</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Default" office:value-type="string">
      <text:p>boolean</text:p>
    </table:table-cell>
  </table:table-row>
</table:table> 
Browse[1]> c

Enter a frame number, or 0 to exit   

1: read.ods("../inst/sampleData/CellTypes.ods")
2: spreadsheet.R#21: lapply(tb, read.odsSheet, header = header, string
3: FUN(X[[1]], ...)
4: spreadsheet.R#98: getColType(types)

Selection: 0
> source("namespaces.R"); source("spreadsheet.R")
> source("namespaces.R"); source("spreadsheet.R")
> read.ods("../inst/sampleData/CellTypes.ods")
Error in xmlGetAttr(node, "time-value", xmlGetAttr(node, "value", NA),  : 
  object 'convertTime' not found

Enter a frame number, or 0 to exit   

 1: read.ods("../inst/sampleData/CellTypes.ods")
 2: spreadsheet.R#21: lapply(tb, read.odsSheet, header = header, string
 3: FUN(X[[1]], ...)
 4: spreadsheet.R#76: t(sapply(rows, function(x) {
 5: spreadsheet.R#76: sapply(rows, function(x) {
 6: lapply(X, FUN, ...)
 7: FUN(X[[7]], ...)
 8: spreadsheet.R#78: unlist(xmlApply(x, getCellValue), recursive = FAL
 9: xmlApply(x, getCellValue)
10: xmlApply.XMLInternalNode(x, getCellValue)
11: lapply(kids, FUN, ...)
12: FUN(X[[1]], ...)
13: spreadsheet.R#165: xmlGetAttr(node, "time-value", xmlGetAttr(node, 

Selection: 12
Called from: top level 
Browse[1]> ls()
[1] "date" "n"    "node"
Browse[1]> date
[1] NA
Browse[1]> n
*** output flushed ***
Selection: 0
> read.ods("../inst/sampleData/CellTypes.ods")
Error in xmlGetAttr(node, "time-value", xmlGetAttr(node, "value", NA),  : 
  object 'convertTime' not found

Enter a frame number, or 0 to exit   

 1: read.ods("../inst/sampleData/CellTypes.ods")
 2: spreadsheet.R#21: lapply(tb, read.odsSheet, header = header, string
 3: FUN(X[[1]], ...)
 4: spreadsheet.R#76: t(sapply(rows, function(x) {
 5: spreadsheet.R#76: sapply(rows, function(x) {
 6: lapply(X, FUN, ...)
 7: FUN(X[[7]], ...)
 8: spreadsheet.R#78: unlist(xmlApply(x, getCellValue), recursive = FAL
 9: xmlApply(x, getCellValue)
10: xmlApply.XMLInternalNode(x, getCellValue)
11: lapply(kids, FUN, ...)
12: FUN(X[[1]], ...)
13: spreadsheet.R#165: xmlGetAttr(node, "time-value", xmlGetAttr(node, 

Selection: 12
Called from: top level 
Browse[1]> ls()
[1] "date" "n"    "node"
Browse[1]> node
<table:table-cell table:style-name="ce7" office:value-type="time" office:time-value="PT23H01M02S">
  <text:p>23:01</text:p>
</table:table-cell> 
Browse[1]> get("n")
[1] 0
Browse[1]> `n`

Enter a frame number, or 0 to exit   

 1: read.ods("../inst/sampleData/CellTypes.ods")
 2: spreadsheet.R#21: lapply(tb, read.odsSheet, header = header, string
 3: FUN(X[[1]], ...)
 4: spreadsheet.R#76: t(sapply(rows, function(x) {
 5: spreadsheet.R#76: sapply(rows, function(x) {
 6: lapply(X, FUN, ...)
 7: FUN(X[[7]], ...)
 8: spreadsheet.R#78: unlist(xmlApply(x, getCellValue), recursive = FAL
 9: xmlApply(x, getCellValue)
10: xmlApply.XMLInternalNode(x, getCellValue)
11: lapply(kids, FUN, ...)
12: FUN(X[[1]], ...)
13: spreadsheet.R#165: xmlGetAttr(node, "time-value", xmlGetAttr(node, 

Selection: 0
> read.ods("../inst/sampleData/CellTypes.ods")
Error in xmlGetAttr(node, "time-value", xmlGetAttr(node, "value", NA),  : 
  object 'convertTime' not found

Enter a frame number, or 0 to exit   

 1: read.ods("../inst/sampleData/CellTypes.ods")
 2: spreadsheet.R#21: lapply(tb, read.odsSheet, header = header, string
 3: FUN(X[[1]], ...)
 4: spreadsheet.R#76: t(sapply(rows, function(x) {
 5: spreadsheet.R#76: sapply(rows, function(x) {
 6: lapply(X, FUN, ...)
 7: FUN(X[[7]], ...)
 8: spreadsheet.R#78: unlist(xmlApply(x, getCellValue), recursive = FAL
 9: xmlApply(x, getCellValue)
10: xmlApply.XMLInternalNode(x, getCellValue)
11: lapply(kids, FUN, ...)
12: FUN(X[[1]], ...)
13: spreadsheet.R#165: xmlGetAttr(node, "time-value", xmlGetAttr(node, 

Selection: 12
Called from: top level 
Browse[1]> ls)
Error during wrapup: unexpected ')' in "ls)"
Browse[1]> ls()
[1] "date" "n"    "node"
Browse[1]> node
<table:table-cell table:style-name="ce7" office:value-type="time" office:time-value="PT23H01M02S">
  <text:p>23:01</text:p>
</table:table-cell> 
Browse[1]> 

Enter a frame number, or 0 to exit   

 1: read.ods("../inst/sampleData/CellTypes.ods")
 2: spreadsheet.R#21: lapply(tb, read.odsSheet, header = header, string
 3: FUN(X[[1]], ...)
 4: spreadsheet.R#76: t(sapply(rows, function(x) {
 5: spreadsheet.R#76: sapply(rows, function(x) {
 6: lapply(X, FUN, ...)
 7: FUN(X[[7]], ...)
 8: spreadsheet.R#78: unlist(xmlApply(x, getCellValue), recursive = FAL
 9: xmlApply(x, getCellValue)
10: xmlApply.XMLInternalNode(x, getCellValue)
11: lapply(kids, FUN, ...)
12: FUN(X[[1]], ...)
13: spreadsheet.R#165: xmlGetAttr(node, "time-value", xmlGetAttr(node, 

Selection: 0
> strptime("PT23H01M02S", "PT%HH%MM%SS")
[1] "2011-03-01 23:01:02"
> strptime("PT23H01M02S", "PT%HH%MM%SS")

> source("namespaces.R"); source("spreadsheet.R")
> read.ods("../inst/sampleData/CellTypes.ods")
Error in sprintf("%s%HH%MM%SS", substring(x, 1, 2)) : 
  unrecognised format specification '%HH%MM%SS'

Enter a frame number, or 0 to exit   

 1: read.ods("../inst/sampleData/CellTypes.ods")
 2: spreadsheet.R#21: lapply(tb, read.odsSheet, header = header, string
 3: FUN(X[[1]], ...)
 4: spreadsheet.R#76: t(sapply(rows, function(x) {
 5: spreadsheet.R#76: sapply(rows, function(x) {
 6: lapply(X, FUN, ...)
 7: FUN(X[[7]], ...)
 8: spreadsheet.R#78: unlist(xmlApply(x, getCellValue), recursive = FAL
 9: xmlApply(x, getCellValue)
10: xmlApply.XMLInternalNode(x, getCellValue)
11: lapply(kids, FUN, ...)
12: FUN(X[[1]], ...)
13: spreadsheet.R#165: xmlGetAttr(node, "time-value", xmlGetAttr(node, 
14: converter(a[[name]])
15: spreadsheet.R#181: sprintf("%s%HH%MM%SS", substring(x, 1, 2))

Selection: 0
> source("namespaces.R"); source("spreadsheet.R")
Error: '\%' is an unrecognized escape in character string starting "%s\%"

Enter a frame number, or 0 to exit   

1: source("spreadsheet.R")
2: source("spreadsheet.R")

Selection: source("namespaces.R"); source("spreadsheet.R")0
Enter an item from the menu, or 0 to exit
Selection: 
Enter an item from the menu, or 0 to exit
Selection: 0
> source("namespaces.R"); source("spreadsheet.R")0
Error: unexpected numeric constant in " source("spreadsheet.R")0"
No suitable frames for recover()
> source("namespaces.R"); source("spreadsheet.R")
> 
> convertTime("PT23H01M02S")
Error in sprintf("%s\\%HH\\%MM\\%SS", substring(x, 1, 2)) : 
  unrecognised format specification '%HH\%MM\%SS'

Enter a frame number, or 0 to exit   

1: convertTime("PT23H01M02S")
2: spreadsheet.R#181: sprintf("%s\\%HH\\%MM\\%SS", substring(x, 1, 2))

Selection: 0
> source("namespaces.R"); source("spreadsheet.R")
> convertTime("PT23H01M02S")
[1] "2011-03-01 23:01:02"
> read.ods("../inst/sampleData/CellTypes.ods")
Error in FUN(X[[1L]], ...) : (subscript) logical subscript too long

Enter a frame number, or 0 to exit   

1: read.ods("../inst/sampleData/CellTypes.ods")
2: spreadsheet.R#21: lapply(tb, read.odsSheet, header = header, string
3: FUN(X[[1]], ...)

Selection: 3
Called from: lapply(tb, read.odsSheet, header = header, stringsAsFactors = stringsAsFactors)
Browse[1]> ans
[[1]]
table-cell table-cell 
    "0.23"         NA 

[[2]]
table-cell table-cell 
      "23"         NA 

[[3]]
  table-cell   table-cell 
"2011-12-23"           NA 

[[4]]
table-cell table-cell 
      "23"         NA 

[[5]]
table-cell table-cell 
      "23"         NA 

[[6]]
table-cell table-cell 
        NA         NA 

[[7]]
[[7]]$`table-cell.sec`
[1] 2

[[7]]$`table-cell.min`
[1] 1

[[7]]$`table-cell.hour`
[1] 23

[[7]]$`table-cell.mday`
[1] 1

[[7]]$`table-cell.mon`
[1] 2

[[7]]$`table-cell.year`
[1] 111

[[7]]$`table-cell.wday`
[1] 2

[[7]]$`table-cell.yday`
[1] 59

[[7]]$`table-cell.isdst`
[1] 0

[[7]]$`table-cell`
[1] NA


[[8]]
table-cell table-cell 
  "23.125"         NA 

[[9]]
table-cell table-cell 
        NA         NA 

Browse[1]> c

Enter a frame number, or 0 to exit   

1: read.ods("../inst/sampleData/CellTypes.ods")
2: spreadsheet.R#21: lapply(tb, read.odsSheet, header = header, string
3: FUN(X[[1]], ...)

Selection: 0
> source("namespaces.R"); source("spreadsheet.R")
> read.ods("../inst/sampleData/CellTypes.ods")
Error in FUN(X[[1L]], ...) : (subscript) logical subscript too long

Enter a frame number, or 0 to exit   

1: read.ods("../inst/sampleData/CellTypes.ods")
2: spreadsheet.R#21: lapply(tb, read.odsSheet, header = header, string
3: FUN(X[[1]], ...)

Selection: 3
Called from: lapply(tb, read.odsSheet, header = header, stringsAsFactors = stringsAsFactors)
Browse[1]> ans
*** output flushed ***
Browse[1]> c

Enter a frame number, or 0 to exit   

1: read.ods("../inst/sampleData/CellTypes.ods")
2: spreadsheet.R#21: lapply(tb, read.odsSheet, header = header, string
3: FUN(X[[1]], ...)

Selection: 0
> source("namespaces.R"); source("spreadsheet.R")
> read.ods("../inst/sampleData/CellTypes.ods")
Error in getColType(types) : unrecognized cell type

Enter a frame number, or 0 to exit   

1: read.ods("../inst/sampleData/CellTypes.ods")
2: spreadsheet.R#21: lapply(tb, read.odsSheet, header = header, string
3: FUN(X[[1]], ...)
4: spreadsheet.R#98: getColType(types)

Selection: 3
Called from: getColType(types)
Browse[1]> ans
[1] "0.23"       "23"         "2011-12-23" "23"         "23"        
[6] NA           "1299049262" "23.125"     NA          
Browse[1]> 

Enter a frame number, or 0 to exit   

1: read.ods("../inst/sampleData/CellTypes.ods")
2: spreadsheet.R#21: lapply(tb, read.odsSheet, header = header, string
3: FUN(X[[1]], ...)
4: spreadsheet.R#98: getColType(types)

Selection: c
Enter an item from the menu, or 0 to exit
Selection: 0
> source("namespaces.R"); source("spreadsheet.R")
> read.ods("../inst/sampleData/CellTypes.ods")
Error in getColType(types) : unrecognized cell type

Enter a frame number, or 0 to exit   

1: read.ods("../inst/sampleData/CellTypes.ods")
2: spreadsheet.R#21: lapply(tb, read.odsSheet, header = header, string
3: FUN(X[[1]], ...)
4: spreadsheet.R#98: getColType(types)

Selection: 3
Called from: getColType(types)
Browse[1]> ans
[1] "0.23"        "23"          "2011-12-23"  "23"         
[5] "23"          NA            "PT23H01M02S" "23.125"     
[9] NA           
Browse[1]> types
[1] "percentage" "currency"   "date"       "float"      "float"     
[6] "boolean"    "time"       "float"      "string"    
Browse[1]> c

Enter a frame number, or 0 to exit   

1: read.ods("../inst/sampleData/CellTypes.ods")
2: spreadsheet.R#21: lapply(tb, read.odsSheet, header = header, string
3: FUN(X[[1]], ...)
4: spreadsheet.R#98: getColType(types)

Selection: 0
> read.ods("../inst/sampleData/CellTypes.ods")
Error in getColType(types) : unrecognized cell type

Enter a frame number, or 0 to exit   

1: read.ods("../inst/sampleData/CellTypes.ods")
2: spreadsheet.R#21: lapply(tb, read.odsSheet, header = header, string
3: FUN(X[[1]], ...)
4: spreadsheet.R#98: getColType(types)

Selection: 3
Called from: getColType(types)
Browse[1]> ans
[1] "0.23"        "23"          "2011-12-23"  "23"         
[5] "23"          NA            "PT23H01M02S" "23.125"     
Browse[1]> tb
<table:table table:name="Sheet1" table:style-name="ta1" table:print="false">
  <table:table-column table:style-name="co1" table:default-cell-style-name="Default"/>
  <table:table-column table:style-name="co1" table:default-cell-style-name="ce9"/>
  <table:table-row table:style-name="ro1">
    <table:table-cell/>
    <table:table-cell table:style-name="Default"/>
  </table:table-row>
  <table:table-row table:style-name="ro1">
    <table:table-cell office:value-type="float" office:value="23">
      <text:p>23</text:p>
    </table:table-cell>
    <table:table-cell office:value-type="string">
      <text:p>number</text:p>
    </table:table-cell>
  </table:table-row>
  <table:table-row table:style-name="ro1">
    <table:table-cell table:style-name="ce1" office:value-type="percentage" office:value="0.23">
      <text:p>23.00%</text:p>
    </table:table-cell>
    <table:table-cell office:value-type="string">
      <text:p>percentage</text:p>
    </table:table-cell>
  </table:table-row>
  <table:table-row table:style-name="ro1">
    <table:table-cell table:style-name="ce2" office:value-type="currency" office:currency="USD" office:value="23">
      <text:p>$23.00</text:p>
    </table:table-cell>
    <table:table-cell office:value-type="string">
      <text:p>currency</text:p>
    </table:table-cell>
  </table:table-row>
  <table:table-row table:style-name="ro1">
    <table:table-cell table:style-name="ce3" office:value-type="date" office:date-value="2011-12-23">
      <text:p>12/23/11</text:p>
    </table:table-cell>
    <table:table-cell office:value-type="string">
      <text:p>date</text:p>
    </table:table-cell>
  </table:table-row>
  <table:table-row table:style-name="ro1">
    <table:table-cell table:style-name="ce4" office:value-type="float" office:value="23">
      <text:p>2.30E+001</text:p>
    </table:table-cell>
    <table:table-cell office:value-type="string">
      <text:p>scientific</text:p>
    </table:table-cell>
  </table:table-row>
  <table:table-row table:style-name="ro1">
    <table:table-cell table:style-name="ce5" office:value-type="float" office:value="23">
      <text:p>23</text:p>
    </table:table-cell>
    <table:table-cell office:value-type="string">
      <text:p>text</text:p>
    </table:table-cell>
  </table:table-row>
  <table:table-row table:style-name="ro1">
    <table:table-cell table:style-name="ce6" office:value-type="boolean" office:boolean-value="23">
      <text:p>TRUE</text:p>
    </table:table-cell>
    <table:table-cell office:value-type="string">
      <text:p>boolean</text:p>
    </table:table-cell>
  </table:table-row>
  <table:table-row table:style-name="ro1">
    <table:table-cell table:style-name="ce7" office:value-type="time" office:time-value="PT23H01M02S">
      <text:p>23:01</text:p>
    </table:table-cell>
    <table:table-cell office:value-type="string">
      <text:p>time</text:p>
    </table:table-cell>
  </table:table-row>
  <table:table-row table:style-name="ro1">
    <table:table-cell table:style-name="ce8" office:value-type="float" office:value="23.125">
      <text:p>23 1/8</text:p>
    </table:table-cell>
    <table:table-cell office:value-type="string">
      <text:p>fraction</text:p>
    </table:table-cell>
  </table:table-row>
</table:table> 
Browse[1]> ans
[1] "0.23"        "23"          "2011-12-23"  "23"         
[5] "23"          NA            "PT23H01M02S" "23.125"     
Browse[1]> 

Enter a frame number, or 0 to exit   

1: read.ods("../inst/sampleData/CellTypes.ods")
2: spreadsheet.R#21: lapply(tb, read.odsSheet, header = header, string
3: FUN(X[[1]], ...)
4: spreadsheet.R#98: getColType(types)

Selection: 3
Called from: getColType(types)
Browse[1]> ans
[1] "0.23"        "23"          "2011-12-23"  "23"         
[5] "23"          NA            "PT23H01M02S" "23.125"     
Browse[1]> types
[1] "percentage" "currency"   "date"       "float"      "float"     
[6] "boolean"    "time"       "float"     
Browse[1]> numCols
[1] 0
Browse[1]> rows
[[1]]
<table:table-row table:style-name="ro1">
  <table:table-cell table:style-name="ce1" office:value-type="percentage" office:value="0.23">
    <text:p>23.00%</text:p>
  </table:table-cell>
  <table:table-cell office:value-type="string">
    <text:p>percentage</text:p>
  </table:table-cell>
</table:table-row> 

[[2]]
<table:table-row table:style-name="ro1">
  <table:table-cell table:style-name="ce2" office:value-type="currency" office:currency="USD" office:value="23">
    <text:p>$23.00</text:p>
  </table:table-cell>
  <table:table-cell office:value-type="string">
    <text:p>currency</text:p>
  </table:table-cell>
</table:table-row> 

[[3]]
<table:table-row table:style-name="ro1">
  <table:table-cell table:style-name="ce3" office:value-type="date" office:date-value="2011-12-23">
    <text:p>12/23/11</text:p>
  </table:table-cell>
  <table:table-cell office:value-type="string">
    <text:p>date</text:p>
  </table:table-cell>
</table:table-row> 

[[4]]
<table:table-row table:style-name="ro1">
  <table:table-cell table:style-name="ce4" office:value-type="float" office:value="23">
    <text:p>2.30E+001</text:p>
  </table:table-cell>
  <table:table-cell office:value-type="string">
    <text:p>scientific</text:p>
  </table:table-cell>
</table:table-row> 

[[5]]
<table:table-row table:style-name="ro1">
  <table:table-cell table:style-name="ce5" office:value-type="float" office:value="23">
    <text:p>23</text:p>
  </table:table-cell>
  <table:table-cell office:value-type="string">
    <text:p>text</text:p>
  </table:table-cell>
</table:table-row> 

[[6]]
<table:table-row table:style-name="ro1">
  <table:table-cell table:style-name="ce6" office:value-type="boolean" office:boolean-value="23">
    <text:p>TRUE</text:p>
  </table:table-cell>
  <table:table-cell office:value-type="string">
    <text:p>boolean</text:p>
  </table:table-cell>
</table:table-row> 

[[7]]
<table:table-row table:style-name="ro1">
  <table:table-cell table:style-name="ce7" office:value-type="time" office:time-value="PT23H01M02S">
    <text:p>23:01</text:p>
  </table:table-cell>
  <table:table-cell office:value-type="string">
    <text:p>time</text:p>
  </table:table-cell>
</table:table-row> 

[[8]]
<table:table-row table:style-name="ro1">
  <table:table-cell table:style-name="ce8" office:value-type="float" office:value="23.125">
    <text:p>23 1/8</text:p>
  </table:table-cell>
  <table:table-cell office:value-type="string">
    <text:p>fraction</text:p>
  </table:table-cell>
</table:table-row> 

Browse[1]> varNames
table-cell table-cell 
      "23"         NA 
Browse[1]> header
[1] TRUE
Browse[1]> c

Enter a frame number, or 0 to exit   

1: read.ods("../inst/sampleData/CellTypes.ods")
2: spreadsheet.R#21: lapply(tb, read.odsSheet, header = header, string
3: FUN(X[[1]], ...)
4: spreadsheet.R#98: getColType(types)

Selection: 0
> read.ods("../inst/sampleData/CellTypes.ods", header = FALSE)
Error in getColType(types) : unrecognized cell type

Enter a frame number, or 0 to exit   

1: read.ods("../inst/sampleData/CellTypes.ods", header = FALSE)
2: spreadsheet.R#21: lapply(tb, read.odsSheet, header = header, string
3: FUN(X[[1]], ...)
4: spreadsheet.R#98: getColType(types)

Selection: 3
Called from: getColType(types)
Browse[1]> header
[1] FALSE
Browse[1]> varNames
character(0)
Browse[1]> types
[1] "float"      "percentage" "currency"   "date"       "float"     
[6] "float"      "boolean"    "time"       "float"     
Browse[1]> rows[[1]]
<table:table-row table:style-name="ro1">
  <table:table-cell office:value-type="float" office:value="23">
    <text:p>23</text:p>
  </table:table-cell>
  <table:table-cell office:value-type="string">
    <text:p>number</text:p>
  </table:table-cell>
</table:table-row> 
Browse[1]> getCellType(rows[[1]][[1]])
[1] "float"
Browse[1]> getCellType(rows[[1]][[2]])
[1] "string"
Browse[1]> xmlApply(rows[[1]], getCellValue)
$`table-cell`
[1] "23"

$`table-cell`
[1] NA

Browse[1]> getCellValue(rows[[1]][[2]])
[1] NA
Browse[1]> types
[1] "float"      "percentage" "currency"   "date"       "float"     
[6] "float"      "boolean"    "time"       "float"     
Browse[1]> sapply(rows, function(x) unlist(xmlApply(x, getCellType)))
           [,1]     [,2]         [,3]       [,4]     [,5]     [,6]    
table-cell "float"  "percentage" "currency" "date"   "float"  "float" 
table-cell "string" "string"     "string"   "string" "string" "string"
           [,7]      [,8]     [,9]    
table-cell "boolean" "time"   "float" 
table-cell "string"  "string" "string"
Browse[1]> t(sapply(rows, function(x) unlist(xmlApply(x, getCellType))))
      table-cell   table-cell
 [1,] "float"      "string"  
 [2,] "percentage" "string"  
 [3,] "currency"   "string"  
 [4,] "date"       "string"  
 [5,] "float"      "string"  
 [6,] "float"      "string"  
 [7,] "boolean"    "string"  
 [8,] "time"       "string"  
 [9,] "float"      "string"  
Browse[1]> realCols
table-cell table-cell 
      TRUE      FALSE 
Browse[1]>   ans = t(sapply(rows,
                 function(x) {
                    unlist(xmlApply(x, getCellValue), recursive = FALSE)
                  }))
+ + + Browse[1]> ans
      table-cell    table-cell
 [1,] "23"          NA        
 [2,] "0.23"        NA        
 [3,] "23"          NA        
 [4,] "2011-12-23"  NA        
 [5,] "23"          NA        
 [6,] "23"          NA        
 [7,] NA            NA        
 [8,] "PT23H01M02S" NA        
 [9,] "23.125"      NA        
Browse[1]> rows[[1]]
<table:table-row table:style-name="ro1">
  <table:table-cell office:value-type="float" office:value="23">
    <text:p>23</text:p>
  </table:table-cell>
  <table:table-cell office:value-type="string">
    <text:p>number</text:p>
  </table:table-cell>
</table:table-row> 
Browse[1]> rows[[1]][[2]]
<table:table-cell office:value-type="string">
  <text:p>number</text:p>
</table:table-cell> 
Browse[1]> getCellValue(rows[[1]][[2]])
[1] NA
Browse[1]> debug(getCellValue)
Browse[1]> getCellValue(rows[[1]][[2]])
debugging in: getCellValue(rows[[1]][[2]])
debug at spreadsheet.R#159: {
    n = xmlGetAttr(node, "number-columns-repeated", 0)
    date = xmlGetAttr(node, "date-value", NA)
    txt = if (!is.na(date)) 
        date
    else {
        tmp = xmlGetAttr(node, "time-value", xmlGetAttr(node, 
            "value", NA))
        if (is.na(tmp)) 
            xmlValue(node)
        tmp
    }
    if (n > 0) 
        rep(txt, n)
    else txt
}
attr(,"srcfile")
spreadsheet.R 
attr(,"wholeSrcref")
# Came from RExcelML
if(FALSE) {
setClass("OOWorkbook", contains = "ZipArchiveEntry")
setClass("OOWorksheet", representation(content = "XMLInternalDocument", name = "ZipArchiveEntry"))
setClass("OOWorksheetFile", contains = "ZipArchiveEntry")

setMethod("names", "OOWorkbook",
            function(x) {
              doc = xmlParse(x[["content.xml"]])
              unlist(getNodeSet(doc, "//table:table/@table:name", "table"))
            })
#setMethod("[[", "Workbook"
}

read.ods =
function(file, header = TRUE, simplify = TRUE,
          doc = xmlParse(zipArchive(file)[["content.xml"]]),
          stringsAsFactors = TRUE)
{
  tb = getNodeSet(doc, "//table:table", "table")
  ans = lapply(tb, read.odsSheet, header = header, stringsAsFactors = stringsAsFactors)

  n = sapply(ans, is.null)
  if(any(n)) {
     ans = ans[!n]
     tb = tb[!n]
  }
  
  if(simplify && length(ans) == 1)
    return(ans[[1]])

  names(ans) = sapply(tb, xmlGetAttr, "name")
  ans
}

read.odsSheet =
  #
  #
  # We need to deal with blank rows and where cells are repeated.
  #   In progress
  #
  # tb is the table:table node.
  #
function(tb, header = TRUE, stringsAsFactors = TRUE) # really a header?
{

    # Get num columns from the first row.
  numCols = xmlGetAttr(tb[[1]], "number-columns-repeated", 0, as.integer)

    # Get all rows which have a cell with a office:value entry. Otherwise
    # it is an empty row.
  rows = getNodeSet(tb, "./table:table-row[./table:table-cell[@office:value | @office:value-type]]",
                        OpenOfficeNamespaces[c("office", "table")])

  if(length(rows) == 0)
     return(NULL)

  rowNames = FALSE
  varNames = character()
  
  if(header) {
    varNames = xmlSApply(rows[[1]], getCellValue)
#   if(length(varNames) && is.na(varNames[1])) {
#      rowNames = TRUE
#      varNames = varNames[-1]
#   }
    rows = rows[-1]
  } 


     # This gets the types by row and this might be ragged, i.e. not by column
     # Now changed to expand the missing columns so won't be ragged.
  types = t(sapply(rows, function(x) unlist(xmlApply(x, getCellType))))
     # Now get all the cells, expanding the elements that are missing so all the
     # the result will be a matrix
  ans = t(sapply(rows,
                 function(x) {
                    unlist(xmlApply(x, getCellValue), recursive = FALSE)
                  }))

  realCols = apply(ans, 2, function(x) any(!is.na(x)))

  if(!realCols[1]) {
      rowNames = FALSE
  }

  if(header) {
    if(is.na(varNames[1]) && realCols[1]) {
       rowNames = TRUE
    }
  }  

  
  ans = ans[ , realCols ]
  types = types[, realCols]

  if(!is.matrix(ans)) {
    tp = getColType(types)
    return(if(is.function(tp))
             tp(ans)
           else
             as(ans, tp))
  }  
  
  if(length(varNames))
     varNames = varNames[realCols]



    # This seems to go along rows, not columns
  tmp = lapply(seq(length = ncol(ans)),
               function(i) {
                  if(all(is.na(types[,i])))
                    return(NULL)
                  tp = unique(unlist(types[,i]))
                  if(is.null(tp))
                    return(NULL)
                  colType = getColType(tp)
                  if(is.function(colType))
                    colType(ans[,i])
                  else
                    as(unlist(ans[,i]), colType)
               })
  tmp = tmp[!sapply(tmp, is.null)]
  ans = as.data.frame(tmp, stringsAsFactors = stringsAsFactors)

  
  if(rowNames) {
    rownames(ans) = ans[,1]
    ans = ans[,-1]
    varNames = varNames[-1]
  }
  
  structure(ans, names = if(length(varNames))
                            as.character(varNames)
                         else
                            paste("V", seq(length = length(tmp)), sep = ""))
}

getCellType =
function(node)
{

  n = xmlGetAttr(node, "number-columns-repeated", 0)
  txt = xmlGetAttr(node, "value-type", NA)
  if(n > 0)
     rep(txt, n)
  else
     txt
}
  


getCellValue =
  #
  # Get the cell value or a collection of NAs if this is a number-columns-repeated cell.
  #
function(node)
{
  n = xmlGetAttr(node, "number-columns-repeated", 0)
  date = xmlGetAttr(node, "date-value", NA)
  txt = if(!is.na(date))
          date
        else {
           tmp = xmlGetAttr(node, "time-value", xmlGetAttr(node, "value", NA)) # , convertTime)          
           if(is.na(tmp))
 #          if(xmlSize(node))
             xmlValue(node)
#          else
             tmp
        }
  if(n > 0)
     rep(txt, n)
  else
     txt
}
Browse[3]> 
debug at spreadsheet.R#160: n = xmlGetAttr(node, "number-columns-repeated", 0)
Browse[3]> n
debug at spreadsheet.R#161: date = xmlGetAttr(node, "date-value", NA)
Browse[3]> n
debug at spreadsheet.R#162: txt = if (!is.na(date)) date else {
    tmp = xmlGetAttr(node, "time-value", xmlGetAttr(node, "value", 
        NA))
    if (is.na(tmp)) 
        xmlValue(node)
    tmp
}
Browse[3]> n
debug at spreadsheet.R#162: {
    tmp = xmlGetAttr(node, "time-value", xmlGetAttr(node, "value", 
        NA))
    if (is.na(tmp)) 
        xmlValue(node)
    tmp
}
attr(,"srcfile")
spreadsheet.R 
attr(,"wholeSrcref")
# Came from RExcelML
if(FALSE) {
setClass("OOWorkbook", contains = "ZipArchiveEntry")
setClass("OOWorksheet", representation(content = "XMLInternalDocument", name = "ZipArchiveEntry"))
setClass("OOWorksheetFile", contains = "ZipArchiveEntry")

setMethod("names", "OOWorkbook",
            function(x) {
              doc = xmlParse(x[["content.xml"]])
              unlist(getNodeSet(doc, "//table:table/@table:name", "table"))
            })
#setMethod("[[", "Workbook"
}

read.ods =
function(file, header = TRUE, simplify = TRUE,
          doc = xmlParse(zipArchive(file)[["content.xml"]]),
          stringsAsFactors = TRUE)
{
  tb = getNodeSet(doc, "//table:table", "table")
  ans = lapply(tb, read.odsSheet, header = header, stringsAsFactors = stringsAsFactors)

  n = sapply(ans, is.null)
  if(any(n)) {
     ans = ans[!n]
     tb = tb[!n]
  }
  
  if(simplify && length(ans) == 1)
    return(ans[[1]])

  names(ans) = sapply(tb, xmlGetAttr, "name")
  ans
}

read.odsSheet =
  #
  #
  # We need to deal with blank rows and where cells are repeated.
  #   In progress
  #
  # tb is the table:table node.
  #
function(tb, header = TRUE, stringsAsFactors = TRUE) # really a header?
{

    # Get num columns from the first row.
  numCols = xmlGetAttr(tb[[1]], "number-columns-repeated", 0, as.integer)

    # Get all rows which have a cell with a office:value entry. Otherwise
    # it is an empty row.
  rows = getNodeSet(tb, "./table:table-row[./table:table-cell[@office:value | @office:value-type]]",
                        OpenOfficeNamespaces[c("office", "table")])

  if(length(rows) == 0)
     return(NULL)

  rowNames = FALSE
  varNames = character()
  
  if(header) {
    varNames = xmlSApply(rows[[1]], getCellValue)
#   if(length(varNames) && is.na(varNames[1])) {
#      rowNames = TRUE
#      varNames = varNames[-1]
#   }
    rows = rows[-1]
  } 


     # This gets the types by row and this might be ragged, i.e. not by column
     # Now changed to expand the missing columns so won't be ragged.
  types = t(sapply(rows, function(x) unlist(xmlApply(x, getCellType))))
     # Now get all the cells, expanding the elements that are missing so all the
     # the result will be a matrix
  ans = t(sapply(rows,
                 function(x) {
                    unlist(xmlApply(x, getCellValue), recursive = FALSE)
                  }))

  realCols = apply(ans, 2, function(x) any(!is.na(x)))

  if(!realCols[1]) {
      rowNames = FALSE
  }

  if(header) {
    if(is.na(varNames[1]) && realCols[1]) {
       rowNames = TRUE
    }
  }  

  
  ans = ans[ , realCols ]
  types = types[, realCols]

  if(!is.matrix(ans)) {
    tp = getColType(types)
    return(if(is.function(tp))
             tp(ans)
           else
             as(ans, tp))
  }  
  
  if(length(varNames))
     varNames = varNames[realCols]



    # This seems to go along rows, not columns
  tmp = lapply(seq(length = ncol(ans)),
               function(i) {
                  if(all(is.na(types[,i])))
                    return(NULL)
                  tp = unique(unlist(types[,i]))
                  if(is.null(tp))
                    return(NULL)
                  colType = getColType(tp)
                  if(is.function(colType))
                    colType(ans[,i])
                  else
                    as(unlist(ans[,i]), colType)
               })
  tmp = tmp[!sapply(tmp, is.null)]
  ans = as.data.frame(tmp, stringsAsFactors = stringsAsFactors)

  
  if(rowNames) {
    rownames(ans) = ans[,1]
    ans = ans[,-1]
    varNames = varNames[-1]
  }
  
  structure(ans, names = if(length(varNames))
                            as.character(varNames)
                         else
                            paste("V", seq(length = length(tmp)), sep = ""))
}

getCellType =
function(node)
{

  n = xmlGetAttr(node, "number-columns-repeated", 0)
  txt = xmlGetAttr(node, "value-type", NA)
  if(n > 0)
     rep(txt, n)
  else
     txt
}
  


getCellValue =
  #
  # Get the cell value or a collection of NAs if this is a number-columns-repeated cell.
  #
function(node)
{
  n = xmlGetAttr(node, "number-columns-repeated", 0)
  date = xmlGetAttr(node, "date-value", NA)
  txt = if(!is.na(date))
          date
        else {
           tmp = xmlGetAttr(node, "time-value", xmlGetAttr(node, "value", NA)) # , convertTime)          
           if(is.na(tmp))
 #          if(xmlSize(node))
             xmlValue(node)
#          else
             tmp
        }
Browse[3]> n
debug at spreadsheet.R#165: tmp = xmlGetAttr(node, "time-value", xmlGetAttr(node, "value", 
    NA))
Browse[3]> n
debug at spreadsheet.R#166: if (is.na(tmp)) xmlValue(node)
Browse[3]> tmp
[1] NA
Browse[3]> n
debug at spreadsheet.R#166: xmlValue(node)
Browse[3]> n
debug at spreadsheet.R#170: tmp
Browse[3]> c
exiting from: getCellValue(rows[[1]][[2]])
[1] NA
Browse[1]> 

Enter a frame number, or 0 to exit   

1: read.ods("../inst/sampleData/CellTypes.ods", header = FALSE)
2: spreadsheet.R#21: lapply(tb, read.odsSheet, header = header, string
3: FUN(X[[1]], ...)
4: spreadsheet.R#98: getColType(types)

Selection: 0
> source("namespaces.R"); source("spreadsheet.R")
> read.ods("../inst/sampleData/CellTypes.ods", header = FALSE)
Error in getColType(tp) : unrecognized cell type

Enter a frame number, or 0 to exit   

1: read.ods("../inst/sampleData/CellTypes.ods", header = FALSE)
2: spreadsheet.R#21: lapply(tb, read.odsSheet, header = header, string
3: FUN(X[[1]], ...)
4: spreadsheet.R#111: lapply(seq(length = ncol(ans)), function(i) {
5: FUN(1:2[[1]], ...)
6: spreadsheet.R#118: getColType(tp)

Selection: 3
Called from: getColType(tp)
Browse[1]> ans
      table-cell    table-cell  
 [1,] "23"          "number"    
 [2,] "0.23"        "percentage"
 [3,] "23"          "currency"  
 [4,] "2011-12-23"  "date"      
 [5,] "23"          "scientific"
 [6,] "23"          "text"      
 [7,] "TRUE"        "boolean"   
 [8,] "PT23H01M02S" "time"      
 [9,] "23.125"      "fraction"  
Browse[1]> types
      table-cell   table-cell
 [1,] "float"      "string"  
 [2,] "percentage" "string"  
 [3,] "currency"   "string"  
 [4,] "date"       "string"  
 [5,] "float"      "string"  
 [6,] "float"      "string"  
 [7,] "boolean"    "string"  
 [8,] "time"       "string"  
 [9,] "float"      "string"  
Browse[1]> tp
Error during wrapup: object 'tp' not found
Browse[1]> 

Enter a frame number, or 0 to exit   

1: read.ods("../inst/sampleData/CellTypes.ods", header = FALSE)
2: spreadsheet.R#21: lapply(tb, read.odsSheet, header = header, string
3: FUN(X[[1]], ...)
4: spreadsheet.R#111: lapply(seq(length = ncol(ans)), function(i) {
5: FUN(1:2[[1]], ...)
6: spreadsheet.R#118: getColType(tp)

Selection: 5
*** output flushed ***
Browse[1]> ls()
[1] "i"  "tp"
Browse[1]> i
[1] 1
Browse[1]> tp
[1] "float"      "percentage" "currency"   "date"       "boolean"   
[6] "time"      
Browse[1]> getColorType(tp)
Error during wrapup: could not find function "getColorType"
Browse[1]> getColType(tp)
Error during wrapup: unrecognized cell type
Browse[1]> c

Enter a frame number, or 0 to exit   

1: read.ods("../inst/sampleData/CellTypes.ods", header = FALSE)
2: spreadsheet.R#21: lapply(tb, read.odsSheet, header = header, string
3: FUN(X[[1]], ...)
4: spreadsheet.R#111: lapply(seq(length = ncol(ans)), function(i) {
5: FUN(1:2[[1]], ...)
6: spreadsheet.R#118: getColType(tp)

Selection: 0
> source("namespaces.R"); source("spreadsheet.R")
> read.ods("../inst/sampleData/CellTypes.ods", header = FALSE)
           V1         V2
1          23     number
2        0.23 percentage
3          23   currency
4  2011-12-23       date
5          23 scientific
6          23       text
7        TRUE    boolean
8 PT23H01M02S       time
9      23.125   fraction
> source("namespaces.R"); source("spreadsheet.R")
Error in source("spreadsheet.R") : 
  spreadsheet.R:122:54: unexpected symbol
121:                   else
122:                     mapply(convertCellValue, ans[,i] types
                                                          ^

Enter a frame number, or 0 to exit   

1: source("spreadsheet.R")
2: source("spreadsheet.R")

Selection: 0
> source("namespaces.R"); source("spreadsheet.R")
> read.ods("../inst/sampleData/CellTypes.ods", header = FALSE)
                    V1         V2
number              23     number
percentage        0.23 percentage
currency            23   currency
date        2011-12-23       date
scientific          23 scientific
text                23       text
boolean           TRUE    boolean
time       PT23H01M02S       time
fraction        23.125   fraction
> d = read.ods("../inst/sampleData/CellTypes.ods", header = FALSE)
> d[[1]]
*** output flushed ***
> source("namespaces.R"); source("spreadsheet.R")
> d = read.ods("../inst/sampleData/CellTypes.ods", header = FALSE)
Called from: FUN(X[[1L]], ...)
Browse[1]> class(tmp)
[1] "list"
Browse[1]> tmp[[1]]
           23          0.23            23    2011-12-23            23 
         "23"        "0.23"          "23"  "2011-12-23"          "23" 
           23          TRUE   PT23H01M02S        23.125 
         "23"        "TRUE" "PT23H01M02S"      "23.125" 
Browse[1]> class(tmp[[1]])
[1] "character"
Browse[1]> convertCellValue(ans[1,8], types[1,8])
Error in getColType(type) : subscript out of bounds

Enter a frame number, or 0 to exit   

1: read.ods("../inst/sampleData/CellTypes.ods", header = FALSE)
2: spreadsheet.R#21: lapply(tb, read.odsSheet, header = header, string
3: FUN(X[[1]], ...)
4: spreadsheet.R#124: convertCellValue(ans[1, 8], types[1, 8])
5: spreadsheet.R#213: getColType(type)

Selection: 0
Browse[1]> types
      table-cell   table-cell
 [1,] "float"      "string"  
 [2,] "percentage" "string"  
 [3,] "currency"   "string"  
 [4,] "date"       "string"  
 [5,] "float"      "string"  
 [6,] "float"      "string"  
 [7,] "boolean"    "string"  
 [8,] "time"       "string"  
 [9,] "float"      "string"  
Browse[1]> ans
      table-cell    table-cell  
 [1,] "23"          "number"    
 [2,] "0.23"        "percentage"
 [3,] "23"          "currency"  
 [4,] "2011-12-23"  "date"      
 [5,] "23"          "scientific"
 [6,] "23"          "text"      
 [7,] "TRUE"        "boolean"   
 [8,] "PT23H01M02S" "time"      
 [9,] "23.125"      "fraction"  
Browse[1]> ans[8, 1]
   table-cell 
"PT23H01M02S" 
Browse[1]> convertCellValue(ans[8, 1], types[8, 1])
   table-cell 
"PT23H01M02S" 
Browse[1]> debug(convertCellValue)
Browse[1]> convertCellValue(ans[8, 1], types[8, 1])
debugging in: convertCellValue(ans[8, 1], types[8, 1])
debug at spreadsheet.R#212: {
    f = getColType(type)
    if (is.function(f)) 
        f(value)
    else if (is.character(f)) 
        as(value, f)
    else value
}
attr(,"srcfile")
spreadsheet.R 
attr(,"wholeSrcref")
# Came from RExcelML
if(FALSE) {
setClass("OOWorkbook", contains = "ZipArchiveEntry")
setClass("OOWorksheet", representation(content = "XMLInternalDocument", name = "ZipArchiveEntry"))
setClass("OOWorksheetFile", contains = "ZipArchiveEntry")

setMethod("names", "OOWorkbook",
            function(x) {
              doc = xmlParse(x[["content.xml"]])
              unlist(getNodeSet(doc, "//table:table/@table:name", "table"))
            })
#setMethod("[[", "Workbook"
}

read.ods =
function(file, header = TRUE, simplify = TRUE,
          doc = xmlParse(zipArchive(file)[["content.xml"]]),
          stringsAsFactors = TRUE)
{
  tb = getNodeSet(doc, "//table:table", "table")
  ans = lapply(tb, read.odsSheet, header = header, stringsAsFactors = stringsAsFactors)

  n = sapply(ans, is.null)
  if(any(n)) {
     ans = ans[!n]
     tb = tb[!n]
  }
  
  if(simplify && length(ans) == 1)
    return(ans[[1]])

  names(ans) = sapply(tb, xmlGetAttr, "name")
  ans
}

read.odsSheet =
  #
  #
  # We need to deal with blank rows and where cells are repeated.
  #   In progress
  #
  # tb is the table:table node.
  #
function(tb, header = TRUE, stringsAsFactors = TRUE) # really a header?
{

    # Get num columns from the first row.
  numCols = xmlGetAttr(tb[[1]], "number-columns-repeated", 0, as.integer)

    # Get all rows which have a cell with a office:value entry. Otherwise
    # it is an empty row.
  rows = getNodeSet(tb, "./table:table-row[./table:table-cell[@office:value | @office:value-type]]",
                        OpenOfficeNamespaces[c("office", "table")])

  if(length(rows) == 0)
     return(NULL)

  rowNames = FALSE
  varNames = character()
  
  if(header) {
    varNames = xmlSApply(rows[[1]], getCellValue)
#   if(length(varNames) && is.na(varNames[1])) {
#      rowNames = TRUE
#      varNames = varNames[-1]
#   }
    rows = rows[-1]
  } 


     # This gets the types by row and this might be ragged, i.e. not by column
     # Now changed to expand the missing columns so won't be ragged.
  types = t(sapply(rows, function(x) unlist(xmlApply(x, getCellType))))
     # Now get all the cells, expanding the elements that are missing so all the
     # the result will be a matrix
  ans = t(sapply(rows,
                 function(x) {
                    unlist(xmlApply(x, getCellValue), recursive = FALSE)
                  }))

  realCols = apply(ans, 2, function(x) any(!is.na(x)))

  if(!realCols[1]) {
      rowNames = FALSE
  }

  if(header) {
    if(is.na(varNames[1]) && realCols[1]) {
       rowNames = TRUE
    }
  }  

  
  ans = ans[ , realCols ]
  types = types[, realCols]

  if(!is.matrix(ans)) {
    tp = getColType(types)
    return(if(is.function(tp))
             tp(ans)
           else
             as(ans, tp))
  }  
  
  if(length(varNames))
     varNames = varNames[realCols]


  tmp = lapply(seq(length = ncol(ans)),
               function(i) {
                  if(all(is.na(types[,i])))
                    return(NULL)
                  tp = unique(unlist(types[,i]))
                  if(is.null(tp))
                    return(NULL)
                  colType = getColType(tp)
                  if(is.function(colType))
                    colType(ans[,i])
                  else if(is.character(colType))
                    as(unlist(ans[,i]), colType)
                  else
                    mapply(convertCellValue, ans[,i], types[,i])
               })
browser()  
  tmp = tmp[!sapply(tmp, is.null)]
  ans = as.data.frame(tmp, stringsAsFactors = stringsAsFactors)

  
  if(rowNames) {
    rownames(ans) = ans[,1]
    ans = ans[,-1]
    varNames = varNames[-1]
  }
  
  structure(ans, names = if(length(varNames))
                            as.character(varNames)
                         else
                            paste("V", seq(length = length(tmp)), sep = ""))
}

getCellType =
function(node)
{

  n = xmlGetAttr(node, "number-columns-repeated", 0)
  txt = xmlGetAttr(node, "value-type", NA)
  if(n > 0)
     rep(txt, n)
  else
     txt
}
  


getCellValue =
  #
  # Get the cell value or a collection of NAs if this is a number-columns-repeated cell.
  #
function(node)
{
  n = xmlGetAttr(node, "number-columns-repeated", 0)
  date = xmlGetAttr(node, "date-value", NA)
  txt = if(!is.na(date))
          date
        else {
           tmp = xmlGetAttr(node, "time-value", xmlGetAttr(node, "value", NA)) # , convertTime)          
           if(is.na(tmp))
             xmlValue(node)
           else
              tmp
        }
  if(n > 0)
     rep(txt, n)
  else
     txt
}

convertTime =
function(x)
{
  fmt = sprintf("%s%%HH%%MM%%SS", substring(x, 1, 2))
  as.POSIXct(strptime(x, fmt))
}


Rtypes = c("string" = "character",
           "float" = "numeric",
           "date" = function(x) { as.Date(x, "%Y-%m-%d") },
           "percentage" = "numeric",
           time = convertTime,
           currency = "numeric",
           boolean = "logical"
          )

getColType =
function(types)
{
  types = types[!is.na(types)]
  ans = if(length(types) == 1) {
           Rtypes[[types]]
        } else {
            i = match(types, names(Rtypes))
            Rtypes[[min(i)]]
        }

  if(is.null(ans))
      stop("unrecognized cell type")
}

convertCellValue =
function(value, type)
{
  f = getColType(type)
  if(is.function(f))
     f(value)
  else if(is.character(f))
     as(value, f)
  else
     value
}
Browse[3]> n
debug at spreadsheet.R#213: f = getColType(type)
Browse[3]> n
debug at spreadsheet.R#214: if (is.function(f)) f(value) else if (is.character(f)) as(value, 
    f) else value
Browse[3]> f
NULL
Browse[3]> type
table-cell 
    "time" 
Browse[3]> Rtypes[["time"]]
function(x)
{
  fmt = sprintf("%s%%HH%%MM%%SS", substring(x, 1, 2))
  as.POSIXct(strptime(x, fmt))
}
Browse[3]> type
table-cell 
    "time" 
Browse[3]> getColType(type)
Browse[3]> print(getColType(type))
NULL
Browse[3]> c
exiting from: convertCellValue(ans[8, 1], types[8, 1])
   table-cell 
"PT23H01M02S" 
Browse[1]> c
> source("namespaces.R"); source("spreadsheet.R")
> d = read.ods("../inst/sampleData/CellTypes.ods", header = FALSE)
Called from: FUN(X[[1L]], ...)
Browse[1]> c
Warning message:
In asMethod(object) : NAs introduced by coercion
> d
      V1         V2
1 23.000     number
2  0.230 percentage
3 23.000   currency
4     NA       date
5 23.000 scientific
6 23.000       text
7     NA    boolean
8     NA       time
9 23.125   fraction
> class(d[[1]])
[1] "numeric"
> d = read.ods("../inst/sampleData/CellTypes.ods", header = FALSE)
Called from: FUN(X[[1L]], ...)
Browse[1]> tmp
[[1]]
[1] 23.000  0.230 23.000     NA 23.000 23.000     NA     NA 23.125

[[2]]
[1] "number"     "percentage" "currency"   "date"       "scientific"
[6] "text"       "boolean"    "time"       "fraction"  

Warning message:
In asMethod(object) : NAs introduced by coercion
Browse[1]> mapply(convertCellValue, ans[,1], types[,1])
          23         0.23           23   2011-12-23           23 
2.300000e+01 2.300000e-01 2.300000e+01 1.533100e+04 2.300000e+01 
          23         TRUE  PT23H01M02S       23.125 
2.300000e+01 1.000000e+00 1.299049e+09 2.312500e+01 
Browse[1]> mapply(convertCellValue, ans[,1], types[,1], SIMPLIFY = FALSE)
$`23`
[1] 23

$`0.23`
[1] 0.23

$`23`
[1] 23

$`2011-12-23`
[1] "2011-12-23"

$`23`
[1] 23

$`23`
[1] 23

$`TRUE`
[1] TRUE

$PT23H01M02S
[1] "2011-03-01 23:01:02 PST"

$`23.125`
[1] 23.125

Browse[1]> mapply(convertCellValue, ans[,1], types[,1])
          23         0.23           23   2011-12-23           23 
2.300000e+01 2.300000e-01 2.300000e+01 1.533100e+04 2.300000e+01 
          23         TRUE  PT23H01M02S       23.125 
2.300000e+01 1.000000e+00 1.299049e+09 2.312500e+01 
Browse[1]> class(mapply(convertCellValue, ans[,1], types[,1]))
[1] "numeric"
Browse[1]> 
> d
      V1         V2
1 23.000     number
2  0.230 percentage
3 23.000   currency
4     NA       date
5 23.000 scientific
6 23.000       text
7     NA    boolean
8     NA       time
9 23.125   fraction
> class(d[[1]])
[1] "numeric"
> class(d[[2]])
[1] "factor"
> d = read.ods("../inst/sampleData/CellTypes.ods", header = FALSE)
Called from: FUN(X[[1L]], ...)
Browse[1]> tmp
[[1]]
[1] 23.000  0.230 23.000     NA 23.000 23.000     NA     NA 23.125

[[2]]
[1] "number"     "percentage" "currency"   "date"       "scientific"
[6] "text"       "boolean"    "time"       "fraction"  

Warning message:
In asMethod(object) : NAs introduced by coercion
Browse[1]> getColType(types[,1])
[1] "numeric"
Browse[1]> c
> source("namespaces.R"); source("spreadsheet.R")
> read.od
Error: object 'read.od' not found
No suitable frames for recover()
> d = read.ods("../inst/sampleData/CellTypes.ods", header = FALSE)
Called from: getColType(tp)
Browse[1]> i
[1] 2 4 6 3 7 5
Browse[1]> types
[1] "float"      "percentage" "currency"   "date"       "boolean"   
[6] "time"      
Browse[1]> 
Called from: FUN(X[[1L]], ...)
Browse[1]> 0
[1] 0
Warning message:
In asMethod(object) : NAs introduced by coercion
Browse[1]> c
> source("namespaces.R"); source("spreadsheet.R")
> d = read.ods("../inst/sampleData/CellTypes.ods", header = FALSE)
Called from: FUN(X[[1L]], ...)
Browse[1]> c
> d
            V1         V2
1 2.300000e+01     number
2 2.300000e-01 percentage
3 2.300000e+01   currency
4 1.533100e+04       date
5 2.300000e+01 scientific
6 2.300000e+01       text
7 1.000000e+00    boolean
8 1.299049e+09       time
9 2.312500e+01   fraction
> as.POSIXct(1.299049e+09)
Error in as.POSIXct.numeric(1299049000) : 'origin' must be supplied

Enter a frame number, or 0 to exit   

1: as.POSIXct(1299049000)
2: as.POSIXct.numeric(1299049000)

Selection: 0
> as.POSIXct
function (x, tz = "", ...) 
UseMethod("as.POSIXct")
<environment: namespace:base>
> as.POSIXct.numeric
function (x, tz = "", origin, ...) 
{
    if (missing(origin)) 
        stop("'origin' must be supplied")
    as.POSIXct(origin, tz = tz, ...) + x
}
<environment: namespace:base>
> as.POSIXct(1.299049e+09, origin = 0)
Error in as.POSIXct.numeric(origin, tz = tz, ...) : 
  'origin' must be supplied

Enter a frame number, or 0 to exit   

1: as.POSIXct(1299049000, origin = 0)
2: as.POSIXct.numeric(1299049000, origin = 0)
3: as.POSIXct(origin, tz = tz, ...)
4: as.POSIXct.numeric(origin, tz = tz, ...)

Selection: 0
> ?as.POSIXct.numeric

WARNING: terminal is not fully functional
as.POSIX*                 package:base                 R Documentation

Date-time Conversion Functions

Description:

     Functions to manipulate objects of classes '"POSIXlt"' and
     '"POSIXct"' representing calendar dates and times.

Usage:

     as.POSIXct(x, tz = "", ...)
     as.POSIXlt(x, tz = "", ...)
     
     ## S3 method for class 'character'
     as.POSIXlt(x, tz = "", format, ...)
     
     ## S3 method for class 'numeric'
     as.POSIXlt(x, tz = "", origin, ...)
     
     ## S3 method for class 'POSIXlt'
     as.double(x, ...)
     
: 
Arguments:

       x: An object to be converted.

      tz: A timezone specification to be used for the conversion, _if
          one is required_.  System-specific (see time zones), but '""'
          is the current timezone, and '"GMT"' is UTC (Universal Time,
          Coordinated).

     ...: further arguments to be passed to or from other methods.

  format: character string giving a date-time format as used by
          'strptime'.

  origin: a date-time object, or something which can be coerced by
          'as.POSIXct(tz="GMT")' to such an object.

Details:

     The 'as.POSIX*' functions convert an object to one of the two
     classes used to represent date/times (calendar dates plus time to
     the nearest second).  They can convert a wide variety of objects,
     including objects of the other class and of classes '"Date"',
     '"date"' (from package 'date'), '"chron"' and '"dates"' (from
: 
     package 'chron') to these classes.  Dates without times are
     treated as being at midnight UTC.

     They can also convert character strings of the formats
     '"2001-02-03"' and '"2001/02/03"' optionally followed by white
     space and a time in the format '"14:52"' or '"14:52:03"'.
     (Formats such as '"01/02/03"' are ambiguous but can be converted
     via a format specification by 'strptime'.)  Fractional seconds are
     allowed.  Alternatively, 'format' can be specified for character
     vectors or factors: if it is not specified and no standard format
     works for all non-'NA' inputs an error is thrown.

     If 'format' is specified, remember that some of the format
     specifications are locale-specific, and you may need to set the
     'LC_TIME' category appropriately _via_ 'Sys.setlocale'.  This most
     often affecs the use of '%b', '%B' (month names) and '%p' (AM/PM).

     Logical 'NA's can be converted to either of the classes, but no
     other logical vectors can be.

     The 'as.double' method converts '"POSIXlt"' objects to
     '"POSIXct"'.

     If you are given a numeric time as the number of seconds since an
: 
     epoch, see the examples.

Value:

     'as.POSIXct' and 'as.POSIXlt' return an object of the appropriate
     class.  If 'tz' was specified, 'as.POSIXlt' will give an
     appropriate '"tzone"' attribute.

Note:

     If you want to extract specific aspects of a time (such as the day
     of the week) just convert it to class '"POSIXlt"' and extract the
     relevant component(s) of the list, or if you want a character
     representation (such as a named day of the week) use
     'format.POSIXlt' or 'format.POSIXct'.

     If a timezone is needed and that specified is invalid on your
     system, what happens is system-specific but it will probably be
     ignored.

See Also:

     DateTimeClasses for details of the classes; 'strptime' for
     conversion to and from character representations. 'Sys.timezone'
: 
     for details of the (system-specific) naming of time zones.

     locales for locale-specific aspects.

Examples:

     (z <- Sys.time())             # the current datetime, as class "POSIXct"
     unclass(z)                    # a large integer
     floor(unclass(z)/86400)       # the number of days since 1970-01-01 (UTC)
     (z <- as.POSIXlt(Sys.time())) # the current datetime, as class "POSIXlt"
     unlist(unclass(z))            # a list shown as a named vector
     
     ## suppose we have a time in seconds since 1960-01-01 00:00:00 GMT
     z <- 1472562988
     # ways to convert this
     as.POSIXct(z, origin="1960-01-01")                # local
     as.POSIXct(z, origin="1960-01-01", tz="GMT")      # in UTC
     as.POSIXct(z, origin=ISOdatetime(1960,1,1,0,0,0)) # local
     ISOdatetime(1960,1,1,0,0,0) + z                   # local
     
     ## SPSS dates (R-help 2006-02-16)
     z <- c(10485849600, 10477641600, 10561104000, 10562745600)
     as.Date(as.POSIXct(z, origin="1582-10-14", tz="GMT"))
     
:q
> 
> (1.299049e+09, origin = "1970-1-1")
Error: unexpected ',' in "(1.299049e+09,"
No suitable frames for recover()
> as.POSIXct(1.299049e+09, origin = "1970-1-1")
[1] "2011-03-02 06:56:40 PST"
> D = data.frame(a = 1:3, b = letters[1:3])
> D$foo = list("A", 2.4, Sys.Date())
> D
  a b   foo
1 1 a     A
2 2 b   2.4
3 3 c 15034
> class(D$foo)
[1] "list"
> D[[3]]
[[1]]
[1] "A"

[[2]]
[1] 2.4

[[3]]
[1] "2011-03-01"

> source("namespaces.R"); source("spreadsheet.R")
> D = data.frame(a = 1:3, b = letters[1:3])
> d = read.ods("../inst/sampleData/CellTypes.ods", header = FALSE)
Called from: FUN(X[[1L]], ...)
Browse[1]> c
> d
  V1   V2 NA         NA NA NA   NA                  NA     NA
1 23 0.23 23 2011-12-23 23 23 TRUE 2011-03-01 23:01:02 23.125
2 23 0.23 23 2011-12-23 23 23 TRUE 2011-03-01 23:01:02 23.125
3 23 0.23 23 2011-12-23 23 23 TRUE 2011-03-01 23:01:02 23.125
4 23 0.23 23 2011-12-23 23 23 TRUE 2011-03-01 23:01:02 23.125
5 23 0.23 23 2011-12-23 23 23 TRUE 2011-03-01 23:01:02 23.125
6 23 0.23 23 2011-12-23 23 23 TRUE 2011-03-01 23:01:02 23.125
7 23 0.23 23 2011-12-23 23 23 TRUE 2011-03-01 23:01:02 23.125
8 23 0.23 23 2011-12-23 23 23 TRUE 2011-03-01 23:01:02 23.125
9 23 0.23 23 2011-12-23 23 23 TRUE 2011-03-01 23:01:02 23.125
          NA
1     number
2 percentage
3   currency
4       date
5 scientific
6       text
7    boolean
8       time
9   fraction
> d = read.ods("../inst/sampleData/CellTypes.ods", header = FALSE)
Called from: FUN(X[[1L]], ...)
Browse[1]> tmp
[[1]]
[[1]]$`23`
[1] 23

[[1]]$`0.23`
[1] 0.23

[[1]]$`23`
[1] 23

[[1]]$`2011-12-23`
[1] "2011-12-23"

[[1]]$`23`
[1] 23

[[1]]$`23`
[1] 23

[[1]]$`TRUE`
[1] TRUE

[[1]]$PT23H01M02S
[1] "2011-03-01 23:01:02 PST"

[[1]]$`23.125`
[1] 23.125


[[2]]
[1] "number"     "percentage" "currency"   "date"       "scientific"
[6] "text"       "boolean"    "time"       "fraction"  

Browse[1]> tmp[[1]]
$`23`
[1] 23

$`0.23`
[1] 0.23

$`23`
[1] 23

$`2011-12-23`
[1] "2011-12-23"

$`23`
[1] 23

$`23`
[1] 23

$`TRUE`
[1] TRUE

$PT23H01M02S
[1] "2011-03-01 23:01:02 PST"

$`23.125`
[1] 23.125

Browse[1]> n
debug at spreadsheet.R#129: tmp = tmp[!sapply(tmp, is.null)]
Browse[2]> n
debug at spreadsheet.R#130: ans = as.data.frame(tmp, stringsAsFactors = stringsAsFactors)
Browse[2]> tmp
*** output flushed ***
Browse[2]> data.frame(tmp)
*** output flushed ***
Browse[2]> as.data.frame
function (x, row.names = NULL, optional = FALSE, ...) 
{
    if (is.null(x)) 
        return(as.data.frame(list()))
    UseMethod("as.data.frame")
}
<environment: namespace:base>
Browse[2]> ?as.data.frame
WARNING: terminal is not fully functional
-  (press RETURN)
as.data.frame               package:base               R Documentation

Coerce to a Data Frame

Description:

     Functions to check if an object is a data frame, or coerce it if
     possible.

Usage:

     as.data.frame(x, row.names = NULL, optional = FALSE, ...)
     
     ## S3 method for class 'character'
     as.data.frame(x, ...,
                   stringsAsFactors = default.stringsAsFactors())
     
     ## S3 method for class 'matrix'
     as.data.frame(x, row.names = NULL, optional = FALSE, ..., 
                   stringsAsFactors = default.stringsAsFactors())
     
     is.data.frame(x)
     
: 
Arguments:

       x: any R object.

row.names: 'NULL' or a character vector giving the row names for the
          data frame.  Missing values are not allowed.

optional: logical. If 'TRUE', setting row names and converting column
          names (to syntactic names: see 'make.names') is optional.

     ...: additional arguments to be passed to or from methods.

stringsAsFactors: logical: should the character vector be converted to
          a factor?

Details:

     'as.data.frame' is a generic function with many methods, and users
     and packages can supply further methods.

     If a list is supplied, each element is converted to a column in
     the data frame.  Similarly, each column of a matrix is converted
     separately.  This can be overridden if the object has a class
     which has a method for 'as.data.frame': two examples are matrices
: 
     of class '"model.matrix"' (which are included as a single column)
     and list objects of class '"POSIXlt"' which are coerced to class
     '"POSIXct"'.

     Arrays can be converted to data frames.  One-dimensional arrays
     are treated like vectors and two-dimensional arrays like matrices.
     Arrays with more than two dimensions are converted to matrices by
     'flattening' all dimensions after the first and creating suitable
     column labels.

     Character variables are converted to factor columns unless
     protected by 'I'.

     If a data frame is supplied, all classes preceding '"data.frame"'
     are stripped, and the row names are changed if that argument is
     supplied.

     If 'row.names = NULL', row names are constructed from the names or
     dimnames of 'x', otherwise are the integer sequence starting at
     one.  Few of the methods check for duplicated row names.  Names
     are removed from vector columns unless 'I'.

Value:
:
:q
Browse[2]> 
debug at spreadsheet.R#133: if (rowNames) {
    rownames(ans) = ans[, 1]
    ans = ans[, -1]
    varNames = varNames[-1]
}
Browse[2]> tmp
[[1]]
[[1]]$`23`
[1] 23

[[1]]$`0.23`
[1] 0.23

[[1]]$`23`
[1] 23

[[1]]$`2011-12-23`
[1] "2011-12-23"

[[1]]$`23`
[1] 23

[[1]]$`23`
[1] 23

[[1]]$`TRUE`
[1] TRUE

[[1]]$PT23H01M02S
[1] "2011-03-01 23:01:02 PST"

[[1]]$`23.125`
[1] 23.125


[[2]]
[1] "number"     "percentage" "currency"   "date"       "scientific"
[6] "text"       "boolean"    "time"       "fraction"  

Browse[2]> do.call(cbind, tmp)
            [,1]       [,2]        
23          23         "number"    
0.23        0.23       "percentage"
23          23         "currency"  
2011-12-23  15331      "date"      
23          23         "scientific"
23          23         "text"      
TRUE        TRUE       "boolean"   
PT23H01M02S 1299049262 "time"      
23.125      23.125     "fraction"  
Browse[2]> c
> source("namespaces.R"); source("spreadsheet.R")
> d = read.ods("../inst/sampleData/CellTypes.ods", header = FALSE)
Called from: FUN(X[[1L]], ...)
Browse[1]> c
> d
            [,1]       [,2]        
23          23         "number"    
0.23        0.23       "percentage"
23          23         "currency"  
2011-12-23  15331      "date"      
23          23         "scientific"
23          23         "text"      
TRUE        TRUE       "boolean"   
PT23H01M02S 1299049262 "time"      
23.125      23.125     "fraction"  
attr(,"names")
 [1] "V1" "V2" NA   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA  
[14] NA   NA   NA   NA   NA  
> d[8,1]
$PT23H01M02S
[1] "2011-03-01 23:01:02 PST"

> unname
function (obj, force = FALSE) 
{
    if (!is.null(names(obj))) 
        names(obj) <- NULL
    if (!is.null(dimnames(obj)) && (force || !is.data.frame(obj))) 
        dimnames(obj) <- NULL
    obj
}
<environment: namespace:base>
> source("namespaces.R"); source("spreadsheet.R")
> d = read.ods("../inst/sampleData/CellTypes.ods", header = FALSE)
Called from: FUN(X[[1L]], ...)
Browse[1]> c
> d
      [,1]       [,2]        
 [1,] 23         "number"    
 [2,] 0.23       "percentage"
 [3,] 23         "currency"  
 [4,] 15331      "date"      
 [5,] 23         "scientific"
 [6,] 23         "text"      
 [7,] TRUE       "boolean"   
 [8,] 1299049262 "time"      
 [9,] 23.125     "fraction"  
attr(,"names")
 [1] "V1" "V2" NA   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA  
[14] NA   NA   NA   NA   NA  
> source("namespaces.R"); source("spreadsheet.R")
> d = read.ods("../inst/sampleData/CellTypes.ods", header = FALSE)
Called from: FUN(X[[1L]], ...)
Browse[1]> n
debug at spreadsheet.R#129: tmp = tmp[!sapply(tmp, is.null)]
Browse[2]> 
debug at spreadsheet.R#131: ans = do.call(cbind, tmp)
Browse[2]> 
debug at spreadsheet.R#134: if (rowNames) {
    rownames(ans) = ans[, 1]
    ans = ans[, -1]
    varNames = varNames[-1]
}
Browse[2]> length(tmp)
[1] 2
Browse[2]> c
> source("namespaces.R"); source("spreadsheet.R")
> source("namespaces.R"); source("spreadsheet.R")
> d = read.ods("../inst/sampleData/CellTypes.ods", header = FALSE)
Called from: FUN(X[[1L]], ...)
Browse[1]> c
> d
 [1] V1   V2   <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA>
[14] <NA> <NA> <NA> <NA> <NA>
<0 rows> (or 0-length row.names)
> attributes(mtcars)
$names
 [1] "mpg"  "cyl"  "disp" "hp"   "drat" "wt"   "qsec" "vs"   "am"  
[10] "gear" "carb"

$row.names
 [1] "Mazda RX4"           "Mazda RX4 Wag"       "Datsun 710"         
 [4] "Hornet 4 Drive"      "Hornet Sportabout"   "Valiant"            
 [7] "Duster 360"          "Merc 240D"           "Merc 230"           
[10] "Merc 280"            "Merc 280C"           "Merc 450SE"         
[13] "Merc 450SL"          "Merc 450SLC"         "Cadillac Fleetwood" 
[16] "Lincoln Continental" "Chrysler Imperial"   "Fiat 128"           
[19] "Honda Civic"         "Toyota Corolla"      "Toyota Corona"      
[22] "Dodge Challenger"    "AMC Javelin"         "Camaro Z28"         
[25] "Pontiac Firebird"    "Fiat X1-9"           "Porsche 914-2"      
[28] "Lotus Europa"        "Ford Pantera L"      "Ferrari Dino"       
[31] "Maserati Bora"       "Volvo 142E"         

$class
[1] "data.frame"

> dim(d)
[1]  0 18
> d
 [1] V1   V2   <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA>
[14] <NA> <NA> <NA> <NA> <NA>
<0 rows> (or 0-length row.names)
> source("namespaces.R"); source("spreadsheet.R")
> d = read.ods("../inst/sampleData/CellTypes.ods", header = FALSE)
Called from: FUN(X[[1L]], ...)
Browse[1]> c
> d
*** output flushed ***
> source("namespaces.R"); source("spreadsheet.R")
> cbind
function (..., deparse.level = 1) 
.Internal(cbind(deparse.level, ...))
<environment: namespace:base>
> ?cbind
WARNING: terminal is not fully functional
-  (press RETURN)
cbind                   package:base                   R Documentation

Combine R Objects by Rows or Columns

Description:

     Take a sequence of vector, matrix or data frames arguments and
     combine by _c_olumns or _r_ows, respectively.  These are generic
     functions with methods for other R classes.

Usage:

     cbind(..., deparse.level = 1)
     rbind(..., deparse.level = 1)
     
Arguments:

     ...: vectors or matrices.  These can be given as named arguments.
          Other R objects will be coerced as appropriate: see sections
          'Details' and 'Value'.  (For the '"data.frame"' method of
          'cbind' these can be further arguments to 'data.frame' such
          as 'stringsAsFactors'.)

: 
deparse.level: integer controlling the construction of labels in the
          case of non-matrix-like arguments (for the default method):
          'deparse.level = 0' constructs no labels; the default,
          'deparse.level = 1 or 2' constructs labels from the argument
          names, see the 'Value' section below.

Details:

     The functions 'cbind' and 'rbind' are S3 generic, with methods for
     data frames.  The data frame method will be used if at least one
     argument is a data frame and the rest are vectors or matrices.
     There can be other methods; in particular, there is one for time
     series objects.  See the section on 'Dispatch' for how the method
     to be used is selected.

     In the default method, all the vectors/matrices must be atomic
     (see 'vector') or lists.  Expressions are not allowed.  Language
     objects (such as formulae and calls) and pairlists will be coerced
     to lists: other objects (such as names and external pointers) will
     be included as elements in a list result.  Any classes the inputs
     might have are discarded (in particular, factors are replaced by
     their internal codes).

     If there are several matrix arguments, they must all have the same
: 
     number of columns (or rows) and this will be the number of columns
     (or rows) of the result.  If all the arguments are vectors, the
     number of columns (rows) in the result is equal to the length of
     the longest vector.  Values in shorter arguments are recycled to
     achieve this length (with a 'warning' if they are recycled only
     _fractionally_).

     When the arguments consist of a mix of matrices and vectors the
     number of columns (rows) of the result is determined by the number
     of columns (rows) of the matrix arguments.  Any vectors have their
     values recycled or subsetted to achieve this length.

     For 'cbind' ('rbind'), vectors of zero length (including 'NULL')
     are ignored unless the result would have zero rows (columns), for
     S compatibility.  (Zero-extent matrices do not occur in S3 and are
     not ignored in R.)

Value:

     For the default method, a matrix combining the '...' arguments
     column-wise or row-wise.  (Exception: if there are no inputs or
     all the inputs are 'NULL', the value is 'NULL'.)

     The type of a matrix result determined from the highest type of
: 
     any of the inputs in the hierarchy raw < logical < integer < real
     < complex < character < list .

     For 'cbind' ('rbind') the column (row) names are taken from the
     'colnames' ('rownames') of the arguments if these are matrix-like.
     Otherwise from the names of the arguments or where those are not
     supplied and 'deparse.level > 0', by deparsing the expressions
     given, for 'deparse.level = 1' only if that gives a sensible name
     (a 'symbol', see 'is.symbol').

     For 'cbind' row names are taken from the first argument with
     appropriate names: rownames for a matrix, or names for a vector of
     length the number of rows of the result.

     For 'rbind' column names are taken from the first argument with
     appropriate names: colnames for a matrix, or names for a vector of
     length the number of columns of the result.

Data frame methods:

     The 'cbind' data frame method is just a wrapper for
     'data.frame(..., check.names = FALSE)'.  This means that it will
     split matrix columns in data frame arguments, and convert
     character columns to factors unless 'stringsAsFactors = FALSE' is
: 
     specified.

     The 'rbind' data frame method first drops all zero-column and
     zero-row arguments.  (If that leaves none, it returns the first
     argument with columns otherwise a zero-column zero-row data
     frame.)  It then takes the classes of the columns from the first
     data frame, and matches columns by name (rather than by position).
     Factors have their levels expanded as necessary (in the order of
     the levels of the levelsets of the factors encountered) and the
     result is an ordered factor if and only if all the components were
     ordered factors.  (The last point differs from S-PLUS.)  Old-style
     categories (integer vectors with levels) are promoted to factors.

Dispatch:

     The method dispatching is _not_ done via 'UseMethod()', but by
     C-internal dispatching.  Therefore there is no need for, e.g.,
     'rbind.default'.

     The dispatch algorithm is described in the source file
     ('.../src/main/bind.c') as

       1. For each argument we get the list of possible class
          memberships from the class attribute.
: 

       2. We inspect each class in turn to see if there is an
          applicable method.

       3. If we find an applicable method we make sure that it is
          identical to any method determined for prior arguments.  If
          it is identical, we proceed, otherwise we immediately drop
          through to the default code.

     If you want to combine other objects with data frames, it may be
     necessary to coerce them to data frames first.  (Note that this
     algorithm can result in calling the data frame method if all the
     arguments are either data frames or vectors, and this will result
     in the coercion of character vectors to factors.)

References:

     Becker, R. A., Chambers, J. M. and Wilks, A. R. (1988) _The New S
     Language_.  Wadsworth & Brooks/Cole.

See Also:

     'c' to combine vectors (and lists) as vectors, 'data.frame' to
     combine vectors and matrices as a data frame.
: 

Examples:

     m <- cbind(1, 1:7) # the '1' (= shorter vector) is recycled
     m
     m <- cbind(m, 8:14)[, c(1, 3, 2)] # insert a column
     m
     cbind(1:7, diag(3))# vector is subset -> warning
     
     cbind(0, rbind(1, 1:3))
     cbind(I=0, X=rbind(a=1, b=1:3))  # use some names
     xx <- data.frame(I=rep(0,2))
     cbind(xx, X=rbind(a=1, b=1:3))   # named differently
     
     cbind(0, matrix(1, nrow=0, ncol=4))#> Warning (making sense)
     dim(cbind(0, matrix(1, nrow=2, ncol=0)))#-> 2 x 1
     
     ## deparse.level
     dd <- 10
     rbind(1:4, c=2, "a++" = 10, dd, deparse.level=0)# middle 2 rownames
     rbind(1:4, c=2, "a++" = 10, dd, deparse.level=1)# 3 rownames (default)
     rbind(1:4, c=2, "a++" = 10, dd, deparse.level=2)# 4 rownames
     
:
: 
(END) q
> 
> source("namespaces.R"); source("spreadsheet.R")
> d = read.ods("../inst/sampleData/CellTypes.ods", header = FALSE)
Called from: FUN(X[[1L]], ...)
Browse[1]> c
> d
      [,1]       [,2]        
 [1,] 23         "number"    
 [2,] 0.23       "percentage"
 [3,] 23         "currency"  
 [4,] 15331      "date"      
 [5,] 23         "scientific"
 [6,] 23         "text"      
 [7,] TRUE       "boolean"   
 [8,] 1299049262 "time"      
 [9,] 23.125     "fraction"  
attr(,"names")
 [1] "V1" "V2" NA   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA  
[14] NA   NA   NA   NA   NA  
> source("namespaces.R"); source("spreadsheet.R")
> d = read.ods("../inst/sampleData/CellTypes.ods", header = FALSE)
Called from: FUN(X[[1L]], ...)
Browse[1]> ans
      [,1]       [,2]        
 [1,] 23         "number"    
 [2,] 0.23       "percentage"
 [3,] 23         "currency"  
 [4,] 15331      "date"      
 [5,] 23         "scientific"
 [6,] 23         "text"      
 [7,] TRUE       "boolean"   
 [8,] 1299049262 "time"      
 [9,] 23.125     "fraction"  
Browse[1]> class(ans[[1]])
[1] "numeric"
Browse[1]> class(ans)
*** output flushed ***
Browse[1]> tt = data.frame()
Browse[1]> for(i in seq(along = tmp)) tt[[i]] = tmp[[i]]
Error in `[[<-.data.frame`(`*tmp*`, i, value = list(23, 0.23, 23, 15331,  : 
  replacement has 9 rows, data has 0

Enter a frame number, or 0 to exit   

1: read.ods("../inst/sampleData/CellTypes.ods", header = FALSE)
2: spreadsheet.R#21: lapply(tb, read.odsSheet, header = header, string
3: FUN(X[[1]], ...)
4: spreadsheet.R#139: `[[<-`(`*tmp*`, i, value = list(23, 0.23, 23, 15
5: spreadsheet.R#139: `[[<-.data.frame`(`*tmp*`, i, value = list(23, 0

Selection: 0
Browse[1]> tmp
[[1]]
[[1]][[1]]
[1] 23

[[1]][[2]]
[1] 0.23

[[1]][[3]]
[1] 23

[[1]][[4]]
[1] "2011-12-23"

[[1]][[5]]
[1] 23

[[1]][[6]]
[1] 23

[[1]][[7]]
[1] TRUE

[[1]][[8]]
[1] "2011-03-01 23:01:02 PST"

[[1]][[9]]
[1] 23.125


[[2]]
[1] "number"     "percentage" "currency"   "date"       "scientific"
[6] "text"       "boolean"    "time"       "fraction"  

Browse[1]> assign("tmp", tmp, globalenv())
Browse[1]> c
> source("namespaces.R"); source("spreadsheet.R")
> makeDataFrame(tmp)
  X1.length.cols..1...         V2
1                    1     number
2                    2 percentage
3                    3   currency
4                    4       date
5                    5 scientific
6                    6       text
7                    7    boolean
8                    8       time
9                    9   fraction
> source("namespaces.R"); source("spreadsheet.R")
> makeDataFrame(tmp)
  X1.length.cols..1...         V2
1                   23     number
2                 0.23 percentage
3                   23   currency
4                15331       date
5                   23 scientific
6                   23       text
7                 TRUE    boolean
8           1299049262       time
9               23.125   fraction
> a = makeDataFrame(tmp)
> a[[1]]
[[1]]
[1] 23

[[2]]
[1] 0.23

[[3]]
[1] 23

[[4]]
[1] "2011-12-23"

[[5]]
[1] 23

[[6]]
[1] 23

[[7]]
[1] TRUE

[[8]]
[1] "2011-03-01 23:01:02 PST"

[[9]]
[1] 23.125

> class(a[[1]][8])
[1] "list"
> a[[1]]
[[1]]
[1] 23

[[2]]
[1] 0.23

[[3]]
[1] 23

[[4]]
[1] "2011-12-23"

[[5]]
[1] 23

[[6]]
[1] 23

[[7]]
[1] TRUE

[[8]]
[1] "2011-03-01 23:01:02 PST"

[[9]]
[1] 23.125

> a[[1]][[8]]
[1] "2011-03-01 23:01:02 PST"
> class(a[[1]][[8]])
[1] "POSIXct" "POSIXt" 
> source("namespaces.R"); source("spreadsheet.R")
> d = read.ods("../inst/sampleData/CellTypes.ods", header = FALSE)
Called from: FUN(X[[1L]], ...)
Browse[1]> c
> d
  V1   V2 V3         V4 V5 V6   V7                  V8     V9
1 23 0.23 23 2011-12-23 23 23 TRUE 2011-03-01 23:01:02 23.125
2 23 0.23 23 2011-12-23 23 23 TRUE 2011-03-01 23:01:02 23.125
3 23 0.23 23 2011-12-23 23 23 TRUE 2011-03-01 23:01:02 23.125
4 23 0.23 23 2011-12-23 23 23 TRUE 2011-03-01 23:01:02 23.125
5 23 0.23 23 2011-12-23 23 23 TRUE 2011-03-01 23:01:02 23.125
6 23 0.23 23 2011-12-23 23 23 TRUE 2011-03-01 23:01:02 23.125
7 23 0.23 23 2011-12-23 23 23 TRUE 2011-03-01 23:01:02 23.125
8 23 0.23 23 2011-12-23 23 23 TRUE 2011-03-01 23:01:02 23.125
9 23 0.23 23 2011-12-23 23 23 TRUE 2011-03-01 23:01:02 23.125
         V10
1     number
2 percentage
3   currency
4       date
5 scientific
6       text
7    boolean
8       time
9   fraction
> source("namespaces.R"); source("spreadsheet.R")
> d = read.ods("../inst/sampleData/CellTypes.ods", header = FALSE)
Called from: FUN(X[[1L]], ...)
Browse[1]> c
> d
          V1         V2
1         23     number
2       0.23 percentage
3         23   currency
4      15331       date
5         23 scientific
6         23       text
7       TRUE    boolean
8 1299049262       time
9     23.125   fraction
> source("namespaces.R"); source("spreadsheet.R")
> source("namespaces.R"); source("spreadsheet.R")
> library(codetools)
> findGlobals(convertColumn)
 [1] "{"                "="                ">"               
 [4] "all"              "as"               "convertCellValue"
 [7] "getColType"       "if"               "is.character"    
[10] "is.function"      "is.na"            "is.null"         
[13] "length"           "mapply"           "return"          
[16] "unique"           "unlist"           "unname"          
> findGlobals(convertColumn, FALSE)
*** output flushed ***
> source("namespaces.R"); source("spreadsheet.R")
> d = read.ods("../inst/sampleData/CellTypes.ods", header = FALSE)
> d
          V1         V2
1         23     number
2       0.23 percentage
3         23   currency
4      15331       date
5         23 scientific
6         23       text
7       TRUE    boolean
8 1299049262       time
9     23.125   fraction
> d[[1]]
*** output flushed ***
> d = read.ods("../inst/sampleData/CellTypes.ods", header = FALSE)
> d = read.ods("../inst/sampleData/CellTypes.ods", header = TRUE)
> names(d)
[1] "Value" "Type" 
> d
       Value       Type
1         23     number
2       0.23 percentage
3         23   currency
4      15331       date
5         23 scientific
6         23       text
7       TRUE    boolean
8 1299049262       time
9     23.125   fraction
> doc = xmlParse(zipArchive("../inst/sampleData/WordTable.odt")[["content.xml"]])
> source("wordproc.R")
> getTables(doc)
> print(getTables(doc))
*** output flushed ***
> length(getTables(doc))
[1] 2
> tt = getTables(doc)
> tt
*** output flushed ***
> s = zipArchive("../inst/sampleData/CellTypes.ods")
> names(s)
 [1] "mimetype"                               
 [2] "Configurations2/statusbar/"             
 [3] "Configurations2/accelerator/current.xml"
 [4] "Configurations2/floater/"               
 [5] "Configurations2/popupmenu/"             
 [6] "Configurations2/progressbar/"           
 [7] "Configurations2/toolpanel/"             
 [8] "Configurations2/menubar/"               
 [9] "Configurations2/toolbar/"               
[10] "Configurations2/images/Bitmaps/"        
[11] "content.xml"                            
[12] "styles.xml"                             
[13] "meta.xml"                               
[14] "Thumbnails/thumbnail.png"               
[15] "settings.xml"                           
[16] "META-INF/manifest.xml"                  
> s[["meta.xml"]]
[1] "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<office:document-meta xmlns:office=\"urn:oasis:names:tc:opendocument:xmlns:office:1.0\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" xmlns:dc=\"http://purl.org/dc/elements/1.1/\" xmlns:meta=\"urn:oasis:names:tc:opendocument:xmlns:meta:1.0\" xmlns:ooo=\"http://openoffice.org/2004/office\" xmlns:grddl=\"http://www.w3.org/2003/g/data-view#\" office:version=\"1.2\" grddl:transformation=\"http://docs.oasis-open.org/office/1.2/xslt/odf2rdf.xsl\"><office:meta><meta:initial-creator>Deborah Nolan</meta:initial-creator><meta:creation-date>2011-03-01T09:47:11</meta:creation-date><dc:date>2011-03-01T16:55:21</dc:date><dc:creator>Deborah Nolan</dc:creator><meta:editing-duration>PT7H8M10S</meta:editing-duration><meta:editing-cycles>5</meta:editing-cycles><meta:generator>OpenOffice.org/3.3$Unix OpenOffice.org_project/330m20$Build-9567</meta:generator><meta:document-statistic meta:table-count=\"3\" meta:cell-count=\"20\" meta:object-count=\"0\"/></office:meta></office:document-meta>"
> source("classes.R"); source("meta.R")
Error in source("meta.R") : meta.R:23:13: unexpected 'function'
22: setMethod("creationTime", "OODocument"
23:             function
                ^

Enter a frame number, or 0 to exit   

1: source("meta.R")
2: source("meta.R")

Selection: 0
> source("classes.R"); source("meta.R")
> creator("../inst/sampleData/WordTable.odt")
  C-c C-c

Enter a frame number, or 0 to exit   

  1: creator("../inst/sampleData/WordTable.odt")
  2: creator("../inst/sampleData/WordTable.odt")
  3: meta.R#18: creator(ooDoc(doc))
  4: meta.R#18: creator(ooDoc(doc))
  5: meta.R#18: creator(ooDoc(doc))
  6: meta.R#18: creator(ooDoc(doc))
  7: meta.R#18: creator(ooDoc(doc))
  8: meta.R#18: creator(ooDoc(doc))
  9: meta.R#18: creator(ooDoc(doc))
 10: meta.R#18: creator(ooDoc(doc))
 11: meta.R#18: creator(ooDoc(doc))
 12: meta.R#18: creator(ooDoc(doc))
 13: meta.R#18: creator(ooDoc(doc))
 14: meta.R#18: creator(ooDoc(doc))
 15: meta.R#18: creator(ooDoc(doc))
 16: meta.R#18: creator(ooDoc(doc))
 17: meta.R#18: creator(ooDoc(doc))
 18: meta.R#18: creator(ooDoc(doc))
 19: meta.R#18: creator(ooDoc(doc))
 20: meta.R#18: creator(ooDoc(doc))
 21: meta.R#18: creator(ooDoc(doc))
 22: meta.R#18: creator(ooDoc(doc))
 23: meta.R#18: creator(ooDoc(doc))
 24: meta.R#18: creator(ooDoc(doc))
 25: meta.R#18: creator(ooDoc(doc))
 26: meta.R#18: creator(ooDoc(doc))
 27: meta.R#18: creator(ooDoc(doc))
 28: meta.R#18: creator(ooDoc(doc))
 29: meta.R#18: creator(ooDoc(doc))
 30: meta.R#18: creator(ooDoc(doc))
 31: meta.R#18: creator(ooDoc(doc))
 32: meta.R#18: creator(ooDoc(doc))
 33: meta.R#18: creator(ooDoc(doc))
 34: meta.R#18: creator(ooDoc(doc))
 35: meta.R#18: creator(ooDoc(doc))
 36: meta.R#18: creator(ooDoc(doc))
 37: meta.R#18: creator(ooDoc(doc))
 38: meta.R#18: creator(ooDoc(doc))
 39: meta.R#18: creator(ooDoc(doc))
 40: meta.R#18: creator(ooDoc(doc))
 41: meta.R#18: creator(ooDoc(doc))
 42: meta.R#18: creator(ooDoc(doc))
 43: meta.R#18: creator(ooDoc(doc))
 44: meta.R#18: creator(ooDoc(doc))
 45: meta.R#18: creator(ooDoc(doc))
 46: meta.R#18: creator(ooDoc(doc))
 47: meta.R#18: creator(ooDoc(doc))
 48: meta.R#18: creator(ooDoc(doc))
 49: meta.R#18: creator(ooDoc(doc))
 50: meta.R#18: creator(ooDoc(doc))
 51: meta.R#18: creator(ooDoc(doc))
 52: meta.R#18: creator(ooDoc(doc))
 53: meta.R#18: creator(ooDoc(doc))
 54: meta.R#18: creator(ooDoc(doc))
 55: meta.R#18: creator(ooDoc(doc))
 56: meta.R#18: creator(ooDoc(doc))
 57: meta.R#18: creator(ooDoc(doc))
 58: meta.R#18: creator(ooDoc(doc))
 59: meta.R#18: creator(ooDoc(doc))
 60: meta.R#18: creator(ooDoc(doc))
 61: meta.R#18: creator(ooDoc(doc))
 62: meta.R#18: creator(ooDoc(doc))
 63: meta.R#18: creator(ooDoc(doc))
 64: meta.R#18: creator(ooDoc(doc))
 65: meta.R#18: creator(ooDoc(doc))
 66: meta.R#18: creator(ooDoc(doc))
 67: meta.R#18: creator(ooDoc(doc))
 68: meta.R#18: creator(ooDoc(doc))
 69: meta.R#18: creator(ooDoc(doc))
 70: meta.R#18: creator(ooDoc(doc))
 71: meta.R#18: creator(ooDoc(doc))
 72: meta.R#18: creator(ooDoc(doc))
 73: meta.R#18: creator(ooDoc(doc))
 74: meta.R#18: creator(ooDoc(doc))
 75: meta.R#18: creator(ooDoc(doc))
 76: meta.R#18: creator(ooDoc(doc))
 77: meta.R#18: creator(ooDoc(doc))
 78: meta.R#18: creator(ooDoc(doc))
 79: meta.R#18: creator(ooDoc(doc))
 80: meta.R#18: creator(ooDoc(doc))
 81: meta.R#18: creator(ooDoc(doc))
 82: meta.R#18: creator(ooDoc(doc))
 83: meta.R#18: creator(ooDoc(doc))
 84: meta.R#18: creator(ooDoc(doc))
 85: meta.R#18: creator(ooDoc(doc))
 86: meta.R#18: creator(ooDoc(doc))
 87: meta.R#18: creator(ooDoc(doc))
 88: meta.R#18: creator(ooDoc(doc))
 89: meta.R#18: creator(ooDoc(doc))
 90: meta.R#18: creator(ooDoc(doc))
 91: meta.R#18: creator(ooDoc(doc))
 92: meta.R#18: creator(ooDoc(doc))
 93: meta.R#18: creator(ooDoc(doc))
 94: meta.R#18: creator(ooDoc(doc))
 95: meta.R#18: creator(ooDoc(doc))
 96: meta.R#18: creator(ooDoc(doc))
 97: meta.R#18: creator(ooDoc(doc))
 98: meta.R#18: creator(ooDoc(doc))
 99: meta.R#18: creator(ooDoc(doc))
100: meta.R#18: creator(ooDoc(doc))
101: meta.R#18: creator(ooDoc(doc))
102: meta.R#18: creator(ooDoc(doc))
103: meta.R#18: creator(ooDoc(doc))
104: meta.R#18: creator(ooDoc(doc))
105: meta.R#18: creator(ooDoc(doc))
106: meta.R#18: creator(ooDoc(doc))
107: meta.R#18: creator(ooDoc(doc))
108: meta.R#18: creator(ooDoc(doc))
109: meta.R#18: creator(ooDoc(doc))
110: meta.R#18: creator(ooDoc(doc))
111: meta.R#18: creator(ooDoc(doc))
112: meta.R#18: creator(ooDoc(doc))
113: meta.R#18: creator(ooDoc(doc))
114: meta.R#18: creator(ooDoc(doc))
115: meta.R#18: creator(ooDoc(doc))
116: meta.R#18: creator(ooDoc(doc))
117: meta.R#18: creator(ooDoc(doc))
118: meta.R#18: creator(ooDoc(doc))
119: meta.R#18: creator(ooDoc(doc))
120: meta.R#18: creator(ooDoc(doc))
121: meta.R#18: creator(ooDoc(doc))
122: meta.R#18: creator(ooDoc(doc))
123: meta.R#18: creator(ooDoc(doc))
124: meta.R#18: creator(ooDoc(doc))
125: meta.R#18: creator(ooDoc(doc))
126: meta.R#18: creator(ooDoc(doc))
127: meta.R#18: creator(ooDoc(doc))
128: meta.R#18: creator(ooDoc(doc))
129: meta.R#18: creator(ooDoc(doc))
130: meta.R#18: creator(ooDoc(doc))
131: meta.R#18: creator(ooDoc(doc))
132: meta.R#18: creator(ooDoc(doc))
133: meta.R#18: creator(ooDoc(doc))
134: meta.R#18: creator(ooDoc(doc))
135: meta.R#18: creator(ooDoc(doc))
136: meta.R#18: creator(ooDoc(doc))
137: meta.R#18: creator(ooDoc(doc))
138: meta.R#18: creator(ooDoc(doc))
139: meta.R#18: creator(ooDoc(doc))
140: meta.R#18: creator(ooDoc(doc))
141: meta.R#18: creator(ooDoc(doc))
142: meta.R#18: creator(ooDoc(doc))
143: meta.R#18: creator(ooDoc(doc))
144: meta.R#18: creator(ooDoc(doc))
145: meta.R#18: creator(ooDoc(doc))
146: meta.R#18: creator(ooDoc(doc))
147: meta.R#18: creator(ooDoc(doc))
148: meta.R#18: creator(ooDoc(doc))
149: meta.R#18: creator(ooDoc(doc))
150: meta.R#18: creator(ooDoc(doc))
151: meta.R#18: creator(ooDoc(doc))
152: meta.R#18: creator(ooDoc(doc))
153: meta.R#18: creator(ooDoc(doc))
154: meta.R#18: creator(ooDoc(doc))
155: meta.R#18: creator(ooDoc(doc))
156: meta.R#18: creator(ooDoc(doc))
157: meta.R#18: creator(ooDoc(doc))
158: meta.R#18: creator(ooDoc(doc))
159: meta.R#18: creator(ooDoc(doc))
160: meta.R#18: creator(ooDoc(doc))
161: meta.R#18: creator(ooDoc(doc))
162: meta.R#18: creator(ooDoc(doc))
163: meta.R#18: creator(ooDoc(doc))
164: meta.R#18: creator(ooDoc(doc))
165: meta.R#18: creator(ooDoc(doc))
166: meta.R#18: creator(ooDoc(doc))
167: meta.R#18: creator(ooDoc(doc))
168: meta.R#18: creator(ooDoc(doc))
169: meta.R#18: creator(ooDoc(doc))
170: meta.R#18: creator(ooDoc(doc))
171: meta.R#18: creator(ooDoc(doc))
172: meta.R#18: creator(ooDoc(doc))
173: meta.R#18: creator(ooDoc(doc))
174: meta.R#18: creator(ooDoc(doc))
175: meta.R#18: creator(ooDoc(doc))
176: meta.R#18: creator(ooDoc(doc))
177: meta.R#18: creator(ooDoc(doc))
178: meta.R#18: creator(ooDoc(doc))
179: meta.R#18: creator(ooDoc(doc))
180: meta.R#18: creator(ooDoc(doc))
181: meta.R#18: creator(ooDoc(doc))
182: meta.R#18: creator(ooDoc(doc))
183: meta.R#18: creator(ooDoc(doc))
184: meta.R#18: creator(ooDoc(doc))
185: meta.R#18: creator(ooDoc(doc))
186: meta.R#18: creator(ooDoc(doc))
187: meta.R#18: creator(ooDoc(doc))
188: meta.R#18: creator(ooDoc(doc))
189: meta.R#18: creator(ooDoc(doc))
190: meta.R#18: creator(ooDoc(doc))
191: meta.R#18: creator(ooDoc(doc))
192: meta.R#18: creator(ooDoc(doc))
193: meta.R#18: creator(ooDoc(doc))
194: meta.R#18: creator(ooDoc(doc))
195: meta.R#18: creator(ooDoc(doc))
196: meta.R#18: creator(ooDoc(doc))
197: meta.R#18: creator(ooDoc(doc))
198: meta.R#18: creator(ooDoc(doc))
199: meta.R#18: creator(ooDoc(doc))
200: meta.R#18: creator(ooDoc(doc))
201: meta.R#18: creator(ooDoc(doc))
202: meta.R#18: creator(ooDoc(doc))
203: meta.R#18: creator(ooDoc(doc))
204: meta.R#18: creator(ooDoc(doc))
205: meta.R#18: creator(ooDoc(doc))
206: meta.R#18: creator(ooDoc(doc))
207: meta.R#18: creator(ooDoc(doc))
208: meta.R#18: creator(ooDoc(doc))
209: meta.R#18: creator(ooDoc(doc))
210: meta.R#18: creator(ooDoc(doc))
211: meta.R#18: creator(ooDoc(doc))
212: meta.R#18: creator(ooDoc(doc))
213: meta.R#18: creator(ooDoc(doc))
214: meta.R#18: creator(ooDoc(doc))
215: meta.R#18: creator(ooDoc(doc))
216: meta.R#18: creator(ooDoc(doc))
217: meta.R#18: creator(ooDoc(doc))
218: meta.R#18: creator(ooDoc(doc))
219: meta.R#18: creator(ooDoc(doc))
220: meta.R#18: creator(ooDoc(doc))
221: meta.R#18: creator(ooDoc(doc))
222: meta.R#18: creator(ooDoc(doc))
223: meta.R#18: creator(ooDoc(doc))
224: meta.R#18: creator(ooDoc(doc))
225: meta.R#18: creator(ooDoc(doc))
226: meta.R#18: creator(ooDoc(doc))
227: meta.R#18: creator(ooDoc(doc))
228: meta.R#18: creator(ooDoc(doc))
229: meta.R#18: creator(ooDoc(doc))
230: meta.R#18: creator(ooDoc(doc))
231: meta.R#18: creator(ooDoc(doc))
232: meta.R#18: creator(ooDoc(doc))
233: meta.R#18: creator(ooDoc(doc))
234: meta.R#18: creator(ooDoc(doc))
235: meta.R#18: creator(ooDoc(doc))
236: meta.R#18: creator(ooDoc(doc))
237: meta.R#18: creator(ooDoc(doc))
238: meta.R#18: creator(ooDoc(doc))
239: meta.R#18: creator(ooDoc(doc))
240: meta.R#18: creator(ooDoc(doc))
241: meta.R#18: creator(ooDoc(doc))
242: meta.R#18: creator(ooDoc(doc))
243: meta.R#18: creator(ooDoc(doc))
244: meta.R#18: creator(ooDoc(doc))
245: meta.R#18: creator(ooDoc(doc))
246: meta.R#18: creator(ooDoc(doc))
247: meta.R#18: creator(ooDoc(doc))
248: meta.R#18: creator(ooDoc(doc))
249: meta.R#18: creator(ooDoc(doc))
250: meta.R#18: creator(ooDoc(doc))
251: meta.R#18: creator(ooDoc(doc))
252: meta.R#18: creator(ooDoc(doc))
253: meta.R#18: creator(ooDoc(doc))
254: meta.R#18: creator(ooDoc(doc))
255: meta.R#18: creator(ooDoc(doc))
256: meta.R#18: creator(ooDoc(doc))
257: meta.R#18: creator(ooDoc(doc))
258: meta.R#18: creator(ooDoc(doc))
259: meta.R#18: creator(ooDoc(doc))
260: meta.R#18: creator(ooDoc(doc))
261: meta.R#18: creator(ooDoc(doc))
262: meta.R#18: creator(ooDoc(doc))
263: meta.R#18: creator(ooDoc(doc))
264: meta.R#18: creator(ooDoc(doc))
265: meta.R#18: creator(ooDoc(doc))
266: meta.R#18: creator(ooDoc(doc))
267: meta.R#18: creator(ooDoc(doc))
268: meta.R#18: creator(ooDoc(doc))
269: meta.R#18: creator(ooDoc(doc))
270: meta.R#18: creator(ooDoc(doc))
271: meta.R#18: creator(ooDoc(doc))
272: meta.R#18: creator(ooDoc(doc))
273: meta.R#18: creator(ooDoc(doc))
274: meta.R#18: creator(ooDoc(doc))
275: meta.R#18: creator(ooDoc(doc))
276: meta.R#18: creator(ooDoc(doc))
277: meta.R#18: creator(ooDoc(doc))
278: meta.R#18: creator(ooDoc(doc))
279: meta.R#18: creator(ooDoc(doc))
280: meta.R#18: creator(ooDoc(doc))
281: meta.R#18: creator(ooDoc(doc))
282: meta.R#18: creator(ooDoc(doc))
283: meta.R#18: creator(ooDoc(doc))
284: meta.R#18: creator(ooDoc(doc))
285: meta.R#18: creator(ooDoc(doc))
286: meta.R#18: creator(ooDoc(doc))
287: meta.R#18: creator(ooDoc(doc))
288: meta.R#18: creator(ooDoc(doc))
289: meta.R#18: creator(ooDoc(doc))
290: meta.R#18: creator(ooDoc(doc))
291: meta.R#18: creator(ooDoc(doc))
292: meta.R#18: creator(ooDoc(doc))
293: meta.R#18: creator(ooDoc(doc))
294: meta.R#18: creator(ooDoc(doc))
295: meta.R#18: creator(ooDoc(doc))
296: meta.R#18: creator(ooDoc(doc))
297: meta.R#18: creator(ooDoc(doc))
298: meta.R#18: creator(ooDoc(doc))
299: meta.R#18: creator(ooDoc(doc))
300: meta.R#18: creator(ooDoc(doc))
301: meta.R#18: creator(ooDoc(doc))
302: meta.R#18: creator(ooDoc(doc))
303: meta.R#18: creator(ooDoc(doc))
304: meta.R#18: creator(ooDoc(doc))
305: meta.R#18: creator(ooDoc(doc))
306: meta.R#18: creator(ooDoc(doc))
307: meta.R#18: creator(ooDoc(doc))
308: meta.R#18: creator(ooDoc(doc))
309: meta.R#18: creator(ooDoc(doc))
310: meta.R#18: creator(ooDoc(doc))
311: meta.R#18: creator(ooDoc(doc))
312: meta.R#18: creator(ooDoc(doc))
313: meta.R#18: creator(ooDoc(doc))
314: meta.R#18: creator(ooDoc(doc))
315: meta.R#18: creator(ooDoc(doc))
316: meta.R#18: creator(ooDoc(doc))
317: meta.R#18: creator(ooDoc(doc))
318: meta.R#18: creator(ooDoc(doc))
319: meta.R#18: creator(ooDoc(doc))
320: meta.R#18: creator(ooDoc(doc))
321: meta.R#18: creator(ooDoc(doc))
322: meta.R#18: creator(ooDoc(doc))
323: meta.R#18: creator(ooDoc(doc))
324: meta.R#18: creator(ooDoc(doc))
325: meta.R#18: creator(ooDoc(doc))
326: meta.R#18: creator(ooDoc(doc))
327: meta.R#18: creator(ooDoc(doc))
328: meta.R#18: creator(ooDoc(doc))
329: meta.R#18: creator(ooDoc(doc))
330: meta.R#18: creator(ooDoc(doc))
331: meta.R#18: creator(ooDoc(doc))
332: meta.R#18: creator(ooDoc(doc))
333: meta.R#18: creator(ooDoc(doc))
334: meta.R#18: creator(ooDoc(doc))
335: meta.R#18: creator(ooDoc(doc))
336: meta.R#18: creator(ooDoc(doc))
337: meta.R#18: creator(ooDoc(doc))
338: meta.R#18: creator(ooDoc(doc))
339: meta.R#18: creator(ooDoc(doc))
340: meta.R#18: creator(ooDoc(doc))
341: meta.R#18: creator(ooDoc(doc))
342: meta.R#18: creator(ooDoc(doc))
343: meta.R#18: creator(ooDoc(doc))
344: meta.R#18: creator(ooDoc(doc))
345: meta.R#18: creator(ooDoc(doc))
346: meta.R#18: creator(ooDoc(doc))
347: meta.R#18: creator(ooDoc(doc))
348: meta.R#18: creator(ooDoc(doc))
349: meta.R#18: creator(ooDoc(doc))
350: meta.R#18: creator(ooDoc(doc))
351: meta.R#18: creator(ooDoc(doc))
352: meta.R#18: creator(ooDoc(doc))
353: meta.R#18: creator(ooDoc(doc))
354: meta.R#18: creator(ooDoc(doc))
355: meta.R#18: creator(ooDoc(doc))
356: meta.R#18: creator(ooDoc(doc))
357: meta.R#18: creator(ooDoc(doc))
358: meta.R#18: creator(ooDoc(doc))
359: meta.R#18: creator(ooDoc(doc))
360: meta.R#18: creator(ooDoc(doc))
361: meta.R#18: creator(ooDoc(doc))
362: meta.R#18: creator(ooDoc(doc))
363: meta.R#18: creator(ooDoc(doc))
364: meta.R#18: creator(ooDoc(doc))
365: meta.R#18: creator(ooDoc(doc))
366: meta.R#18: creator(ooDoc(doc))
367: meta.R#18: creator(ooDoc(doc))
368: meta.R#18: creator(ooDoc(doc))
369: meta.R#18: creator(ooDoc(doc))
370: meta.R#18: creator(ooDoc(doc))
371: meta.R#18: creator(ooDoc(doc))
372: meta.R#18: creator(ooDoc(doc))
373: meta.R#18: creator(ooDoc(doc))
374: meta.R#18: creator(ooDoc(doc))
375: meta.R#18: creator(ooDoc(doc))
376: meta.R#18: creator(ooDoc(doc))
377: meta.R#18: creator(ooDoc(doc))
378: meta.R#18: creator(ooDoc(doc))
379: meta.R#18: creator(ooDoc(doc))
380: meta.R#18: creator(ooDoc(doc))
381: meta.R#18: creator(ooDoc(doc))
382: meta.R#18: creator(ooDoc(doc))
383: meta.R#18: creator(ooDoc(doc))
384: meta.R#18: creator(ooDoc(doc))
385: meta.R#18: creator(ooDoc(doc))
386: meta.R#18: creator(ooDoc(doc))
387: meta.R#18: creator(ooDoc(doc))
388: meta.R#18: creator(ooDoc(doc))
389: meta.R#18: creator(ooDoc(doc))
390: meta.R#18: creator(ooDoc(doc))
391: meta.R#18: creator(ooDoc(doc))
392: meta.R#18: creator(ooDoc(doc))
393: meta.R#18: creator(ooDoc(doc))
394: meta.R#18: creator(ooDoc(doc))
395: meta.R#18: creator(ooDoc(doc))
396: meta.R#18: creator(ooDoc(doc))
397: meta.R#18: creator(ooDoc(doc))
398: meta.R#18: creator(ooDoc(doc))
399: meta.R#18: creator(ooDoc(doc))
400: meta.R#18: creator(ooDoc(doc))
401: meta.R#18: creator(ooDoc(doc))
402: meta.R#18: creator(ooDoc(doc))
403: meta.R#18: creator(ooDoc(doc))
404: meta.R#18: creator(ooDoc(doc))
405: meta.R#18: creator(ooDoc(doc))
406: meta.R#18: creator(ooDoc(doc))
407: meta.R#18: creator(ooDoc(doc))
408: meta.R#18: creator(ooDoc(doc))
409: meta.R#18: creator(ooDoc(doc))
410: meta.R#18: creator(ooDoc(doc))
411: meta.R#18: creator(ooDoc(doc))
412: meta.R#18: creator(ooDoc(doc))
413: meta.R#18: creator(ooDoc(doc))
414: meta.R#18: creator(ooDoc(doc))
415: meta.R#18: creator(ooDoc(doc))
416: meta.R#18: creator(ooDoc(doc))
417: meta.R#18: creator(ooDoc(doc))
418: meta.R#18: creator(ooDoc(doc))
419: meta.R#18: creator(ooDoc(doc))
420: meta.R#18: creator(ooDoc(doc))
421: meta.R#18: creator(ooDoc(doc))
422: meta.R#18: creator(ooDoc(doc))
423: meta.R#18: creator(ooDoc(doc))
424: meta.R#18: creator(ooDoc(doc))
425: meta.R#18: creator(ooDoc(doc))
426: meta.R#18: creator(ooDoc(doc))
427: meta.R#18: creator(ooDoc(doc))
428: meta.R#18: creator(ooDoc(doc))
429: meta.R#18: creator(ooDoc(doc))
430: meta.R#18: creator(ooDoc(doc))
431: meta.R#18: creator(ooDoc(doc))
432: meta.R#18: creator(ooDoc(doc))
433: meta.R#18: creator(ooDoc(doc))
434: meta.R#18: creator(ooDoc(doc))
435: meta.R#18: creator(ooDoc(doc))
436: meta.R#18: creator(ooDoc(doc))
437: meta.R#18: creator(ooDoc(doc))
438: meta.R#18: creator(ooDoc(doc))
439: meta.R#18: creator(ooDoc(doc))
440: meta.R#18: creator(ooDoc(doc))
441: meta.R#18: creator(ooDoc(doc))
442: meta.R#18: creator(ooDoc(doc))
443: meta.R#18: creator(ooDoc(doc))
444: meta.R#18: creator(ooDoc(doc))
445: meta.R#18: creator(ooDoc(doc))
446: meta.R#18: creator(ooDoc(doc))
447: meta.R#18: creator(ooDoc(doc))
448: meta.R#18: creator(ooDoc(doc))
449: meta.R#18: creator(ooDoc(doc))
450: meta.R#18: creator(ooDoc(doc))
451: meta.R#18: creator(ooDoc(doc))
452: meta.R#18: creator(ooDoc(doc))
453: meta.R#18: creator(ooDoc(doc))
454: meta.R#18: creator(ooDoc(doc))
455: meta.R#18: creator(ooDoc(doc))
456: meta.R#18: creator(ooDoc(doc))
457: meta.R#18: creator(ooDoc(doc))
458: meta.R#18: creator(ooDoc(doc))
459: meta.R#18: creator(ooDoc(doc))
460: meta.R#18: creator(ooDoc(doc))
461: meta.R#18: creator(ooDoc(doc))
462: meta.R#18: creator(ooDoc(doc))
463: meta.R#18: creator(ooDoc(doc))
464: meta.R#18: creator(ooDoc(doc))
465: meta.R#18: creator(ooDoc(doc))
466: meta.R#18: creator(ooDoc(doc))
467: meta.R#18: creator(ooDoc(doc))
468: meta.R#18: creator(ooDoc(doc))
469: meta.R#18: creator(ooDoc(doc))
470: meta.R#18: creator(ooDoc(doc))
471: meta.R#18: creator(ooDoc(doc))
472: meta.R#18: creator(ooDoc(doc))
473: meta.R#18: creator(ooDoc(doc))
474: meta.R#18: creator(ooDoc(doc))
475: meta.R#18: creator(ooDoc(doc))
476: meta.R#18: creator(ooDoc(doc))
477: meta.R#18: creator(ooDoc(doc))
478: meta.R#18: creator(ooDoc(doc))
479: meta.R#18: creator(ooDoc(doc))
480: meta.R#18: creator(ooDoc(doc))
481: meta.R#18: creator(ooDoc(doc))
482: meta.R#18: creator(ooDoc(doc))
483: meta.R#18: creator(ooDoc(doc))
484: meta.R#18: creator(ooDoc(doc))
485: meta.R#18: creator(ooDoc(doc))
486: meta.R#18: creator(ooDoc(doc))
487: meta.R#18: creator(ooDoc(doc))
488: meta.R#18: creator(ooDoc(doc))
489: meta.R#18: creator(ooDoc(doc))
490: meta.R#18: creator(ooDoc(doc))
491: meta.R#18: creator(ooDoc(doc))
492: meta.R#18: creator(ooDoc(doc))
493: meta.R#18: creator(ooDoc(doc))
494: meta.R#18: creator(ooDoc(doc))
495: meta.R#18: creator(ooDoc(doc))
496: meta.R#18: creator(ooDoc(doc))
497: meta.R#18: creator(ooDoc(doc))
498: meta.R#18: creator(ooDoc(doc))
499: meta.R#18: creator(ooDoc(doc))
500: meta.R#18: creator(ooDoc(doc))
501: meta.R#18: creator(ooDoc(doc))
502: meta.R#18: creator(ooDoc(doc))
503: meta.R#18: creator(ooDoc(doc))
504: meta.R#18: creator(ooDoc(doc))
505: meta.R#18: creator(ooDoc(doc))
506: meta.R#18: creator(ooDoc(doc))
507: meta.R#18: creator(ooDoc(doc))
508: meta.R#18: creator(ooDoc(doc))
509: meta.R#18: creator(ooDoc(doc))
510: meta.R#18: creator(ooDoc(doc))
511: meta.R#18: creator(ooDoc(doc))
512: meta.R#18: creator(ooDoc(doc))
513: meta.R#18: creator(ooDoc(doc))
514: meta.R#18: creator(ooDoc(doc))
515: meta.R#18: creator(ooDoc(doc))
516: meta.R#18: creator(ooDoc(doc))
517: meta.R#18: creator(ooDoc(doc))
518: meta.R#18: creator(ooDoc(doc))
519: meta.R#18: creator(ooDoc(doc))
520: meta.R#18: creator(ooDoc(doc))
521: meta.R#18: creator(ooDoc(doc))
522: meta.R#18: creator(ooDoc(doc))
523: meta.R#18: creator(ooDoc(doc))
524: meta.R#18: creator(ooDoc(doc))
525: meta.R#18: creator(ooDoc(doc))
526: meta.R#18: creator(ooDoc(doc))
527: meta.R#18: creator(ooDoc(doc))
528: meta.R#18: creator(ooDoc(doc))
529: meta.R#18: creator(ooDoc(doc))
530: meta.R#18: creator(ooDoc(doc))
531: meta.R#18: creator(ooDoc(doc))
532: meta.R#18: creator(ooDoc(doc))
533: meta.R#18: creator(ooDoc(doc))
534: meta.R#18: creator(ooDoc(doc))
535: meta.R#18: creator(ooDoc(doc))
536: meta.R#18: creator(ooDoc(doc))
537: meta.R#18: creator(ooDoc(doc))
538: meta.R#18: creator(ooDoc(doc))
539: meta.R#18: creator(ooDoc(doc))
540: meta.R#18: creator(ooDoc(doc))
541: meta.R#18: creator(ooDoc(doc))
542: meta.R#18: creator(ooDoc(doc))
543: meta.R#18: creator(ooDoc(doc))
544: meta.R#18: creator(ooDoc(doc))
545: meta.R#18: creator(ooDoc(doc))
546: meta.R#18: creator(ooDoc(doc))
547: meta.R#18: creator(ooDoc(doc))
548: meta.R#18: creator(ooDoc(doc))
549: meta.R#18: creator(ooDoc(doc))
550: meta.R#18: creator(ooDoc(doc))
551: meta.R#18: creator(ooDoc(doc))
552: meta.R#18: creator(ooDoc(doc))
553: meta.R#18: creator(ooDoc(doc))
554: meta.R#18: creator(ooDoc(doc))
555: meta.R#18: creator(ooDoc(doc))
556: meta.R#18: creator(ooDoc(doc))
557: meta.R#18: creator(ooDoc(doc))
558: meta.R#18: creator(ooDoc(doc))
559: meta.R#18: creator(ooDoc(doc))
560: meta.R#18: creator(ooDoc(doc))
561: meta.R#18: creator(ooDoc(doc))
562: meta.R#18: creator(ooDoc(doc))
563: meta.R#18: creator(ooDoc(doc))
564: meta.R#18: creator(ooDoc(doc))
565: meta.R#18: creator(ooDoc(doc))
566: meta.R#18: creator(ooDoc(doc))
567: meta.R#18: creator(ooDoc(doc))
568: meta.R#18: creator(ooDoc(doc))
569: meta.R#18: creator(ooDoc(doc))
570: meta.R#18: creator(ooDoc(doc))
571: meta.R#18: creator(ooDoc(doc))
572: meta.R#18: creator(ooDoc(doc))
573: meta.R#18: creator(ooDoc(doc))
574: meta.R#18: creator(ooDoc(doc))
575: meta.R#18: creator(ooDoc(doc))
576: meta.R#18: creator(ooDoc(doc))
577: meta.R#18: creator(ooDoc(doc))
578: meta.R#18: creator(ooDoc(doc))
579: meta.R#18: creator(ooDoc(doc))
580: meta.R#18: ooDoc(doc)
581: classes.R#10: zipArchive(file)
582: getZipInfo(filename)
583: lapply(seq(length = info$pglobal_info@number_entry), function(i) {
584: FUN(1:21[[17]], ...)
585: unzGoToNextFile(h)
586: as(file, "unzContentRef")
587: .classEnv(thisClass, mustFind = FALSE)
588: .requirePackage(package)
589: getNamespace(package)

Selection: 0
Error in creator(ooDoc(doc)) : 
  error in evaluating the argument 'doc' in selecting a method for function 'creator'

Enter a frame number, or 0 to exit   

  1: creator("../inst/sampleData/WordTable.odt")
  2: creator("../inst/sampleData/WordTable.odt")
  3: meta.R#18: creator(ooDoc(doc))
  4: meta.R#18: creator(ooDoc(doc))
  5: meta.R#18: creator(ooDoc(doc))
  6: meta.R#18: creator(ooDoc(doc))
  7: meta.R#18: creator(ooDoc(doc))
  8: meta.R#18: creator(ooDoc(doc))
  9: meta.R#18: creator(ooDoc(doc))
 10: meta.R#18: creator(ooDoc(doc))
 11: meta.R#18: creator(ooDoc(doc))
 12: meta.R#18: creator(ooDoc(doc))
 13: meta.R#18: creator(ooDoc(doc))
 14: meta.R#18: creator(ooDoc(doc))
 15: meta.R#18: creator(ooDoc(doc))
 16: meta.R#18: creator(ooDoc(doc))
 17: meta.R#18: creator(ooDoc(doc))
 18: meta.R#18: creator(ooDoc(doc))
 19: meta.R#18: creator(ooDoc(doc))
 20: meta.R#18: creator(ooDoc(doc))
 21: meta.R#18: creator(ooDoc(doc))
 22: meta.R#18: creator(ooDoc(doc))
 23: meta.R#18: creator(ooDoc(doc))
 24: meta.R#18: creator(ooDoc(doc))
 25: meta.R#18: creator(ooDoc(doc))
 26: meta.R#18: creator(ooDoc(doc))
 27: meta.R#18: creator(ooDoc(doc))
 28: meta.R#18: creator(ooDoc(doc))
 29: meta.R#18: creator(ooDoc(doc))
 30: meta.R#18: creator(ooDoc(doc))
 31: meta.R#18: creator(ooDoc(doc))
 32: meta.R#18: creator(ooDoc(doc))
 33: meta.R#18: creator(ooDoc(doc))
 34: meta.R#18: creator(ooDoc(doc))
 35: meta.R#18: creator(ooDoc(doc))
 36: meta.R#18: creator(ooDoc(doc))
 37: meta.R#18: creator(ooDoc(doc))
 38: meta.R#18: creator(ooDoc(doc))
 39: meta.R#18: creator(ooDoc(doc))
 40: meta.R#18: creator(ooDoc(doc))
 41: meta.R#18: creator(ooDoc(doc))
 42: meta.R#18: creator(ooDoc(doc))
 43: meta.R#18: creator(ooDoc(doc))
 44: meta.R#18: creator(ooDoc(doc))
 45: meta.R#18: creator(ooDoc(doc))
 46: meta.R#18: creator(ooDoc(doc))
 47: meta.R#18: creator(ooDoc(doc))
 48: meta.R#18: creator(ooDoc(doc))
 49: meta.R#18: creator(ooDoc(doc))
 50: meta.R#18: creator(ooDoc(doc))
 51: meta.R#18: creator(ooDoc(doc))
 52: meta.R#18: creator(ooDoc(doc))
 53: meta.R#18: creator(ooDoc(doc))
 54: meta.R#18: creator(ooDoc(doc))
 55: meta.R#18: creator(ooDoc(doc))
 56: meta.R#18: creator(ooDoc(doc))
 57: meta.R#18: creator(ooDoc(doc))
 58: meta.R#18: creator(ooDoc(doc))
 59: meta.R#18: creator(ooDoc(doc))
 60: meta.R#18: creator(ooDoc(doc))
 61: meta.R#18: creator(ooDoc(doc))
 62: meta.R#18: creator(ooDoc(doc))
 63: meta.R#18: creator(ooDoc(doc))
 64: meta.R#18: creator(ooDoc(doc))
 65: meta.R#18: creator(ooDoc(doc))
 66: meta.R#18: creator(ooDoc(doc))
 67: meta.R#18: creator(ooDoc(doc))
 68: meta.R#18: creator(ooDoc(doc))
 69: meta.R#18: creator(ooDoc(doc))
 70: meta.R#18: creator(ooDoc(doc))
 71: meta.R#18: creator(ooDoc(doc))
 72: meta.R#18: creator(ooDoc(doc))
 73: meta.R#18: creator(ooDoc(doc))
 74: meta.R#18: creator(ooDoc(doc))
 75: meta.R#18: creator(ooDoc(doc))
 76: meta.R#18: creator(ooDoc(doc))
 77: meta.R#18: creator(ooDoc(doc))
 78: meta.R#18: creator(ooDoc(doc))
 79: meta.R#18: creator(ooDoc(doc))
 80: meta.R#18: creator(ooDoc(doc))
 81: meta.R#18: creator(ooDoc(doc))
 82: meta.R#18: creator(ooDoc(doc))
 83: meta.R#18: creator(ooDoc(doc))
 84: meta.R#18: creator(ooDoc(doc))
 85: meta.R#18: creator(ooDoc(doc))
 86: meta.R#18: creator(ooDoc(doc))
 87: meta.R#18: creator(ooDoc(doc))
 88: meta.R#18: creator(ooDoc(doc))
 89: meta.R#18: creator(ooDoc(doc))
 90: meta.R#18: creator(ooDoc(doc))
 91: meta.R#18: creator(ooDoc(doc))
 92: meta.R#18: creator(ooDoc(doc))
 93: meta.R#18: creator(ooDoc(doc))
 94: meta.R#18: creator(ooDoc(doc))
 95: meta.R#18: creator(ooDoc(doc))
 96: meta.R#18: creator(ooDoc(doc))
 97: meta.R#18: creator(ooDoc(doc))
 98: meta.R#18: creator(ooDoc(doc))
 99: meta.R#18: creator(ooDoc(doc))
100: meta.R#18: creator(ooDoc(doc))
101: meta.R#18: creator(ooDoc(doc))
102: meta.R#18: creator(ooDoc(doc))
103: meta.R#18: creator(ooDoc(doc))
104: meta.R#18: creator(ooDoc(doc))
105: meta.R#18: creator(ooDoc(doc))
106: meta.R#18: creator(ooDoc(doc))
107: meta.R#18: creator(ooDoc(doc))
108: meta.R#18: creator(ooDoc(doc))
109: meta.R#18: creator(ooDoc(doc))
110: meta.R#18: creator(ooDoc(doc))
111: meta.R#18: creator(ooDoc(doc))
112: meta.R#18: creator(ooDoc(doc))
113: meta.R#18: creator(ooDoc(doc))
114: meta.R#18: creator(ooDoc(doc))
115: meta.R#18: creator(ooDoc(doc))
116: meta.R#18: creator(ooDoc(doc))
117: meta.R#18: creator(ooDoc(doc))
118: meta.R#18: creator(ooDoc(doc))
119: meta.R#18: creator(ooDoc(doc))
120: meta.R#18: creator(ooDoc(doc))
121: meta.R#18: creator(ooDoc(doc))
122: meta.R#18: creator(ooDoc(doc))
123: meta.R#18: creator(ooDoc(doc))
124: meta.R#18: creator(ooDoc(doc))
125: meta.R#18: creator(ooDoc(doc))
126: meta.R#18: creator(ooDoc(doc))
127: meta.R#18: creator(ooDoc(doc))
128: meta.R#18: creator(ooDoc(doc))
129: meta.R#18: creator(ooDoc(doc))
130: meta.R#18: creator(ooDoc(doc))
131: meta.R#18: creator(ooDoc(doc))
132: meta.R#18: creator(ooDoc(doc))
133: meta.R#18: creator(ooDoc(doc))
134: meta.R#18: creator(ooDoc(doc))
135: meta.R#18: creator(ooDoc(doc))
136: meta.R#18: creator(ooDoc(doc))
137: meta.R#18: creator(ooDoc(doc))
138: meta.R#18: creator(ooDoc(doc))
139: meta.R#18: creator(ooDoc(doc))
140: meta.R#18: creator(ooDoc(doc))
141: meta.R#18: creator(ooDoc(doc))
142: meta.R#18: creator(ooDoc(doc))
143: meta.R#18: creator(ooDoc(doc))
144: meta.R#18: creator(ooDoc(doc))
145: meta.R#18: creator(ooDoc(doc))
146: meta.R#18: creator(ooDoc(doc))
147: meta.R#18: creator(ooDoc(doc))
148: meta.R#18: creator(ooDoc(doc))
149: meta.R#18: creator(ooDoc(doc))
150: meta.R#18: creator(ooDoc(doc))
151: meta.R#18: creator(ooDoc(doc))
152: meta.R#18: creator(ooDoc(doc))
153: meta.R#18: creator(ooDoc(doc))
154: meta.R#18: creator(ooDoc(doc))
155: meta.R#18: creator(ooDoc(doc))
156: meta.R#18: creator(ooDoc(doc))
157: meta.R#18: creator(ooDoc(doc))
158: meta.R#18: creator(ooDoc(doc))
159: meta.R#18: creator(ooDoc(doc))
160: meta.R#18: creator(ooDoc(doc))
161: meta.R#18: creator(ooDoc(doc))
162: meta.R#18: creator(ooDoc(doc))
163: meta.R#18: creator(ooDoc(doc))
164: meta.R#18: creator(ooDoc(doc))
165: meta.R#18: creator(ooDoc(doc))
166: meta.R#18: creator(ooDoc(doc))
167: meta.R#18: creator(ooDoc(doc))
168: meta.R#18: creator(ooDoc(doc))
169: meta.R#18: creator(ooDoc(doc))
170: meta.R#18: creator(ooDoc(doc))
171: meta.R#18: creator(ooDoc(doc))
172: meta.R#18: creator(ooDoc(doc))
173: meta.R#18: creator(ooDoc(doc))
174: meta.R#18: creator(ooDoc(doc))
175: meta.R#18: creator(ooDoc(doc))
176: meta.R#18: creator(ooDoc(doc))
177: meta.R#18: creator(ooDoc(doc))
178: meta.R#18: creator(ooDoc(doc))
179: meta.R#18: creator(ooDoc(doc))
180: meta.R#18: creator(ooDoc(doc))
181: meta.R#18: creator(ooDoc(doc))
182: meta.R#18: creator(ooDoc(doc))
183: meta.R#18: creator(ooDoc(doc))
184: meta.R#18: creator(ooDoc(doc))
185: meta.R#18: creator(ooDoc(doc))
186: meta.R#18: creator(ooDoc(doc))
187: meta.R#18: creator(ooDoc(doc))
188: meta.R#18: creator(ooDoc(doc))
189: meta.R#18: creator(ooDoc(doc))
190: meta.R#18: creator(ooDoc(doc))
191: meta.R#18: creator(ooDoc(doc))
192: meta.R#18: creator(ooDoc(doc))
193: meta.R#18: creator(ooDoc(doc))
194: meta.R#18: creator(ooDoc(doc))
195: meta.R#18: creator(ooDoc(doc))
196: meta.R#18: creator(ooDoc(doc))
197: meta.R#18: creator(ooDoc(doc))
198: meta.R#18: creator(ooDoc(doc))
199: meta.R#18: creator(ooDoc(doc))
200: meta.R#18: creator(ooDoc(doc))
201: meta.R#18: creator(ooDoc(doc))
202: meta.R#18: creator(ooDoc(doc))
203: meta.R#18: creator(ooDoc(doc))
204: meta.R#18: creator(ooDoc(doc))
205: meta.R#18: creator(ooDoc(doc))
206: meta.R#18: creator(ooDoc(doc))
207: meta.R#18: creator(ooDoc(doc))
208: meta.R#18: creator(ooDoc(doc))
209: meta.R#18: creator(ooDoc(doc))
210: meta.R#18: creator(ooDoc(doc))
211: meta.R#18: creator(ooDoc(doc))
212: meta.R#18: creator(ooDoc(doc))
213: meta.R#18: creator(ooDoc(doc))
214: meta.R#18: creator(ooDoc(doc))
215: meta.R#18: creator(ooDoc(doc))
216: meta.R#18: creator(ooDoc(doc))
217: meta.R#18: creator(ooDoc(doc))
218: meta.R#18: creator(ooDoc(doc))
219: meta.R#18: creator(ooDoc(doc))
220: meta.R#18: creator(ooDoc(doc))
221: meta.R#18: creator(ooDoc(doc))
222: meta.R#18: creator(ooDoc(doc))
223: meta.R#18: creator(ooDoc(doc))
224: meta.R#18: creator(ooDoc(doc))
225: meta.R#18: creator(ooDoc(doc))
226: meta.R#18: creator(ooDoc(doc))
227: meta.R#18: creator(ooDoc(doc))
228: meta.R#18: creator(ooDoc(doc))
229: meta.R#18: creator(ooDoc(doc))
230: meta.R#18: creator(ooDoc(doc))
231: meta.R#18: creator(ooDoc(doc))
232: meta.R#18: creator(ooDoc(doc))
233: meta.R#18: creator(ooDoc(doc))
234: meta.R#18: creator(ooDoc(doc))
235: meta.R#18: creator(ooDoc(doc))
236: meta.R#18: creator(ooDoc(doc))
237: meta.R#18: creator(ooDoc(doc))
238: meta.R#18: creator(ooDoc(doc))
239: meta.R#18: creator(ooDoc(doc))
240: meta.R#18: creator(ooDoc(doc))
241: meta.R#18: creator(ooDoc(doc))
242: meta.R#18: creator(ooDoc(doc))
243: meta.R#18: creator(ooDoc(doc))
244: meta.R#18: creator(ooDoc(doc))
245: meta.R#18: creator(ooDoc(doc))
246: meta.R#18: creator(ooDoc(doc))
247: meta.R#18: creator(ooDoc(doc))
248: meta.R#18: creator(ooDoc(doc))
249: meta.R#18: creator(ooDoc(doc))
250: meta.R#18: creator(ooDoc(doc))
251: meta.R#18: creator(ooDoc(doc))
252: meta.R#18: creator(ooDoc(doc))
253: meta.R#18: creator(ooDoc(doc))
254: meta.R#18: creator(ooDoc(doc))
255: meta.R#18: creator(ooDoc(doc))
256: meta.R#18: creator(ooDoc(doc))
257: meta.R#18: creator(ooDoc(doc))
258: meta.R#18: creator(ooDoc(doc))
259: meta.R#18: creator(ooDoc(doc))
260: meta.R#18: creator(ooDoc(doc))
261: meta.R#18: creator(ooDoc(doc))
262: meta.R#18: creator(ooDoc(doc))
263: meta.R#18: creator(ooDoc(doc))
264: meta.R#18: creator(ooDoc(doc))
265: meta.R#18: creator(ooDoc(doc))
266: meta.R#18: creator(ooDoc(doc))
267: meta.R#18: creator(ooDoc(doc))
268: meta.R#18: creator(ooDoc(doc))
269: meta.R#18: creator(ooDoc(doc))
270: meta.R#18: creator(ooDoc(doc))
271: meta.R#18: creator(ooDoc(doc))
272: meta.R#18: creator(ooDoc(doc))
273: meta.R#18: creator(ooDoc(doc))
274: meta.R#18: creator(ooDoc(doc))
275: meta.R#18: creator(ooDoc(doc))
276: meta.R#18: creator(ooDoc(doc))
277: meta.R#18: creator(ooDoc(doc))
278: meta.R#18: creator(ooDoc(doc))
279: meta.R#18: creator(ooDoc(doc))
280: meta.R#18: creator(ooDoc(doc))
281: meta.R#18: creator(ooDoc(doc))
282: meta.R#18: creator(ooDoc(doc))
283: meta.R#18: creator(ooDoc(doc))
284: meta.R#18: creator(ooDoc(doc))
285: meta.R#18: creator(ooDoc(doc))
286: meta.R#18: creator(ooDoc(doc))
287: meta.R#18: creator(ooDoc(doc))
288: meta.R#18: creator(ooDoc(doc))
289: meta.R#18: creator(ooDoc(doc))
290: meta.R#18: creator(ooDoc(doc))
291: meta.R#18: creator(ooDoc(doc))
292: meta.R#18: creator(ooDoc(doc))
293: meta.R#18: creator(ooDoc(doc))
294: meta.R#18: creator(ooDoc(doc))
295: meta.R#18: creator(ooDoc(doc))
296: meta.R#18: creator(ooDoc(doc))
297: meta.R#18: creator(ooDoc(doc))
298: meta.R#18: creator(ooDoc(doc))
299: meta.R#18: creator(ooDoc(doc))
300: meta.R#18: creator(ooDoc(doc))
301: meta.R#18: creator(ooDoc(doc))
302: meta.R#18: creator(ooDoc(doc))
303: meta.R#18: creator(ooDoc(doc))
304: meta.R#18: creator(ooDoc(doc))
305: meta.R#18: creator(ooDoc(doc))
306: meta.R#18: creator(ooDoc(doc))
307: meta.R#18: creator(ooDoc(doc))
308: meta.R#18: creator(ooDoc(doc))
309: meta.R#18: creator(ooDoc(doc))
310: meta.R#18: creator(ooDoc(doc))
311: meta.R#18: creator(ooDoc(doc))
312: meta.R#18: creator(ooDoc(doc))
313: meta.R#18: creator(ooDoc(doc))
314: meta.R#18: creator(ooDoc(doc))
315: meta.R#18: creator(ooDoc(doc))
316: meta.R#18: creator(ooDoc(doc))
317: meta.R#18: creator(ooDoc(doc))
318: meta.R#18: creator(ooDoc(doc))
319: meta.R#18: creator(ooDoc(doc))
320: meta.R#18: creator(ooDoc(doc))
321: meta.R#18: creator(ooDoc(doc))
322: meta.R#18: creator(ooDoc(doc))
323: meta.R#18: creator(ooDoc(doc))
324: meta.R#18: creator(ooDoc(doc))
325: meta.R#18: creator(ooDoc(doc))
326: meta.R#18: creator(ooDoc(doc))
327: meta.R#18: creator(ooDoc(doc))
328: meta.R#18: creator(ooDoc(doc))
329: meta.R#18: creator(ooDoc(doc))
330: meta.R#18: creator(ooDoc(doc))
331: meta.R#18: creator(ooDoc(doc))
332: meta.R#18: creator(ooDoc(doc))
333: meta.R#18: creator(ooDoc(doc))
334: meta.R#18: creator(ooDoc(doc))
335: meta.R#18: creator(ooDoc(doc))
336: meta.R#18: creator(ooDoc(doc))
337: meta.R#18: creator(ooDoc(doc))
338: meta.R#18: creator(ooDoc(doc))
339: meta.R#18: creator(ooDoc(doc))
340: meta.R#18: creator(ooDoc(doc))
341: meta.R#18: creator(ooDoc(doc))
342: meta.R#18: creator(ooDoc(doc))
343: meta.R#18: creator(ooDoc(doc))
344: meta.R#18: creator(ooDoc(doc))
345: meta.R#18: creator(ooDoc(doc))
346: meta.R#18: creator(ooDoc(doc))
347: meta.R#18: creator(ooDoc(doc))
348: meta.R#18: creator(ooDoc(doc))
349: meta.R#18: creator(ooDoc(doc))
350: meta.R#18: creator(ooDoc(doc))
351: meta.R#18: creator(ooDoc(doc))
352: meta.R#18: creator(ooDoc(doc))
353: meta.R#18: creator(ooDoc(doc))
354: meta.R#18: creator(ooDoc(doc))
355: meta.R#18: creator(ooDoc(doc))
356: meta.R#18: creator(ooDoc(doc))
357: meta.R#18: creator(ooDoc(doc))
358: meta.R#18: creator(ooDoc(doc))
359: meta.R#18: creator(ooDoc(doc))
360: meta.R#18: creator(ooDoc(doc))
361: meta.R#18: creator(ooDoc(doc))
362: meta.R#18: creator(ooDoc(doc))
363: meta.R#18: creator(ooDoc(doc))
364: meta.R#18: creator(ooDoc(doc))
365: meta.R#18: creator(ooDoc(doc))
366: meta.R#18: creator(ooDoc(doc))
367: meta.R#18: creator(ooDoc(doc))
368: meta.R#18: creator(ooDoc(doc))
369: meta.R#18: creator(ooDoc(doc))
370: meta.R#18: creator(ooDoc(doc))
371: meta.R#18: creator(ooDoc(doc))
372: meta.R#18: creator(ooDoc(doc))
373: meta.R#18: creator(ooDoc(doc))
374: meta.R#18: creator(ooDoc(doc))
375: meta.R#18: creator(ooDoc(doc))
376: meta.R#18: creator(ooDoc(doc))
377: meta.R#18: creator(ooDoc(doc))
378: meta.R#18: creator(ooDoc(doc))
379: meta.R#18: creator(ooDoc(doc))
380: meta.R#18: creator(ooDoc(doc))
381: meta.R#18: creator(ooDoc(doc))
382: meta.R#18: creator(ooDoc(doc))
383: meta.R#18: creator(ooDoc(doc))
384: meta.R#18: creator(ooDoc(doc))
385: meta.R#18: creator(ooDoc(doc))
386: meta.R#18: creator(ooDoc(doc))
387: meta.R#18: creator(ooDoc(doc))
388: meta.R#18: creator(ooDoc(doc))
389: meta.R#18: creator(ooDoc(doc))
390: meta.R#18: creator(ooDoc(doc))
391: meta.R#18: creator(ooDoc(doc))
392: meta.R#18: creator(ooDoc(doc))
393: meta.R#18: creator(ooDoc(doc))
394: meta.R#18: creator(ooDoc(doc))
395: meta.R#18: creator(ooDoc(doc))
396: meta.R#18: creator(ooDoc(doc))
397: meta.R#18: creator(ooDoc(doc))
398: meta.R#18: creator(ooDoc(doc))
399: meta.R#18: creator(ooDoc(doc))
400: meta.R#18: creator(ooDoc(doc))
401: meta.R#18: creator(ooDoc(doc))
402: meta.R#18: creator(ooDoc(doc))
403: meta.R#18: creator(ooDoc(doc))
404: meta.R#18: creator(ooDoc(doc))
405: meta.R#18: creator(ooDoc(doc))
406: meta.R#18: creator(ooDoc(doc))
407: meta.R#18: creator(ooDoc(doc))
408: meta.R#18: creator(ooDoc(doc))
409: meta.R#18: creator(ooDoc(doc))
410: meta.R#18: creator(ooDoc(doc))
411: meta.R#18: creator(ooDoc(doc))
412: meta.R#18: creator(ooDoc(doc))
413: meta.R#18: creator(ooDoc(doc))
414: meta.R#18: creator(ooDoc(doc))
415: meta.R#18: creator(ooDoc(doc))
416: meta.R#18: creator(ooDoc(doc))
417: meta.R#18: creator(ooDoc(doc))
418: meta.R#18: creator(ooDoc(doc))
419: meta.R#18: creator(ooDoc(doc))
420: meta.R#18: creator(ooDoc(doc))
421: meta.R#18: creator(ooDoc(doc))
422: meta.R#18: creator(ooDoc(doc))
423: meta.R#18: creator(ooDoc(doc))
424: meta.R#18: creator(ooDoc(doc))
425: meta.R#18: creator(ooDoc(doc))
426: meta.R#18: creator(ooDoc(doc))
427: meta.R#18: creator(ooDoc(doc))
428: meta.R#18: creator(ooDoc(doc))
429: meta.R#18: creator(ooDoc(doc))
430: meta.R#18: creator(ooDoc(doc))
431: meta.R#18: creator(ooDoc(doc))
432: meta.R#18: creator(ooDoc(doc))
433: meta.R#18: creator(ooDoc(doc))
434: meta.R#18: creator(ooDoc(doc))
435: meta.R#18: creator(ooDoc(doc))
436: meta.R#18: creator(ooDoc(doc))
437: meta.R#18: creator(ooDoc(doc))
438: meta.R#18: creator(ooDoc(doc))
439: meta.R#18: creator(ooDoc(doc))
440: meta.R#18: creator(ooDoc(doc))
441: meta.R#18: creator(ooDoc(doc))
442: meta.R#18: creator(ooDoc(doc))
443: meta.R#18: creator(ooDoc(doc))
444: meta.R#18: creator(ooDoc(doc))
445: meta.R#18: creator(ooDoc(doc))
446: meta.R#18: creator(ooDoc(doc))
447: meta.R#18: creator(ooDoc(doc))
448: meta.R#18: creator(ooDoc(doc))
449: meta.R#18: creator(ooDoc(doc))
450: meta.R#18: creator(ooDoc(doc))
451: meta.R#18: creator(ooDoc(doc))
452: meta.R#18: creator(ooDoc(doc))
453: meta.R#18: creator(ooDoc(doc))
454: meta.R#18: creator(ooDoc(doc))
455: meta.R#18: creator(ooDoc(doc))
456: meta.R#18: creator(ooDoc(doc))
457: meta.R#18: creator(ooDoc(doc))
458: meta.R#18: creator(ooDoc(doc))
459: meta.R#18: creator(ooDoc(doc))
460: meta.R#18: creator(ooDoc(doc))
461: meta.R#18: creator(ooDoc(doc))
462: meta.R#18: creator(ooDoc(doc))
463: meta.R#18: creator(ooDoc(doc))
464: meta.R#18: creator(ooDoc(doc))
465: meta.R#18: creator(ooDoc(doc))
466: meta.R#18: creator(ooDoc(doc))
467: meta.R#18: creator(ooDoc(doc))
468: meta.R#18: creator(ooDoc(doc))
469: meta.R#18: creator(ooDoc(doc))
470: meta.R#18: creator(ooDoc(doc))
471: meta.R#18: creator(ooDoc(doc))
472: meta.R#18: creator(ooDoc(doc))
473: meta.R#18: creator(ooDoc(doc))
474: meta.R#18: creator(ooDoc(doc))
475: meta.R#18: creator(ooDoc(doc))
476: meta.R#18: creator(ooDoc(doc))
477: meta.R#18: creator(ooDoc(doc))
478: meta.R#18: creator(ooDoc(doc))
479: meta.R#18: creator(ooDoc(doc))
480: meta.R#18: creator(ooDoc(doc))
481: meta.R#18: creator(ooDoc(doc))
482: meta.R#18: creator(ooDoc(doc))
483: meta.R#18: creator(ooDoc(doc))
484: meta.R#18: creator(ooDoc(doc))
485: meta.R#18: creator(ooDoc(doc))
486: meta.R#18: creator(ooDoc(doc))
487: meta.R#18: creator(ooDoc(doc))
488: meta.R#18: creator(ooDoc(doc))
489: meta.R#18: creator(ooDoc(doc))
490: meta.R#18: creator(ooDoc(doc))
491: meta.R#18: creator(ooDoc(doc))
492: meta.R#18: creator(ooDoc(doc))
493: meta.R#18: creator(ooDoc(doc))
494: meta.R#18: creator(ooDoc(doc))
495: meta.R#18: creator(ooDoc(doc))
496: meta.R#18: creator(ooDoc(doc))
497: meta.R#18: creator(ooDoc(doc))
498: meta.R#18: creator(ooDoc(doc))
499: meta.R#18: creator(ooDoc(doc))
500: meta.R#18: creator(ooDoc(doc))
501: meta.R#18: creator(ooDoc(doc))
502: meta.R#18: creator(ooDoc(doc))
503: meta.R#18: creator(ooDoc(doc))
504: meta.R#18: creator(ooDoc(doc))
505: meta.R#18: creator(ooDoc(doc))
506: meta.R#18: creator(ooDoc(doc))
507: meta.R#18: creator(ooDoc(doc))
508: meta.R#18: creator(ooDoc(doc))
509: meta.R#18: creator(ooDoc(doc))
510: meta.R#18: creator(ooDoc(doc))
511: meta.R#18: creator(ooDoc(doc))
512: meta.R#18: creator(ooDoc(doc))
513: meta.R#18: creator(ooDoc(doc))
514: meta.R#18: creator(ooDoc(doc))
515: meta.R#18: creator(ooDoc(doc))
516: meta.R#18: creator(ooDoc(doc))
517: meta.R#18: creator(ooDoc(doc))
518: meta.R#18: creator(ooDoc(doc))
519: meta.R#18: creator(ooDoc(doc))
520: meta.R#18: creator(ooDoc(doc))
521: meta.R#18: creator(ooDoc(doc))
522: meta.R#18: creator(ooDoc(doc))
523: meta.R#18: creator(ooDoc(doc))
524: meta.R#18: creator(ooDoc(doc))
525: meta.R#18: creator(ooDoc(doc))
526: meta.R#18: creator(ooDoc(doc))
527: meta.R#18: creator(ooDoc(doc))
528: meta.R#18: creator(ooDoc(doc))
529: meta.R#18: creator(ooDoc(doc))
530: meta.R#18: creator(ooDoc(doc))
531: meta.R#18: creator(ooDoc(doc))
532: meta.R#18: creator(ooDoc(doc))
533: meta.R#18: creator(ooDoc(doc))
534: meta.R#18: creator(ooDoc(doc))
535: meta.R#18: creator(ooDoc(doc))
536: meta.R#18: creator(ooDoc(doc))
537: meta.R#18: creator(ooDoc(doc))
538: meta.R#18: creator(ooDoc(doc))
539: meta.R#18: creator(ooDoc(doc))
540: meta.R#18: creator(ooDoc(doc))
541: meta.R#18: creator(ooDoc(doc))
542: meta.R#18: creator(ooDoc(doc))
543: meta.R#18: creator(ooDoc(doc))
544: meta.R#18: creator(ooDoc(doc))
545: meta.R#18: creator(ooDoc(doc))
546: meta.R#18: creator(ooDoc(doc))
547: meta.R#18: creator(ooDoc(doc))
548: meta.R#18: creator(ooDoc(doc))
549: meta.R#18: creator(ooDoc(doc))
550: meta.R#18: creator(ooDoc(doc))
551: meta.R#18: creator(ooDoc(doc))
552: meta.R#18: creator(ooDoc(doc))
553: meta.R#18: creator(ooDoc(doc))
554: meta.R#18: creator(ooDoc(doc))
555: meta.R#18: creator(ooDoc(doc))
556: meta.R#18: creator(ooDoc(doc))
557: meta.R#18: creator(ooDoc(doc))
558: meta.R#18: creator(ooDoc(doc))
559: meta.R#18: creator(ooDoc(doc))
560: meta.R#18: creator(ooDoc(doc))
561: meta.R#18: creator(ooDoc(doc))
562: meta.R#18: creator(ooDoc(doc))
563: meta.R#18: creator(ooDoc(doc))
564: meta.R#18: creator(ooDoc(doc))
565: meta.R#18: creator(ooDoc(doc))
566: meta.R#18: creator(ooDoc(doc))
567: meta.R#18: creator(ooDoc(doc))
568: meta.R#18: creator(ooDoc(doc))
569: meta.R#18: creator(ooDoc(doc))
570: meta.R#18: creator(ooDoc(doc))
571: meta.R#18: creator(ooDoc(doc))
572: meta.R#18: creator(ooDoc(doc))
573: meta.R#18: creator(ooDoc(doc))
574: meta.R#18: creator(ooDoc(doc))
575: meta.R#18: creator(ooDoc(doc))
576: meta.R#18: creator(ooDoc(doc))
577: meta.R#18: creator(ooDoc(doc))
578: meta.R#18: creator(ooDoc(doc))
579: meta.R#18: creator(ooDoc(doc))

Selection:   C-c C-c
> ooDoc("../inst/sampleData/WordTable.odt")
> print(ooDoc("../inst/sampleData/WordTable.odt"))
*** output flushed ***
> source("classes.R"); source("meta.R")
> ooDoc("../inst/sampleData/WordTable.odt")
*** output flushed ***
> class(ooDoc("../inst/sampleData/WordTable.odt"))
[1] "ZipFileArchive"
attr(,"package")
[1] "Rcompression"
> ooDoc("../inst/sampleData/WordTable.odt")
Zip Archive: /Users/duncan/Books/XMLTechnologies/Rpackages/ROpenOffice/inst/sampleData/WordTable.odt 
 [1] "mimetype"                               
 [2] "Configurations2/statusbar/"             
 [3] "Configurations2/accelerator/current.xml"
 [4] "Configurations2/floater/"               
 [5] "Configurations2/popupmenu/"             
 [6] "Configurations2/progressbar/"           
 [7] "Configurations2/toolpanel/"             
 [8] "Configurations2/menubar/"               
 [9] "Configurations2/toolbar/"               
[10] "Configurations2/images/Bitmaps/"        
[11] "content.xml"                            
[12] "manifest.rdf"                           
[13] "ObjectReplacements/Object 1"            
[14] "styles.xml"                             
[15] "Object 1/content.xml"                   
[16] "Object 1/styles.xml"                    
[17] "Object 1/settings.xml"                  
[18] "meta.xml"                               
[19] "Thumbnails/thumbnail.png"               
[20] "settings.xml"                           
[21] "META-INF/manifest.xml"                  
> ooDoc("../inst/sampleData/CellTypes.ods")
Zip Archive: /Users/duncan/Books/XMLTechnologies/Rpackages/ROpenOffice/inst/sampleData/CellTypes.ods 
 [1] "mimetype"                               
 [2] "Configurations2/statusbar/"             
 [3] "Configurations2/accelerator/current.xml"
 [4] "Configurations2/floater/"               
 [5] "Configurations2/popupmenu/"             
 [6] "Configurations2/progressbar/"           
 [7] "Configurations2/toolpanel/"             
 [8] "Configurations2/menubar/"               
 [9] "Configurations2/toolbar/"               
[10] "Configurations2/images/Bitmaps/"        
[11] "content.xml"                            
[12] "styles.xml"                             
[13] "meta.xml"                               
[14] "Thumbnails/thumbnail.png"               
[15] "settings.xml"                           
[16] "META-INF/manifest.xml"                  
> ooDoc("../inst/sampleData/CellTypes.ods")[["mimetype"]]
[1] 
> ooDoc("../inst/sampleData/WordTable.odt")[["mimetype"]]
[1] o>
> source("classes.R"); source("meta.R")
> ooDoc("../inst/sampleData/WordTable.odt")
Error in getDataPart(<S4 object of class "OOText">) : 
  Data part is undefined for general S4 object

Enter a frame number, or 0 to exit   

1: function (object) 
2: function (object) 
3: cat("Zip Archive:", object@.Data, "\n")
4: getDataPart(<S4 object of class "OOText">)

Selection: 0
> ooDoc("../inst/sampleData/WordTable.odt")
Error in getDataPart(<S4 object of class "OOText">) : 
  Data part is undefined for general S4 object

Enter a frame number, or 0 to exit   

1: function (object) 
2: function (object) 
3: cat("Zip Archive:", object@.Data, "\n")
4: getDataPart(<S4 object of class "OOText">)

Selection: 0
> getClass("ZipArchive")
Class "ZipArchive" [package "Rcompression"]

Slots:
                                       
Name:     classes   elements       info
Class:  character  character data.frame

Known Subclasses: 
Class "ZipFileArchive", directly
Class "ZipMemoryArchive", directly
Class "OODocument", directly
Class "RdzArchive", by class "ZipFileArchive", distance 2
Class "OOSpreadsheet", by class "OODocument", distance 2
Class "OOText", by class "OODocument", distance 2
Class "OOPresentation", by class "OODocument", distance 2
> source("classes.R"); source("meta.R")
Warning message:
In .removePreviousCoerce(class1, class2, where, prevIs) :
  methods currently exist for coercing from "OOText" to "ZipArchive"; they will be replaced.
> ooDoc("../inst/sampleData/WordTable.odt")
Error in as(z, class) : 
  no method or default for coercing "ZipFileArchive" to "OOText"

Enter a frame number, or 0 to exit   

1: ooDoc("../inst/sampleData/WordTable.odt")
2: classes.R#16: as(z, class)

Selection: 0
> source("classes.R"); source("meta.R")
> ooDoc("../inst/sampleData/WordTable.odt")
Error in getDataPart(<S4 object of class "OOText">) : 
  Data part is undefined for general S4 object

Enter a frame number, or 0 to exit   

1: function (object) 
2: function (object) 
3: cat("Zip Archive:", object@.Data, "\n")
4: getDataPart(<S4 object of class "OOText">)

Selection: 1
Called from: function (object) 
standardGeneric("show")(<S4 object of class "OOText">)
Browse[1]> ls()
[1] "object"
Browse[1]> 

Enter a frame number, or 0 to exit   

1: function (object) 
2: function (object) 
3: cat("Zip Archive:", object@.Data, "\n")
4: getDataPart(<S4 object of class "OOText">)

Selection: 0
> z = ooDoc("../inst/sampleData/WordTable.odt")
> class(z)
[1] "OOText"
attr(,"package")
[1] ".GlobalEnv"
> slotNames(z)
[1] "classes"  "elements" "info"    
> z@classes
[1] "ZipArchive"
> z@elements
*** output flushed ***
> z@info
*** output flushed ***
> z
Error in getDataPart(<S4 object of class "OOText">) : 
  Data part is undefined for general S4 object

Enter a frame number, or 0 to exit   

1: function (object) 
2: function (object) 
3: cat("Zip Archive:", object@.Data, "\n")
4: getDataPart(<S4 object of class "OOText">)

Selection: 0
> slotNames(z)
[1] "classes"  "elements" "info"    
> ooDoc("../inst/sampleData/Presentaton.odp")
Error in ooDoc("../inst/sampleData/Presentaton.odp") : Not yet

Enter a frame number, or 0 to exit   

1: ooDoc("../inst/sampleData/Presentaton.odp")

Selection: 0
> zipArchive("../inst/sampleData/Presentaton.odp")[["mimetype.xml"]]
Error in getZipFileEntry(x, i, password, mode, info = x@info, last = last) : 
  no entry matching mimetype.xml in the ZIP archive /Users/duncan/Books/XMLTechnologies/Rpackages/ROpenOffice/inst/sampleData/Presentaton.odp

Enter a frame number, or 0 to exit   

1: zipArchive("../inst/sampleData/Presentaton.odp")[["mimetype.xml"]]
2: zipArchive("../inst/sampleData/Presentaton.odp")[["mimetype.xml"]]
3: .local(x, i, j, ...)
4: getZipFileEntry(x, i, password, mode, info = x@info, last = last)

Selection: 0
> zipArchive("../inst/sampleData/Presentaton.odp")
Zip Archive: /Users/duncan/Books/XMLTechnologies/Rpackages/ROpenOffice/inst/sampleData/Presentaton.odp 
 [1] "mimetype"                                     
 [2] "Configurations2/statusbar/"                   
 [3] "Configurations2/accelerator/current.xml"      
 [4] "Configurations2/floater/"                     
 [5] "Configurations2/popupmenu/"                   
 [6] "Configurations2/progressbar/"                 
 [7] "Configurations2/toolpanel/"                   
 [8] "Configurations2/menubar/"                     
 [9] "Configurations2/toolbar/"                     
[10] "Configurations2/images/Bitmaps/"              
[11] "Pictures/100000000000032000000258EC8EC29B.png"
[12] "Pictures/100000000000032000000258217E47D0.png"
[13] "Pictures/10000000000003200000025857AC7A97.png"
[14] "Pictures/10000000000003200000025830674EDA.png"
[15] "content.xml"                                  
[16] "styles.xml"                                   
[17] "meta.xml"                                     
[18] "Thumbnails/thumbnail.png"                     
[19] "settings.xml"                                 
[20] "META-INF/manifest.xml"                        
> zipArchive("../inst/sampleData/Presentaton.odp")[["mimetype"]]
[1] 
> source("classes.R"); source("meta.R")
Warning message:
In .removePreviousCoerce(class1, class2, where, prevIs) :
  methods currently exist for coercing from "OOText" to "ZipArchive"; they will be replaced.
> ooDoc("../inst/sampleData/Presentaton.odp")
Error in getDataPart(<S4 object of class "OOPresentation">) : 
  Data part is undefined for general S4 object

Enter a frame number, or 0 to exit   

1: function (object) 
2: function (object) 
3: cat("Zip Archive:", object@.Data, "\n")
4: getDataPart(<S4 object of class "OOPresentation">)

Selection: 0
> z = zipArchive("../inst/sampleData/Presentaton.odp")
> z
Zip Archive: /Users/duncan/Books/XMLTechnologies/Rpackages/ROpenOffice/inst/sampleData/Presentaton.odp 
 [1] "mimetype"                                     
 [2] "Configurations2/statusbar/"                   
 [3] "Configurations2/accelerator/current.xml"      
 [4] "Configurations2/floater/"                     
 [5] "Configurations2/popupmenu/"                   
 [6] "Configurations2/progressbar/"                 
 [7] "Configurations2/toolpanel/"                   
 [8] "Configurations2/menubar/"                     
 [9] "Configurations2/toolbar/"                     
[10] "Configurations2/images/Bitmaps/"              
[11] "Pictures/100000000000032000000258EC8EC29B.png"
[12] "Pictures/100000000000032000000258217E47D0.png"
[13] "Pictures/10000000000003200000025857AC7A97.png"
[14] "Pictures/10000000000003200000025830674EDA.png"
[15] "content.xml"                                  
[16] "styles.xml"                                   
[17] "meta.xml"                                     
[18] "Thumbnails/thumbnail.png"                     
[19] "settings.xml"                                 
[20] "META-INF/manifest.xml"                        
> z[["metadata"]]
Error in getZipFileEntry(x, i, password, mode, info = x@info, last = last) : 
  no entry matching metadata in the ZIP archive /Users/duncan/Books/XMLTechnologies/Rpackages/ROpenOffice/inst/sampleData/Presentaton.odp

Enter a frame number, or 0 to exit   

1: z[["metadata"]]
2: z[["metadata"]]
3: .local(x, i, j, ...)
4: getZipFileEntry(x, i, password, mode, info = x@info, last = last)

Selection: 0
> z[["mimetype"]]
[1] "application/vnd.oasis.opendocument.presentation"
> new("OOPresentation")
Error in getDataPart(<S4 object of class "OOPresentation">) : 
  Data part is undefined for general S4 object

Enter a frame number, or 0 to exit   

1: function (object) 
2: function (object) 
3: cat("Zip Archive:", object@.Data, "\n")
4: getDataPart(<S4 object of class "OOPresentation">)

Selection: 0
> getClass('ZipArchive')
*** output flushed ***
> source("classes.R")
> new("OOPresentation")
Zip Archive:  
character(0)
> z = ooDoc("../inst/sampleData/Presentaton.odp")
> z
*** output flushed ***
> creator(z)
Error in nodes[[1]] : subscript out of bounds

Enter a frame number, or 0 to exit   

1: creator(z)
2: creator(z)
3: meta.R#33: xmlValue(nodes[[1]])

Selection: 0
> source("meta.R")
> creator(z)
Error in nodes[[1]] : subscript out of bounds

Enter a frame number, or 0 to exit   

1: creator(z)
2: creator(z)
3: meta.R#33: xmlValue(nodes[[1]])

Selection: 0
> creator(z)
Error in nodes[[1]] : subscript out of bounds

Enter a frame number, or 0 to exit   

1: creator(z)
2: creator(z)
3: meta.R#33: xmlValue(nodes[[1]])

Selection: 3
Called from: creator(z)
Browse[1]> ls()
*** output flushed ***
Browse[1]> ls()
[1] "encoding"       "ignoreComments" "recursive"      "x"             
Browse[1]> x
Error during wrapup: promise already under evaluation: recursive default argument reference or earlier problems?
Browse[1]> 

Enter a frame number, or 0 to exit   

1: creator(z)
2: creator(z)
3: meta.R#33: xmlValue(nodes[[1]])

Selection: 2
Called from: creator(z)
Browse[1]> ls()
[1] "doc"   "nodes" "xml"  
Browse[1]> doc
*** output flushed ***
Browse[1]> xml
<?xml version="1.0" encoding="UTF-8"?>
<office:document-meta xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:meta="urn:oasis:names:tc:opendocument:xmlns:meta:1.0" xmlns:presentation="urn:oasis:names:tc:opendocument:xmlns:presentation:1.0" xmlns:ooo="http://openoffice.org/2004/office" xmlns:smil="urn:oasis:names:tc:opendocument:xmlns:smil-compatible:1.0" xmlns:anim="urn:oasis:names:tc:opendocument:xmlns:animation:1.0" xmlns:grddl="http://www.w3.org/2003/g/data-view#" xmlns:officeooo="http://openoffice.org/2009/office" xmlns:drawooo="http://openoffice.org/2010/draw" office:version="1.2" grddl:transformation="http://docs.oasis-open.org/office/1.2/xslt/odf2rdf.xsl">
  <office:meta>
    <meta:initial-creator>Deborah Nolan</meta:initial-creator>
    <meta:creation-date>2011-03-01T18:03:44</meta:creation-date>
    <meta:editing-duration>PT4M18S</meta:editing-duration>
    <meta:editing-cycles>3</meta:editing-cycles>
    <dc:date>2011-03-01T18:07:22</dc:date>
    <dc:creator>Deborah Nolan</dc:creator>
    <meta:generator>OpenOffice.org/3.3$Unix OpenOffice.org_project/330m20$Build-9567</meta:generator>
    <meta:document-statistic meta:object-count="77"/>
  </office:meta>
</office:document-meta>
 
Browse[1]> nodes
list()
attr(,"class")
[1] "XMLNodeSet"
Browse[1]> xml
<?xml version="1.0" encoding="UTF-8"?>
<office:document-meta xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:meta="urn:oasis:names:tc:opendocument:xmlns:meta:1.0" xmlns:presentation="urn:oasis:names:tc:opendocument:xmlns:presentation:1.0" xmlns:ooo="http://openoffice.org/2004/office" xmlns:smil="urn:oasis:names:tc:opendocument:xmlns:smil-compatible:1.0" xmlns:anim="urn:oasis:names:tc:opendocument:xmlns:animation:1.0" xmlns:grddl="http://www.w3.org/2003/g/data-view#" xmlns:officeooo="http://openoffice.org/2009/office" xmlns:drawooo="http://openoffice.org/2010/draw" office:version="1.2" grddl:transformation="http://docs.oasis-open.org/office/1.2/xslt/odf2rdf.xsl">
  <office:meta>
    <meta:initial-creator>Deborah Nolan</meta:initial-creator>
    <meta:creation-date>2011-03-01T18:03:44</meta:creation-date>
    <meta:editing-duration>PT4M18S</meta:editing-duration>
    <meta:editing-cycles>3</meta:editing-cycles>
    <dc:date>2011-03-01T18:07:22</dc:date>
    <dc:creator>Deborah Nolan</dc:creator>
    <meta:generator>OpenOffice.org/3.3$Unix OpenOffice.org_project/330m20$Build-9567</meta:generator>
    <meta:document-statistic meta:object-count="77"/>
  </office:meta>
</office:document-meta>
 
Browse[1]> 

Enter a frame number, or 0 to exit   

1: creator(z)
2: creator(z)
3: meta.R#33: xmlValue(nodes[[1]])

Selection: 0
> source("meta.R")
> creator(z)
[1] "Deborah Nolan"
> creationTime(z)
[1] "2011-03-01 18:03:44"
> w = ooDoc("../inst/sampleData/WordTable.odt")
> creator(w)
*** output flushed ***
> source("meta.R")
Error in setMethod("creator<-", "character", function(doc, value, ...) { : 
  no existing definition for function "creator<-"

Enter a frame number, or 0 to exit   

1: source("meta.R")
2: source("meta.R")
3: eval.with.vis(ei, envir)
4: eval.with.vis(expr, envir, enclos)
5: setMethod("creator<-", "character", function(doc, value, ...) {

Selection: 0
> source("meta.R")
> creator(w)
[1] "Deborah Nolan"
> creator(w) = "Duncan Temple Lang"
Error in Rcompression:::readCurrentZipFile(h, password, len, mode) : 
  Failed to read element from ZIP archive: Configurations2/statusbar/

Enter a frame number, or 0 to exit   

 1: `creator<-`(`*tmp*`, value = "Duncan Temple Lang")
 2: `creator<-`(`*tmp*`, value = "Duncan Temple Lang")
 3: meta.R#53: `[[<-`(`*tmp*`, "meta.xml", value = "<?xml version=\"1.0
 4: meta.R#53: `[[<-`(`*tmp*`, "meta.xml", value = "<?xml version=\"1.0
 5: .local(x, i, j, ..., value = value)
 6: updateArchiveFiles(x, structure(list(value), names = as.character(i
 7: updateArchiveFiles(x, structure(list(value), names = as.character(i
 8: archive[, , mode = "raw"]
 9: archive[, , mode = "raw"]
10: .local(x, i, j, ..., drop = drop)
11: readAllZipEntries(x, password = password, mode = mode)
12: lapply(info[, "uncompressed_size"], function(len) {
13: FUN(c(39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10385, 532, 3529, 11708, 8572,
14: Rcompression:::readCurrentZipFile(h, password, len, mode)

Selection: 0
> w
Zip Archive: /Users/duncan/Books/XMLTechnologies/Rpackages/ROpenOffice/inst/sampleData/WordTable.odt 
 [1] "mimetype"                               
 [2] "Configurations2/statusbar/"             
 [3] "Configurations2/accelerator/current.xml"
 [4] "Configurations2/floater/"               
 [5] "Configurations2/popupmenu/"             
 [6] "Configurations2/progressbar/"           
 [7] "Configurations2/toolpanel/"             
 [8] "Configurations2/menubar/"               
 [9] "Configurations2/toolbar/"               
[10] "Configurations2/images/Bitmaps/"        
[11] "content.xml"                            
[12] "manifest.rdf"                           
[13] "ObjectReplacements/Object 1"            
[14] "styles.xml"                             
[15] "Object 1/content.xml"                   
[16] "Object 1/styles.xml"                    
[17] "Object 1/settings.xml"                  
[18] "meta.xml"                               
[19] "Thumbnails/thumbnail.png"               
[20] "settings.xml"                           
[21] "META-INF/manifest.xml"                  
> xmlParse(w[["content.xml"]])
<?xml version="1.0" encoding="UTF-8"?>
<office:document-content xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0" xmlns:style="urn:oasis:names:tc:opendocument:xmlns:style:1.0" xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0" xmlns:table="urn:oasis:names:tc:opendocument:xmlns:table:1.0" xmlns:draw="urn:oasis:names:tc:opendocument:xmlns:drawing:1.0" xmlns:fo="urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:meta="urn:oasis:names:tc:opendocument:xmlns:meta:1.0" xmlns:number="urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0" xmlns:svg="urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0" xmlns:chart="urn:oasis:names:tc:opendocument:xmlns:chart:1.0" xmlns:dr3d="urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0" xmlns:math="http://www.w3.org/1998/Math/MathML" xmlns:form="urn:oasis:names:tc:opendocument:xmlns:form:1.0" xmlns:script="urn:oasis:names:tc:opendocument:xmlns:script:1.0" xmlns:ooo="http://openoffice.org/2004/office" xmlns:ooow="http://openoffice.org/2004/writer" xmlns:oooc="http://openoffice.org/2004/calc" xmlns:dom="http://www.w3.org/2001/xml-events" xmlns:xforms="http://www.w3.org/2002/xforms" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:rpt="http://openoffice.org/2005/report" xmlns:of="urn:oasis:names:tc:opendocument:xmlns:of:1.2" xmlns:xhtml="http://www.w3.org/1999/xhtml" xmlns:grddl="http://www.w3.org/2003/g/data-view#" xmlns:tableooo="http://openoffice.org/2009/table" xmlns:field="urn:openoffice:names:experimental:ooo-ms-interop:xmlns:field:1.0" office:version="1.2" grddl:transformation="http://docs.oasis-open.org/office/1.2/xslt/odf2rdf.xsl">
  <office:scripts/>
  <office:font-face-decls>
    <style:font-face style:name="Lucida Sans1" svg:font-family="'Lucida Sans'"/>
    <style:font-face style:name="Times New Roman" svg:font-family="'Times New Roman'" style:font-family-generic="roman" style:font-pitch="variable"/>
    <style:font-face style:name="Arial" svg:font-family="Arial" style:font-family-generic="swiss" style:font-pitch="variable"/>
    <style:font-face style:name="Lucida Sans" svg:font-family="'Lucida Sans'" style:font-family-generic="system" style:font-pitch="variable"/>
    <style:font-face style:name="SimSun" svg:font-family="SimSun" style:font-family-generic="system" style:font-pitch="variable"/>
  </office:font-face-decls>
  <office:automatic-styles>
    <style:style style:name="Table1" style:family="table">
      <style:table-properties style:width="6.925in" table:align="margins"/>
    </style:style>
    <style:style style:name="Table1.A" style:family="table-column">
      <style:table-column-properties style:column-width="1.7313in" style:rel-column-width="16383*"/>
    </style:style>
    <style:style style:name="Table1.A1" style:family="table-cell">
      <style:table-cell-properties fo:padding="0.0382in" fo:border-left="0.0007in solid #000000" fo:border-right="none" fo:border-top="0.0007in solid #000000" fo:border-bottom="0.0007in solid #000000"/>
    </style:style>
    <style:style style:name="Table1.D1" style:family="table-cell">
      <style:table-cell-properties fo:padding="0.0382in" fo:border="0.0007in solid #000000"/>
    </style:style>
    <style:style style:name="Table1.A2" style:family="table-cell" style:data-style-name="N0">
      <style:table-cell-properties fo:padding="0.0382in" fo:border-left="0.0007in solid #000000" fo:border-right="none" fo:border-top="none" fo:border-bottom="0.0007in solid #000000"/>
    </style:style>
    <style:style style:name="Table1.D2" style:family="table-cell" style:data-style-name="N0">
      <style:table-cell-properties fo:padding="0.0382in" fo:border-left="0.0007in solid #000000" fo:border-right="0.0007in solid #000000" fo:border-top="none" fo:border-bottom="0.0007in solid #000000"/>
    </style:style>
    <style:style style:name="Table2" style:family="table">
      <style:table-properties style:width="6.925in" table:align="margins"/>
    </style:style>
    <style:style style:name="Table2.A" style:family="table-column">
      <style:table-column-properties style:column-width="3.4625in" style:rel-column-width="32767*"/>
    </style:style>
    <style:style style:name="Table2.A1" style:family="table-cell">
      <style:table-cell-properties fo:padding="0.0382in" fo:border-left="0.0007in solid #000000" fo:border-right="none" fo:border-top="0.0007in solid #000000" fo:border-bottom="0.0007in solid #000000"/>
    </style:style>
    <style:style style:name="Table2.B1" style:family="table-cell">
      <style:table-cell-properties fo:padding="0.0382in" fo:border="0.0007in solid #000000"/>
    </style:style>
    <style:style style:name="Table2.A2" style:family="table-cell">
      <style:table-cell-properties fo:padding="0.0382in" fo:border-left="0.0007in solid #000000" fo:border-right="none" fo:border-top="none" fo:border-bottom="0.0007in solid #000000"/>
    </style:style>
    <style:style style:name="Table2.B2" style:family="table-cell">
      <style:table-cell-properties fo:padding="0.0382in" fo:border-left="0.0007in solid #000000" fo:border-right="0.0007in solid #000000" fo:border-top="none" fo:border-bottom="0.0007in solid #000000"/>
    </style:style>
    <style:style style:name="P1" style:family="paragraph" style:parent-style-name="Table_20_Contents">
      <style:paragraph-properties fo:text-align="center" style:justify-single-word="false"/>
    </style:style>
    <style:style style:name="P2" style:family="paragraph" style:parent-style-name="Table_20_Contents">
      <style:paragraph-properties fo:text-align="end" style:justify-single-word="false"/>
    </style:style>
    <style:style style:name="fr1" style:family="graphic" style:parent-style-name="OLE">
      <style:graphic-properties style:horizontal-pos="center" style:horizontal-rel="paragraph" draw:ole-draw-aspect="1"/>
    </style:style>
    <number:number-style style:name="N0">
      <number:number number:min-integer-digits="1"/>
    </number:number-style>
  </office:automatic-styles>
  <office:body>
    <office:text>
      <text:sequence-decls>
        <text:sequence-decl text:display-outline-level="0" text:name="Illustration"/>
        <text:sequence-decl text:display-outline-level="0" text:name="Table"/>
        <text:sequence-decl text:display-outline-level="0" text:name="Text"/>
        <text:sequence-decl text:display-outline-level="0" text:name="Drawing"/>
      </text:sequence-decls>
      <text:p text:style-name="Standard">This is an example of an OpenOffice word processing document with a few tables.</text:p>
      <text:p text:style-name="Standard">This is cut and pasted from a spreadsheet.</text:p>
      <text:p text:style-name="Standard"><draw:frame draw:style-name="fr1" draw:name="Object1" text:anchor-type="paragraph" svg:width="1.7783in" svg:height="1.4638in" draw:z-index="0"><draw:object xlink:href="./Object 1" xlink:type="simple" xlink:show="embed" xlink:actuate="onLoad"/><draw:image xlink:href="./ObjectReplacements/Object 1" xlink:type="simple" xlink:show="embed" xlink:actuate="onLoad"/></draw:frame>This table below is manually constructed:</text:p>
      <table:table table:name="Table1" table:style-name="Table1">
        <table:table-column table:style-name="Table1.A" table:number-columns-repeated="4"/>
        <table:table-row>
          <table:table-cell table:style-name="Table1.A1" office:value-type="string">
            <text:p text:style-name="P1">A</text:p>
          </table:table-cell>
          <table:table-cell table:style-name="Table1.A1" office:value-type="string">
            <text:p text:style-name="P1">B</text:p>
          </table:table-cell>
          <table:table-cell table:style-name="Table1.A1" office:value-type="string">
            <text:p text:style-name="P1">C</text:p>
          </table:table-cell>
          <table:table-cell table:style-name="Table1.D1" office:value-type="string">
            <text:p text:style-name="P1">D</text:p>
          </table:table-cell>
        </table:table-row>
        <table:table-row>
          <table:table-cell table:style-name="Table1.A2" office:value-type="float" office:value="10">
            <text:p text:style-name="P2">10</text:p>
          </table:table-cell>
          <table:table-cell table:style-name="Table1.A2" office:value-type="float" office:value="20">
            <text:p text:style-name="P2">20</text:p>
          </table:table-cell>
          <table:table-cell table:style-name="Table1.A2" office:value-type="float" office:value="30">
            <text:p text:style-name="P2">30</text:p>
          </table:table-cell>
          <table:table-cell table:style-name="Table1.D2" office:value-type="float" office:value="40">
            <text:p text:style-name="P2">40</text:p>
          </table:table-cell>
        </table:table-row>
        <table:table-row>
          <table:table-cell table:style-name="Table1.A2" office:value-type="float" office:value="100">
            <text:p text:style-name="P2">100</text:p>
          </table:table-cell>
          <table:table-cell table:style-name="Table1.A2" office:value-type="float" office:value="110">
            <text:p text:style-name="P2">110</text:p>
          </table:table-cell>
          <table:table-cell table:style-name="Table1.A2" office:value-type="float" office:value="120">
            <text:p text:style-name="P2">120</text:p>
          </table:table-cell>
          <table:table-cell table:style-name="Table1.D2" office:value-type="float" office:value="130">
            <text:p text:style-name="P2">130</text:p>
          </table:table-cell>
        </table:table-row>
      </table:table>
      <text:p text:style-name="Standard"/>
      <text:p text:style-name="Standard">This is a different table</text:p>
      <table:table table:name="Table2" table:style-name="Table2">
        <table:table-column table:style-name="Table2.A" table:number-columns-repeated="2"/>
        <table:table-header-rows>
          <table:table-row>
            <table:table-cell table:style-name="Table2.A1" office:value-type="string">
              <text:p text:style-name="Table_20_Heading">Element</text:p>
            </table:table-cell>
            <table:table-cell table:style-name="Table2.B1" office:value-type="string">
              <text:p text:style-name="Table_20_Heading">Description</text:p>
            </table:table-cell>
          </table:table-row>
        </table:table-header-rows>
        <table:table-row>
          <table:table-cell table:style-name="Table2.A2" office:value-type="string">
            <text:p text:style-name="Table_20_Contents">HEAD</text:p>
          </table:table-cell>
          <table:table-cell table:style-name="Table2.B2" office:value-type="string">
            <text:p text:style-name="Table_20_Contents">The meta-data about the document and the place we include CSS and JavaScript code.</text:p>
          </table:table-cell>
        </table:table-row>
        <table:table-row>
          <table:table-cell table:style-name="Table2.A2" office:value-type="string">
            <text:p text:style-name="Table_20_Contents">BODY</text:p>
          </table:table-cell>
          <table:table-cell table:style-name="Table2.B2" office:value-type="string">
            <text:p text:style-name="Table_20_Contents">The part of the document that is displayed.</text:p>
          </table:table-cell>
        </table:table-row>
      </table:table>
      <text:p text:style-name="Standard"/>
    </office:text>
  </office:body>
</office:document-content>
 
> class(xmlParse(w[["content.xml"]]))
[1] "XMLInternalDocument" "XMLAbstractDocument" "oldClass"           
> source("wordproc.R")
> getTitle(w)
list()
> getTitle(w)
AttValue: ' expected
attributes construct error
Couldn't find end of Start Tag p line 2
Premature end of data in tag text line 2
Premature end of data in tag body line 2
Premature end of data in tag document-content line 2

Enter a frame number, or 0 to exit   

1: getTitle(w)
2: getTitle(w)
3: wordproc.R#15: getTitle(xmlParse(doc[["content.xml"]]), subtitle, .
4: wordproc.R#15: xmlParse(doc[["content.xml"]])
5: function (msg, ...) 

Selection: 0
Error in getTitle(xmlParse(doc[["content.xml"]]), subtitle, ...) : 
  error in evaluating the argument 'doc' in selecting a method for function 'getTitle'

Enter a frame number, or 0 to exit   

1: getTitle(w)
2: getTitle(w)
3: wordproc.R#15: getTitle(xmlParse(doc[["content.xml"]]), subtitle, .

Selection: 0
> getTitle("../inst/sampleData/WordTable.odt")
[1] "Illustrating Tables"
> source("wordproc.R")
> getTables("../inst/sampleData/WordTable.odt")
Error in UseMethod("xpathApply") : 
  no applicable method for 'xpathApply' applied to an object of class "c('OOText', 'OODocument', 'ZipFileArchive', 'character', 'ZipArchive', 'vector', 'data.frameRowLabels', 'SuperClassMethod')"

Enter a frame number, or 0 to exit   

1: getTables("../inst/sampleData/WordTable.odt")
2: getTables("../inst/sampleData/WordTable.odt")
3: getTables(ooDoc(doc), which, ...)
4: getTables(ooDoc(doc), which, ...)
5: wordproc.R#38: getNodeSet(doc, "//table:table", OpenOfficeNamespace
6: xpathApply(doc, path, fun, ..., namespaces = namespaces, sessionEnc

Selection: 0
> source("wordproc.R")
> getTables("../inst/sampleData/WordTable.odt")
[[1]]
NULL

[[2]]
NULL

> source("wordproc.R")
> getTables("../inst/sampleData/WordTable.odt")
Called from: getTables(xmlParse(doc[["content.xml"]]), which, ...)
Browse[1]> nodes
[[1]]
<table:table table:name="Table1" table:style-name="Table1">
  <table:table-column table:style-name="Table1.A" table:number-columns-repeated="4"/>
  <table:table-row>
    <table:table-cell table:style-name="Table1.A1" office:value-type="string">
      <text:p text:style-name="P1">A</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Table1.A1" office:value-type="string">
      <text:p text:style-name="P1">B</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Table1.A1" office:value-type="string">
      <text:p text:style-name="P1">C</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Table1.D1" office:value-type="string">
      <text:p text:style-name="P1">D</text:p>
    </table:table-cell>
  </table:table-row>
  <table:table-row>
    <table:table-cell table:style-name="Table1.A2" office:value-type="float" office:value="10">
      <text:p text:style-name="P2">10</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Table1.A2" office:value-type="float" office:value="20">
      <text:p text:style-name="P2">20</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Table1.A2" office:value-type="float" office:value="30">
      <text:p text:style-name="P2">30</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Table1.D2" office:value-type="float" office:value="40">
      <text:p text:style-name="P2">40</text:p>
    </table:table-cell>
  </table:table-row>
  <table:table-row>
    <table:table-cell table:style-name="Table1.A2" office:value-type="float" office:value="100">
      <text:p text:style-name="P2">100</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Table1.A2" office:value-type="float" office:value="110">
      <text:p text:style-name="P2">110</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Table1.A2" office:value-type="float" office:value="120">
      <text:p text:style-name="P2">120</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Table1.D2" office:value-type="float" office:value="130">
      <text:p text:style-name="P2">130</text:p>
    </table:table-cell>
  </table:table-row>
</table:table> 

[[2]]
<table:table table:name="Table2" table:style-name="Table2">
  <table:table-column table:style-name="Table2.A" table:number-columns-repeated="2"/>
  <table:table-header-rows>
    <table:table-row>
      <table:table-cell table:style-name="Table2.A1" office:value-type="string">
        <text:p text:style-name="Table_20_Heading">Element</text:p>
      </table:table-cell>
      <table:table-cell table:style-name="Table2.B1" office:value-type="string">
        <text:p text:style-name="Table_20_Heading">Description</text:p>
      </table:table-cell>
    </table:table-row>
  </table:table-header-rows>
  <table:table-row>
    <table:table-cell table:style-name="Table2.A2" office:value-type="string">
      <text:p text:style-name="Table_20_Contents">HEAD</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Table2.B2" office:value-type="string">
      <text:p text:style-name="Table_20_Contents">The meta-data about the document and the place we include CSS and JavaScript code.</text:p>
    </table:table-cell>
  </table:table-row>
  <table:table-row>
    <table:table-cell table:style-name="Table2.A2" office:value-type="string">
      <text:p text:style-name="Table_20_Contents">BODY</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Table2.B2" office:value-type="string">
      <text:p text:style-name="Table_20_Contents">The part of the document that is displayed.</text:p>
    </table:table-cell>
  </table:table-row>
</table:table> 

attr(,"class")
[1] "XMLNodeSet"
Browse[1]> c
[[1]]
NULL

[[2]]
NULL

> source("wordproc.R")
> getTables("../inst/sampleData/WordTable.odt")
*** output flushed ***
> getTables("../inst/sampleData/WordTable.odt")
[[1]]
<table:table table:name="Table1" table:style-name="Table1">
  <table:table-column table:style-name="Table1.A" table:number-columns-repeated="4"/>
  <table:table-row>
    <table:table-cell table:style-name="Table1.A1" office:value-type="string">
      <text:p text:style-name="P1">A</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Table1.A1" office:value-type="string">
      <text:p text:style-name="P1">B</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Table1.A1" office:value-type="string">
      <text:p text:style-name="P1">C</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Table1.D1" office:value-type="string">
      <text:p text:style-name="P1">D</text:p>
    </table:table-cell>
  </table:table-row>
  <table:table-row>
    <table:table-cell table:style-name="Table1.A2" office:value-type="float" office:value="10">
      <text:p text:style-name="P2">10</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Table1.A2" office:value-type="float" office:value="20">
      <text:p text:style-name="P2">20</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Table1.A2" office:value-type="float" office:value="30">
      <text:p text:style-name="P2">30</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Table1.D2" office:value-type="float" office:value="40">
      <text:p text:style-name="P2">40</text:p>
    </table:table-cell>
  </table:table-row>
  <table:table-row>
    <table:table-cell table:style-name="Table1.A2" office:value-type="float" office:value="100">
      <text:p text:style-name="P2">100</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Table1.A2" office:value-type="float" office:value="110">
      <text:p text:style-name="P2">110</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Table1.A2" office:value-type="float" office:value="120">
      <text:p text:style-name="P2">120</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Table1.D2" office:value-type="float" office:value="130">
      <text:p text:style-name="P2">130</text:p>
    </table:table-cell>
  </table:table-row>
</table:table> 

[[2]]
<table:table table:name="Table2" table:style-name="Table2">
  <table:table-column table:style-name="Table2.A" table:number-columns-repeated="2"/>
  <table:table-header-rows>
    <table:table-row>
      <table:table-cell table:style-name="Table2.A1" office:value-type="string">
        <text:p text:style-name="Table_20_Heading">Element</text:p>
      </table:table-cell>
      <table:table-cell table:style-name="Table2.B1" office:value-type="string">
        <text:p text:style-name="Table_20_Heading">Description</text:p>
      </table:table-cell>
    </table:table-row>
  </table:table-header-rows>
  <table:table-row>
    <table:table-cell table:style-name="Table2.A2" office:value-type="string">
      <text:p text:style-name="Table_20_Contents">HEAD</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Table2.B2" office:value-type="string">
      <text:p text:style-name="Table_20_Contents">The meta-data about the document and the place we include CSS and JavaScript code.</text:p>
    </table:table-cell>
  </table:table-row>
  <table:table-row>
    <table:table-cell table:style-name="Table2.A2" office:value-type="string">
      <text:p text:style-name="Table_20_Contents">BODY</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Table2.B2" office:value-type="string">
      <text:p text:style-name="Table_20_Contents">The part of the document that is displayed.</text:p>
    </table:table-cell>
  </table:table-row>
</table:table> 

[[3]]
<table:table table:name="Table3" table:style-name="Table3">
  <table:table-column table:style-name="Table3.A" table:number-columns-repeated="5"/>
  <table:table-row>
    <table:table-cell table:style-name="Table3.A1" office:value-type="float" office:value="10">
      <text:p text:style-name="Table_20_Contents">10</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Table3.A1" office:value-type="float" office:value="20">
      <text:p text:style-name="Table_20_Contents">20</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Table3.A1" office:value-type="float" office:value="30">
      <text:p text:style-name="Table_20_Contents">30</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Table3.D1" office:value-type="string">
      <text:p text:style-name="Table_20_Contents"/>
    </table:table-cell>
    <table:table-cell table:style-name="Table3.E1" office:value-type="float" office:value="50">
      <text:p text:style-name="Table_20_Contents">50</text:p>
    </table:table-cell>
  </table:table-row>
  <table:table-row>
    <table:table-cell table:style-name="Table3.A2" office:value-type="float" office:value="1">
      <text:p text:style-name="Table_20_Contents">1</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Table3.A2" office:value-type="float" office:value="2">
      <text:p text:style-name="Table_20_Contents">2</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Table3.C2" office:value-type="string">
      <text:p text:style-name="Table_20_Contents"/>
    </table:table-cell>
    <table:table-cell table:style-name="Table3.C2" office:value-type="string">
      <text:p text:style-name="Table_20_Contents"/>
    </table:table-cell>
    <table:table-cell table:style-name="Table3.E2" office:value-type="string">
      <text:p text:style-name="Table_20_Contents"/>
    </table:table-cell>
  </table:table-row>
</table:table> 

attr(,"class")
[1] "XMLNodeSet"
> getTables("../inst/sampleData/WordTable.odt", 3)
[[1]]
<table:table table:name="Table3" table:style-name="Table3">
  <table:table-column table:style-name="Table3.A" table:number-columns-repeated="5"/>
  <table:table-row>
    <table:table-cell table:style-name="Table3.A1" office:value-type="float" office:value="10">
      <text:p text:style-name="Table_20_Contents">10</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Table3.A1" office:value-type="float" office:value="20">
      <text:p text:style-name="Table_20_Contents">20</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Table3.A1" office:value-type="float" office:value="30">
      <text:p text:style-name="Table_20_Contents">30</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Table3.D1" office:value-type="string">
      <text:p text:style-name="Table_20_Contents"/>
    </table:table-cell>
    <table:table-cell table:style-name="Table3.E1" office:value-type="float" office:value="50">
      <text:p text:style-name="Table_20_Contents">50</text:p>
    </table:table-cell>
  </table:table-row>
  <table:table-row>
    <table:table-cell table:style-name="Table3.A2" office:value-type="float" office:value="1">
      <text:p text:style-name="Table_20_Contents">1</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Table3.A2" office:value-type="float" office:value="2">
      <text:p text:style-name="Table_20_Contents">2</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Table3.C2" office:value-type="string">
      <text:p text:style-name="Table_20_Contents"/>
    </table:table-cell>
    <table:table-cell table:style-name="Table3.C2" office:value-type="string">
      <text:p text:style-name="Table_20_Contents"/>
    </table:table-cell>
    <table:table-cell table:style-name="Table3.E2" office:value-type="string">
      <text:p text:style-name="Table_20_Contents"/>
    </table:table-cell>
  </table:table-row>
</table:table> 

> source("wordproc.R")
> tb = getTables("../inst/sampleData/WordTable.odt", 3)[[1]]
> convertTable(tb)
Called from: convertTable(tb)
Browse[1]> types
     table-cell table-cell table-cell table-cell table-cell
[1,] "float"    "float"    "float"    "string"   "float"   
[2,] "float"    "float"    "string"   "string"   "string"  
Browse[1]> values
     table-cell table-cell table-cell table-cell table-cell
[1,] "10"       "20"       "30"       ""         "50"      
[2,] "1"        "2"        ""         ""         ""        
Browse[1]> 71/166
[1] 0.4277108
Browse[1]> 18/166
[1] 0.1084337
Browse[1]> 18/71
[1] 0.2535211
Browse[1]> c
     table-cell table-cell table-cell table-cell table-cell
[1,] "10"       "20"       "30"       ""         "50"      
[2,] "1"        "2"        ""         ""         ""        
> 