diff --git a/workbook.go b/workbook.go index 2d2c1b0..6bfaf64 100644 --- a/workbook.go +++ b/workbook.go @@ -177,8 +177,13 @@ func (w *WorkBook) get_string(buf io.ReadSeeker, size uint16) string { } } else { var bts = make([]byte, size) + var bts1 = make([]uint16, size) binary.Read(buf, binary.LittleEndian, &bts) - res = string(bts) + for k, v := range bts { + bts1[k] = uint16(v) + } + runes := utf16.Decode(bts1) + res = string(runes) } if flag&0x8 != 0 { var bts []byte diff --git a/xls_test.go b/xls_test.go index aee7f66..1e21ba6 100644 --- a/xls_test.go +++ b/xls_test.go @@ -1,14 +1,13 @@ package xls import ( - "bytes" "fmt" - "os" "testing" + "unicode/utf16" ) func TestOpen(t *testing.T) { - if xlFile, err := Open("reportComuni.xls", "utf-8"); err == nil { + if xlFile, err := Open("Preisliste.xls", "utf-8"); err == nil { if sheet1 := xlFile.GetSheet(0); sheet1 != nil { fmt.Println("Total Lines ", sheet1.MaxRow, sheet1.Name) for i := 0; i < int(sheet1.MaxRow); i++ { @@ -28,50 +27,60 @@ func TestOpen(t *testing.T) { } } -func TestOpen1(t *testing.T) { - xlFile, _ := Open("000.xls", "") - for i := 0; i < xlFile.NumSheets(); i++ { - fmt.Println(xlFile.GetSheet(i).Name) - sheet := xlFile.GetSheet(i) - row := sheet.Rows[1] - for i, col := range row.Cols { - fmt.Println(i, col.String(xlFile)) - } +func TestEuropeString(t *testing.T) { + bts := []byte{66, 233, 114, 232} + var bts1 = make([]uint16, 4) + for k, v := range bts { + bts1[k] = uint16(v) } - // sheet1 := xlFile.GetSheet(0) - // fmt.Println(sheet1.Name) - // fmt.Print(sheet1.Rows) - // for k, row1 := range sheet1.Rows { - // // row1 := sheet1.Rows[1] - // fmt.Printf("\n[%d]", k) - // for _, col1 := range row1.Cols { - // // col1 := row1.Cols[0] - // fmt.Print(col1.LastCol()) - // fmt.Print(" ") - // } - // } + runes := utf16.Decode(bts1) + fmt.Println(string(runes)) } -func TestBof(t *testing.T) { - b := new(bof) - b.Id = 0x41E - b.Size = 55 - buf := bytes.NewReader([]byte{0x07, 0x00, 0x19, 0x00, 0x01, 0x22, 0x00, 0xE5, 0xFF, 0x22, 0x00, 0x23, 0x00, 0x2C, 0x00, 0x23, 0x00, 0x23, 0x00, 0x30, 0x00, 0x2E, 0x00, 0x30, 0x00, 0x30, 0x00, 0x3B, 0x00, 0x22, 0x00, 0xE5, 0xFF, 0x22, 0x00, 0x5C, 0x00, 0x2D, 0x00, 0x23, 0x00, 0x2C, 0x20, 0x00}) - wb := new(WorkBook) - wb.Formats = make(map[uint16]*Format) - wb.parseBof(buf, b, b, 0) -} +// func TestOpen1(t *testing.T) { +// xlFile, _ := Open("000.xls", "") +// for i := 0; i < xlFile.NumSheets(); i++ { +// fmt.Println(xlFile.GetSheet(i).Name) +// sheet := xlFile.GetSheet(i) +// row := sheet.Rows[1] +// for i, col := range row.Cols { +// fmt.Println(i, col.String(xlFile)) +// } +// } +// // sheet1 := xlFile.GetSheet(0) +// // fmt.Println(sheet1.Name) +// // fmt.Print(sheet1.Rows) +// // for k, row1 := range sheet1.Rows { +// // // row1 := sheet1.Rows[1] +// // fmt.Printf("\n[%d]", k) +// // for _, col1 := range row1.Cols { +// // // col1 := row1.Cols[0] +// // fmt.Print(col1.LastCol()) +// // fmt.Print(" ") +// // } +// // } +// } -func TestMaxRow(t *testing.T) { - xlFile, err := Open("Table.xls", "utf-8") - if err != nil { - fmt.Fprintf(os.Stderr, "Failure: %v\n", err) - t.Error(err) - } +// func TestBof(t *testing.T) { +// b := new(bof) +// b.Id = 0x41E +// b.Size = 55 +// buf := bytes.NewReader([]byte{0x07, 0x00, 0x19, 0x00, 0x01, 0x22, 0x00, 0xE5, 0xFF, 0x22, 0x00, 0x23, 0x00, 0x2C, 0x00, 0x23, 0x00, 0x23, 0x00, 0x30, 0x00, 0x2E, 0x00, 0x30, 0x00, 0x30, 0x00, 0x3B, 0x00, 0x22, 0x00, 0xE5, 0xFF, 0x22, 0x00, 0x5C, 0x00, 0x2D, 0x00, 0x23, 0x00, 0x2C, 0x20, 0x00}) +// wb := new(WorkBook) +// wb.Formats = make(map[uint16]*Format) +// wb.parseBof(buf, b, b, 0) +// } - if sheet1 := xlFile.GetSheet(0); sheet1 != nil { - if sheet1.MaxRow != 11 { - t.Errorf("max row is error,is %d instead of 11", sheet1.MaxRow) - } - } -} +// func TestMaxRow(t *testing.T) { +// xlFile, err := Open("Table.xls", "utf-8") +// if err != nil { +// fmt.Fprintf(os.Stderr, "Failure: %v\n", err) +// t.Error(err) +// } + +// if sheet1 := xlFile.GetSheet(0); sheet1 != nil { +// if sheet1.MaxRow != 11 { +// t.Errorf("max row is error,is %d instead of 11", sheet1.MaxRow) +// } +// } +// }