lib.go 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193
  1. package xlsx
  2. import (
  3. "archive/zip"
  4. "io"
  5. "os"
  6. "xml"
  7. )
  8. type XLSXV struct {
  9. Data string "chardata"
  10. }
  11. type XLSXC struct {
  12. R string "attr"
  13. T string "attr"
  14. V XLSXV
  15. }
  16. type XLSXRow struct {
  17. R string "attr"
  18. Spans string "attr"
  19. C []XLSXC
  20. }
  21. type XLSXSheetData struct {
  22. Row []XLSXRow
  23. }
  24. type XLSXSheetFormatPr struct {
  25. BaseColWidth string "attr"
  26. DefaultRowHeight string "attr"
  27. }
  28. type XLSXSelection struct {
  29. ActiveCell string "attr"
  30. SQRef string "attr"
  31. }
  32. type XLSXSheetView struct {
  33. TabSelected string "attr"
  34. WorkbookViewID string "attr"
  35. Selection XLSXSelection
  36. }
  37. type XLSXSheetViews struct {
  38. SheetView []XLSXSheetView
  39. }
  40. type XLSXDimension struct {
  41. Ref string "attr"
  42. }
  43. type XLSXWorksheet struct {
  44. Dimension XLSXDimension
  45. SheetViews XLSXSheetViews
  46. SheetFormatPr XLSXSheetFormatPr
  47. SheetData XLSXSheetData
  48. }
  49. type XLSXT struct {
  50. Data string "chardata"
  51. }
  52. type XLSXSI struct {
  53. T XLSXT
  54. }
  55. type XLSXSST struct {
  56. Count string "attr"
  57. UniqueCount string "attr"
  58. SI []XLSXSI
  59. }
  60. type XLSXFileVersion struct {
  61. AppName string "attr"
  62. LastEdited string "attr"
  63. LowestEdited string "attr"
  64. RupBuild string "attr"
  65. }
  66. type XLSXWorkbookPr struct {
  67. DefaultThemeVersion string "attr"
  68. }
  69. type XLSXWorkBookView struct {
  70. XWindow string "attr"
  71. YWindow string "attr"
  72. WindowWidth string "attr"
  73. WindowHeight string "attr"
  74. }
  75. type XLSXSheet struct {
  76. Name string "attr"
  77. SheetId string "attr"
  78. Id string "attr"
  79. }
  80. type XLSXDefinedName struct {
  81. Data string "chardata"
  82. Name string "attr"
  83. LocalSheetID string "attr"
  84. }
  85. type XLSXCalcPr struct {
  86. CalcId string "attr"
  87. }
  88. type XLSXBookViews struct {
  89. WorkBookView []XLSXWorkBookView
  90. }
  91. type XLSXSheets struct {
  92. Sheet []XLSXSheet
  93. }
  94. type XLSXDefinedNames struct {
  95. DefinedName []XLSXDefinedName
  96. }
  97. type XLSXWorkbook struct {
  98. FileVersion XLSXFileVersion
  99. WorkbookPr XLSXWorkbookPr
  100. BookViews XLSXBookViews
  101. Sheets XLSXSheets
  102. DefinedNames XLSXDefinedNames
  103. CalcPr XLSXCalcPr
  104. }
  105. type XLSXSheetStruct struct {
  106. }
  107. type XLSXFile struct {
  108. Sheets map [string]*XLSXSheetStruct
  109. }
  110. type XLSXFileInterface interface {
  111. GetSheet(sheetname string) XLSXSheetStruct
  112. }
  113. func MakeSharedStringRefTable(source *XLSXSST) []string {
  114. reftable := make([]string, len(source.SI))
  115. for i, si := range source.SI {
  116. reftable[i] = si.T.Data
  117. }
  118. return reftable
  119. }
  120. func readSheetsFromZipFile(f *zip.File) os.Error {
  121. var workbook *XLSXWorkbook
  122. var error os.Error
  123. var rc io.ReadCloser
  124. workbook = new(XLSXWorkbook)
  125. rc, error = f.Open()
  126. if error != nil {
  127. return error
  128. }
  129. error = xml.Unmarshal(rc, workbook)
  130. if error != nil {
  131. return error
  132. }
  133. // for _, rawsheet := range workbook.Sheets.Sheet {
  134. // sheet := new(XLSXSheetStruct)
  135. // }
  136. return nil
  137. }
  138. func OpenXLSXFile(filename string) (x *XLSXFile, e os.Error) {
  139. var f *zip.ReadCloser
  140. var error os.Error
  141. var xlsxFile *XLSXFile
  142. var v *zip.File
  143. f, error = zip.OpenReader(filename)
  144. if error != nil {
  145. return nil, error
  146. }
  147. for _, v = range f.File {
  148. if v.Name == "xl/workbook.xml" {
  149. readSheetsFromZipFile(v)
  150. }
  151. }
  152. xlsxFile = new(XLSXFile)
  153. f.Close()
  154. return xlsxFile, nil
  155. }