20
0

优化代码提高可读性

This commit is contained in:
chen.s.g 2018-09-27 14:27:15 +08:00
parent ce9ee3fa6e
commit fe3fe25c72
2 changed files with 25 additions and 18 deletions

View File

@ -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

View File

@ -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)