github.com/keysonzzz/kmg@v0.0.0-20151121023212-05317bfd7d39/encoding/kmgExcel/UnmarshalerFile.go (about)

     1  package kmgExcel
     2  
     3  import (
     4  	"fmt"
     5  
     6  	"github.com/bronze1man/kmg/typeTransform"
     7  )
     8  
     9  /*
    10   Unmarshal excel into a array of a struct
    11  
    12   you must put data in first sheet
    13   accept []struct{Key1 value;Key2 value} or []map[string]string
    14   first excel row as struct key,remain excel row as struct value
    15   type can not convert will fail
    16   lack keys will be ignore
    17  */
    18  func UnmarshalFile(filePath string, obj interface{}) (err error) {
    19  	rawArray, err := XlsxFile2Array(filePath)
    20  	if err != nil {
    21  		return
    22  	}
    23  	gridArray, err := TitleArrayToGrid(rawArray[0])
    24  	if err != nil {
    25  		return
    26  	}
    27  	err = typeTransform.Transform(gridArray, obj)
    28  	if err != nil {
    29  		return
    30  	}
    31  	return
    32  }
    33  
    34  //Unmarshal excel into a array of a struct and skip some line from start
    35  func UnmarshalFileSkipLine(filePath string, obj interface{}, skipline int) (err error) {
    36  	rawArray, err := XlsxFile2Array(filePath)
    37  	if err != nil {
    38  		return
    39  	}
    40  	if len(rawArray[0]) < skipline+1 {
    41  		return fmt.Errorf("[kmgExcel.UnmarshalFileSkipLine]filePath:%s len(rawArray[0])<skipline+1 len(rawArray[0]):%d skipline:%d",
    42  			filePath, len(rawArray[0]), skipline+1)
    43  	}
    44  	gridArray, err := TitleArrayToGrid(rawArray[0][skipline:])
    45  	if err != nil {
    46  		return
    47  	}
    48  	err = typeTransform.Transform(gridArray, obj)
    49  	if err != nil {
    50  		return
    51  	}
    52  	return
    53  }