优化代码提高可读性
This commit is contained in:
parent
ce9ee3fa6e
commit
fe3fe25c72
37
workbook.go
37
workbook.go
@ -78,10 +78,11 @@ func (wb *WorkBook) parseBof(buf io.ReadSeeker, b *bof, pre *bof, offset_pre int
|
|||||||
wb.Type = bif.Type
|
wb.Type = bif.Type
|
||||||
case 0x0042: // CODEPAGE
|
case 0x0042: // CODEPAGE
|
||||||
binary.Read(item, binary.LittleEndian, &wb.Codepage)
|
binary.Read(item, binary.LittleEndian, &wb.Codepage)
|
||||||
case 0x3C: // CONTINUE
|
case 0x003c: // SST CONTINUE identifier
|
||||||
if pre.Id == 0xfc {
|
if pre.Id == 0x00fc {
|
||||||
var size uint16
|
|
||||||
var err error
|
var err error
|
||||||
|
var str string
|
||||||
|
var size uint16
|
||||||
if wb.continue_utf16 >= 1 {
|
if wb.continue_utf16 >= 1 {
|
||||||
size = wb.continue_utf16
|
size = wb.continue_utf16
|
||||||
wb.continue_utf16 = 0
|
wb.continue_utf16 = 0
|
||||||
@ -89,9 +90,8 @@ func (wb *WorkBook) parseBof(buf io.ReadSeeker, b *bof, pre *bof, offset_pre int
|
|||||||
err = binary.Read(item, binary.LittleEndian, &size)
|
err = binary.Read(item, binary.LittleEndian, &size)
|
||||||
}
|
}
|
||||||
for err == nil && offset_pre < len(wb.sst) {
|
for err == nil && offset_pre < len(wb.sst) {
|
||||||
var str string
|
|
||||||
if size > 0 {
|
if size > 0 {
|
||||||
str, err = wb.parseString(item, size)
|
str, err = wb.parseString(item, size, "sst continue")
|
||||||
wb.sst[offset_pre] = wb.sst[offset_pre] + str
|
wb.sst[offset_pre] = wb.sst[offset_pre] + str
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -106,17 +106,17 @@ func (wb *WorkBook) parseBof(buf io.ReadSeeker, b *bof, pre *bof, offset_pre int
|
|||||||
offset = offset_pre
|
offset = offset_pre
|
||||||
after = pre
|
after = pre
|
||||||
after_using = b
|
after_using = b
|
||||||
case 0x00FC: // SST
|
case 0x00fc: // SST identifier
|
||||||
info := new(SstInfo)
|
info := new(SstInfo)
|
||||||
binary.Read(item, binary.LittleEndian, info)
|
binary.Read(item, binary.LittleEndian, info)
|
||||||
wb.sst = make([]string, info.Count)
|
wb.sst = make([]string, info.Count)
|
||||||
|
var err error
|
||||||
|
var str string
|
||||||
var size uint16
|
var size uint16
|
||||||
var i = 0
|
var i = 0
|
||||||
for ; i < int(info.Count); i++ {
|
for ; i < int(info.Count); i++ {
|
||||||
var err error
|
|
||||||
if err = binary.Read(item, binary.LittleEndian, &size); err == nil {
|
if err = binary.Read(item, binary.LittleEndian, &size); err == nil {
|
||||||
var str string
|
str, err = wb.parseString(item, size, "sst")
|
||||||
str, err = wb.parseString(item, size)
|
|
||||||
wb.sst[i] = wb.sst[i] + str
|
wb.sst[i] = wb.sst[i] + str
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -150,10 +150,10 @@ func (wb *WorkBook) parseBof(buf io.ReadSeeker, b *bof, pre *bof, offset_pre int
|
|||||||
f := new(FontInfo)
|
f := new(FontInfo)
|
||||||
binary.Read(item, binary.LittleEndian, f)
|
binary.Read(item, binary.LittleEndian, f)
|
||||||
wb.addFont(f, item)
|
wb.addFont(f, item)
|
||||||
case 0x041E: //FORMAT
|
case 0x041e: //FORMAT
|
||||||
format := new(Format)
|
format := new(Format)
|
||||||
binary.Read(item, binary.LittleEndian, &format.Head)
|
binary.Read(item, binary.LittleEndian, &format.Head)
|
||||||
if raw, err := wb.parseString(item, format.Head.Size); nil == err && "" != raw {
|
if raw, err := wb.parseString(item, format.Head.Size, "format"); nil == err && "" != raw {
|
||||||
format.Raw = strings.Split(raw, ";")
|
format.Raw = strings.Split(raw, ";")
|
||||||
} else {
|
} else {
|
||||||
format.Raw = []string{}
|
format.Raw = []string{}
|
||||||
@ -171,7 +171,7 @@ func (w *WorkBook) addXf(xf XF) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (w *WorkBook) addFont(font *FontInfo, buf io.ReadSeeker) {
|
func (w *WorkBook) addFont(font *FontInfo, buf io.ReadSeeker) {
|
||||||
name, _ := w.parseString(buf, uint16(font.NameB))
|
name, _ := w.parseString(buf, uint16(font.NameB), "font")
|
||||||
w.Fonts = append(w.Fonts, Font{Info: font, Name: name})
|
w.Fonts = append(w.Fonts, Font{Info: font, Name: name})
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -180,7 +180,7 @@ func (w *WorkBook) addFormat(format *Format) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (w *WorkBook) addSheet(sheet *boundsheet, buf io.ReadSeeker) {
|
func (w *WorkBook) addSheet(sheet *boundsheet, buf io.ReadSeeker) {
|
||||||
name, _ := w.parseString(buf, uint16(sheet.Name))
|
name, _ := w.parseString(buf, uint16(sheet.Name), "sheet")
|
||||||
w.sheets = append(w.sheets, &WorkSheet{id: len(w.sheets), bs: sheet, Name: name, wb: w})
|
w.sheets = append(w.sheets, &WorkSheet{id: len(w.sheets), bs: sheet, Name: name, wb: w})
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -204,7 +204,7 @@ func (w *WorkBook) prepareSheet(sheet *WorkSheet) {
|
|||||||
sheet.parse(w.rs)
|
sheet.parse(w.rs)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (w *WorkBook) parseString(buf io.ReadSeeker, size uint16) (res string, err error) {
|
func (w *WorkBook) parseString(buf io.ReadSeeker, size uint16, from string) (res string, err error) {
|
||||||
if w.Is5ver {
|
if w.Is5ver {
|
||||||
var bts = make([]byte, size)
|
var bts = make([]byte, size)
|
||||||
_, err = buf.Read(bts)
|
_, err = buf.Read(bts)
|
||||||
@ -214,18 +214,24 @@ func (w *WorkBook) parseString(buf io.ReadSeeker, size uint16) (res string, err
|
|||||||
var phonetic_size = uint32(0)
|
var phonetic_size = uint32(0)
|
||||||
var flag byte
|
var flag byte
|
||||||
err = binary.Read(buf, binary.LittleEndian, &flag)
|
err = binary.Read(buf, binary.LittleEndian, &flag)
|
||||||
|
|
||||||
|
// Rich-Text settings (richtext), 0 = Does not contain Rich-Text settings, 1 = Contains Rich-Text settings
|
||||||
if flag&0x8 != 0 {
|
if flag&0x8 != 0 {
|
||||||
err = binary.Read(buf, binary.LittleEndian, &richtext_num)
|
err = binary.Read(buf, binary.LittleEndian, &richtext_num)
|
||||||
} else if w.continue_rich > 0 {
|
} else if w.continue_rich > 0 {
|
||||||
richtext_num = w.continue_rich
|
richtext_num = w.continue_rich
|
||||||
w.continue_rich = 0
|
w.continue_rich = 0
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Asian phonetic settings, 0 = Does not contain Asian phonetic settings, 1 = Contains Asian phonetic settings
|
||||||
if flag&0x4 != 0 {
|
if flag&0x4 != 0 {
|
||||||
err = binary.Read(buf, binary.LittleEndian, &phonetic_size)
|
err = binary.Read(buf, binary.LittleEndian, &phonetic_size)
|
||||||
} else if w.continue_apsb > 0 {
|
} else if w.continue_apsb > 0 {
|
||||||
phonetic_size = w.continue_apsb
|
phonetic_size = w.continue_apsb
|
||||||
w.continue_apsb = 0
|
w.continue_apsb = 0
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Character compression, 0 = Compressed (8-bit characters), 1 = Uncompressed (16-bit characters)
|
||||||
if flag&0x1 != 0 {
|
if flag&0x1 != 0 {
|
||||||
var bts = make([]uint16, size)
|
var bts = make([]uint16, size)
|
||||||
var i = uint16(0)
|
var i = uint16(0)
|
||||||
@ -238,8 +244,8 @@ func (w *WorkBook) parseString(buf io.ReadSeeker, size uint16) (res string, err
|
|||||||
w.continue_utf16 = size - i + 1
|
w.continue_utf16 = size - i + 1
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
var bts = make([]byte, size)
|
|
||||||
var n int
|
var n int
|
||||||
|
var bts = make([]byte, size)
|
||||||
n, err = buf.Read(bts)
|
n, err = buf.Read(bts)
|
||||||
if uint16(n) < size {
|
if uint16(n) < size {
|
||||||
w.continue_utf16 = size - uint16(n)
|
w.continue_utf16 = size - uint16(n)
|
||||||
@ -253,6 +259,7 @@ func (w *WorkBook) parseString(buf io.ReadSeeker, size uint16) (res string, err
|
|||||||
runes := utf16.Decode(bts1)
|
runes := utf16.Decode(bts1)
|
||||||
res = strings.Trim(string(runes), "\r\n\t ")
|
res = strings.Trim(string(runes), "\r\n\t ")
|
||||||
}
|
}
|
||||||
|
|
||||||
if richtext_num > 0 {
|
if richtext_num > 0 {
|
||||||
var bts []byte
|
var bts []byte
|
||||||
var ss int64
|
var ss int64
|
||||||
|
@ -105,7 +105,7 @@ func (w *WorkSheet) parseBof(buf io.ReadSeeker, b *bof, pre *bof) *bof {
|
|||||||
binary.Read(buf, binary.LittleEndian, &c.Btl)
|
binary.Read(buf, binary.LittleEndian, &c.Btl)
|
||||||
binary.Read(buf, binary.LittleEndian, &c.Btc)
|
binary.Read(buf, binary.LittleEndian, &c.Btc)
|
||||||
|
|
||||||
var fms, fme = w.wb.parseString(buf, c.Btc)
|
var fms, fme = w.wb.parseString(buf, c.Btc, "formula")
|
||||||
if nil == fme {
|
if nil == fme {
|
||||||
c.value = fms
|
c.value = fms
|
||||||
}
|
}
|
||||||
@ -118,12 +118,12 @@ func (w *WorkSheet) parseBof(buf io.ReadSeeker, b *bof, pre *bof) *bof {
|
|||||||
case 0xFD: //LABELSST
|
case 0xFD: //LABELSST
|
||||||
col = new(LabelsstCol)
|
col = new(LabelsstCol)
|
||||||
binary.Read(buf, binary.LittleEndian, col)
|
binary.Read(buf, binary.LittleEndian, col)
|
||||||
case 0x204:
|
case 0x204: // LABEL
|
||||||
c := new(labelCol)
|
c := new(labelCol)
|
||||||
binary.Read(buf, binary.LittleEndian, &c.BlankCol)
|
binary.Read(buf, binary.LittleEndian, &c.BlankCol)
|
||||||
var count uint16
|
var count uint16
|
||||||
binary.Read(buf, binary.LittleEndian, &count)
|
binary.Read(buf, binary.LittleEndian, &count)
|
||||||
c.Str, _ = w.wb.parseString(buf, count)
|
c.Str, _ = w.wb.parseString(buf, count, "label")
|
||||||
col = c
|
col = c
|
||||||
case 0x201: //BLANK
|
case 0x201: //BLANK
|
||||||
col = new(BlankCol)
|
col = new(BlankCol)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user