1) boundsheet
field order fixed
2) `WorkSheet.Visibility` implemented (and typed constants) 3) `WorkSheet.Selected` implemented - most of cases require to parse _current_ sheet, not the first one 4) `WorkSheet.rightToLeft` property for future use (not implemented cause no RtL files present)
This commit is contained in:
parent
539786826c
commit
10ff2752d9
@ -246,7 +246,7 @@ func (w *WorkBook) get_string(buf io.ReadSeeker, size uint16) (res string, err e
|
|||||||
|
|
||||||
func (w *WorkBook) addSheet(sheet *boundsheet, buf io.ReadSeeker) {
|
func (w *WorkBook) addSheet(sheet *boundsheet, buf io.ReadSeeker) {
|
||||||
name, _ := w.get_string(buf, uint16(sheet.Name))
|
name, _ := w.get_string(buf, uint16(sheet.Name))
|
||||||
w.sheets = append(w.sheets, &WorkSheet{bs: sheet, Name: name, wb: w})
|
w.sheets = append(w.sheets, &WorkSheet{bs: sheet, Name: name, wb: w, Visibility: TWorkSheetVisibility(sheet.Visible)})
|
||||||
}
|
}
|
||||||
|
|
||||||
//reading a sheet from the compress file to memory, you should call this before you try to get anything from sheet
|
//reading a sheet from the compress file to memory, you should call this before you try to get anything from sheet
|
||||||
|
21
worksheet.go
21
worksheet.go
@ -7,10 +7,18 @@ import (
|
|||||||
"unicode/utf16"
|
"unicode/utf16"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
type TWorkSheetVisibility byte
|
||||||
|
|
||||||
|
const (
|
||||||
|
WorkSheetVisible TWorkSheetVisibility = 0
|
||||||
|
WorkSheetHidden TWorkSheetVisibility = 1
|
||||||
|
WorkSheetVeryHidden TWorkSheetVisibility = 2
|
||||||
|
)
|
||||||
|
|
||||||
type boundsheet struct {
|
type boundsheet struct {
|
||||||
Filepos uint32
|
Filepos uint32
|
||||||
|
Visible TWorkSheetVisibility
|
||||||
Type byte
|
Type byte
|
||||||
Visible byte
|
|
||||||
Name byte
|
Name byte
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -19,10 +27,13 @@ type WorkSheet struct {
|
|||||||
bs *boundsheet
|
bs *boundsheet
|
||||||
wb *WorkBook
|
wb *WorkBook
|
||||||
Name string
|
Name string
|
||||||
|
Selected bool
|
||||||
|
Visibility TWorkSheetVisibility
|
||||||
rows map[uint16]*Row
|
rows map[uint16]*Row
|
||||||
//NOTICE: this is the max row number of the sheet, so it should be count -1
|
//NOTICE: this is the max row number of the sheet, so it should be count -1
|
||||||
MaxRow uint16
|
MaxRow uint16
|
||||||
parsed bool
|
parsed bool
|
||||||
|
rightToLeft bool
|
||||||
}
|
}
|
||||||
|
|
||||||
func (w *WorkSheet) Row(i int) *Row {
|
func (w *WorkSheet) Row(i int) *Row {
|
||||||
@ -56,6 +67,14 @@ func (w *WorkSheet) parseBof(buf io.ReadSeeker, b *bof, pre *bof) *bof {
|
|||||||
switch b.Id {
|
switch b.Id {
|
||||||
// case 0x0E5: //MERGEDCELLS
|
// case 0x0E5: //MERGEDCELLS
|
||||||
// ws.mergedCells(buf)
|
// ws.mergedCells(buf)
|
||||||
|
case 0x23E: // WINDOW2
|
||||||
|
var sheetOptions, firstVisibleRow, firstVisibleColumn uint16
|
||||||
|
binary.Read(buf, binary.LittleEndian, &sheetOptions)
|
||||||
|
binary.Read(buf, binary.LittleEndian, &firstVisibleRow) // not valuable
|
||||||
|
binary.Read(buf, binary.LittleEndian, &firstVisibleColumn) // not valuable
|
||||||
|
buf.Seek(int64(b.Size)-2*3, 1)
|
||||||
|
w.rightToLeft = (sheetOptions & 0x40) != 0
|
||||||
|
w.Selected = (sheetOptions & 0x400) != 0
|
||||||
case 0x208: //ROW
|
case 0x208: //ROW
|
||||||
r := new(rowInfo)
|
r := new(rowInfo)
|
||||||
binary.Read(buf, binary.LittleEndian, r)
|
binary.Read(buf, binary.LittleEndian, r)
|
||||||
|
Loading…
Reference in New Issue
Block a user