package xls import ( "fmt" "github.com/tealeg/xlsx" "math" "strconv" ) //Compares xls and xlsx files func CompareXlsXlsx(xlsfilepathname string, xlsxfilepathname string) string { xlsFile, err := Open(xlsfilepathname, "utf-8") if err != nil { return fmt.Sprintf("Cant open xls file: %s", err) } xlsxFile, err := xlsx.OpenFile(xlsxfilepathname) if err != nil { return fmt.Sprintf("Cant open xlsx file: %s", err) } for sheet, xlsxSheet := range xlsxFile.Sheets { xlsSheet := xlsFile.GetSheet(sheet) if xlsSheet == nil { return fmt.Sprintf("Cant get xls sheet") } for row, xlsxRow := range xlsxSheet.Rows { xlsRow := xlsSheet.Row(row) for cell, xlsxCell := range xlsxRow.Cells { xlsxText := xlsxCell.String() xlsText := xlsRow.Col(cell) if xlsText != xlsxText { //try to convert to numbers xlsFloat, xlsErr := strconv.ParseFloat(xlsText, 64) xlsxFloat, xlsxErr := strconv.ParseFloat(xlsxText, 64) //check if numbers have no significant difference if xlsErr == nil && xlsxErr == nil { diff := math.Abs(xlsFloat - xlsxFloat) if diff > 0.0000001 { return fmt.Sprintf("sheet:%d, row/col: %d/%d, xlsx: (%s)[%d], xls: (%s)[%d], numbers difference: %f.", sheet, row, cell, xlsxText, len(xlsxText), xlsText, len(xlsText), diff) } } else { return fmt.Sprintf("sheet:%d, row/col: %d/%d, xlsx: (%s)[%d], xls: (%s)[%d].", sheet, row, cell, xlsxText, len(xlsxText), xlsText, len(xlsText)) } } } } } return "" }