Ver Fonte

read excel support data validation issue #7

rentiansheng há 7 anos atrás
pai
commit
c4054a4ce9
2 ficheiros alterados com 43 adições e 0 exclusões
  1. 13 0
      datavalidation_test.go
  2. 30 0
      lib.go

+ 13 - 0
datavalidation_test.go

@@ -139,3 +139,16 @@ func TestDataValidation(t *testing.T) {
 	file.Save("datavalidation.xlsx")
 
 }
+
+func TestReadDataValidation(t *testing.T) {
+	file, err := OpenFile("datavalidation.xlsx")
+	if nil != err {
+		t.Errorf(err.Error())
+		return
+	}
+	err = file.Save("datavalidation_read.xlsx")
+	if nil != err {
+		t.Errorf(err.Error())
+		return
+	}
+}

+ 30 - 0
lib.go

@@ -699,6 +699,36 @@ func readSheetFromFile(sc chan *indexedSheet, index int, rsheet xlsxSheet, fi *F
 	sheet.SheetFormat.DefaultRowHeight = worksheet.SheetFormatPr.DefaultRowHeight
 	sheet.SheetFormat.OutlineLevelCol = worksheet.SheetFormatPr.OutlineLevelCol
 	sheet.SheetFormat.OutlineLevelRow = worksheet.SheetFormatPr.OutlineLevelRow
+	for _, dd := range worksheet.DataValidations.DataValidattion {
+
+		parts := strings.Split(dd.Sqref, ":")
+
+		minCol, minRow, err := GetCoordsFromCellIDString(parts[0])
+		if nil != err {
+			return fmt.Errorf("data validation %s", err.Error())
+		}
+		dd.Sqref = ""
+
+		if 0 == len(parts) {
+			sheet.Cell(minRow, minCol).SetDataValidation(dd)
+
+		} else {
+			maxCol, maxRow, err := GetCoordsFromCellIDString(parts[0])
+			if nil != err {
+				return fmt.Errorf("data validation %s", err.Error())
+			}
+
+			if minCol == maxCol && minRow == maxRow {
+				sheet.Cell(minRow, minCol).SetDataValidation(dd)
+			} else {
+				for i := minCol; i <= maxCol; i++ {
+					sheet.Col(i).SetDataValidation(dd, minRow, maxRow)
+				}
+
+			}
+		}
+
+	}
 
 	result.Sheet = sheet
 	sc <- result