Browse Source

新增查询结果集导出csv,tsv,xml,json,xlsx,yaml,html功能

xormplus 9 năm trước cách đây
mục cha
commit
597bd33492
1 tập tin đã thay đổi với 63 bổ sung0 xóa
  1. 63 0
      dataset.go

+ 63 - 0
dataset.go

@@ -0,0 +1,63 @@
+package xorm
+
+import (
+	tablib "github.com/agrison/go-tablib"
+)
+
+// NewDataset creates a new Dataset.
+func NewDataset(headers []string) *tablib.Dataset {
+	return tablib.NewDataset(headers)
+}
+
+// NewDatasetWithData creates a new Dataset.
+func NewDatasetWithData(headers []string, data interface{}) (*tablib.Dataset, error) {
+	if data == nil {
+		return tablib.NewDatasetWithData(headers, nil), nil
+	}
+	n := len(headers)
+
+	switch data.(type) {
+	case [][]interface{}:
+		return tablib.NewDatasetWithData(headers, data.([][]interface{})), nil
+	case []map[string]interface{}:
+		dataSlice := data.([]map[string]interface{})
+		if len(dataSlice) > 0 {
+			if len(dataSlice[0]) == 0 {
+				return tablib.NewDatasetWithData(headers, make([][]interface{}, len(dataSlice))), nil
+			} else {
+				if n != len(dataSlice[0]) {
+					return nil, ErrParamsType
+				}
+				mapHeaders := make(map[string]int, n)
+				for i := 0; i < n; i++ {
+					mapHeaders[headers[i]] = i
+				}
+
+				for k, _ := range dataSlice[0] {
+					if _, ok := mapHeaders[k]; !ok {
+						return nil, ErrParamsType
+					}
+				}
+
+				d := tablib.NewDataset(headers)
+				var row []interface{}
+				for i, _ := range dataSlice {
+					row = nil
+					for j := 0; j < n; j++ {
+						row = append(row, dataSlice[i][headers[j]])
+					}
+					d.Append(row)
+				}
+				return d, nil
+
+			}
+
+		} else {
+			return tablib.NewDatasetWithData(headers, nil), nil
+		}
+		return nil, ErrParamsType
+	default:
+		return nil, ErrParamsType
+	}
+
+}