千家信息网

beego excel的导出和读取操作

发表于:2024-10-20 作者:千家信息网编辑
千家信息网最后更新 2024年10月20日,本篇内容介绍了"beego excel的导出和读取操作"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!
千家信息网最后更新 2024年10月20日beego excel的导出和读取操作

本篇内容介绍了"beego excel的导出和读取操作"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

/**利用hrpose rpc 连接传输以组合好的数据生成文件https://github.com/hprosephp 项目中引用在你的 composer 项目中的 composer.json 文件中,添加这部分:{    "require": {        "hprose/hprose": ">=2.0.0"    }}使用$header      = ['aaa','cccc','dddd'];$data        = [['a1','c1','d1'],['a2','c2','d2'],['a2','c2','d2']];$client      = new \Hprose\Http\Client(env('excel_rpc', 'http://192.168.0.230:8881/rpc'), false);//同步执行$b_str       = json_encode(array_merge([$header], $data));$path_str    = "dc_" . $type . '_' . $this->lang . date('Ymd-His') . '.xlsx';$return_data = json_decode($client->excel($b_str, $path_str), true);Array(    [code] => 0    [data] => dc_test20190428-124612.xlsx    [msg] => 生成完毕共花费0秒public/excel/dc_test20190428-124612.xlsx)https://github.com/hprose/hprose-php/wiki/05-Hprose-%E5%AE%A2%E6%88%B7%E7%AB%AFgo 部分 go 1.11+ 使用 go.mod 版本go 环境自己搭建go mod downloadbuildgo build -o rpc_excel rpc.go跨平台编译一次编译世界通用CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o bin/rpc_excel_linux rpc_excel.goCGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build -o bin/rpc_excel_win rpc_excel.go*/package mainimport (        "encoding/json"        "fmt"        "github.com/360EntSecGroup-Skylar/excelize"        "github.com/astaxie/beego"        "github.com/hprose/hprose-golang/rpc"        "github.com/robfig/cron"        "os"        "strconv"        "time"        "log"        "regexp"        "io/ioutil"        "runtime"    "runtime/debug")func excel(name string, path string) string {        var jsonArray [][]string        //解析传输过来的二维数组        jsonArray = strjsonArray(name)        file := "public/excel/" + path        os.Remove(file)        fmt.Println(file)        f := excelize.NewFile()        start1 := time.Now().Unix()        // Create a new sheet.        for k, v := range jsonArray {                if v == nil {                        /*跳过此次循环*/                        continue                }                for k1, v1 := range v {                    var si string                    //大A列 大B列            if k1/26 > 0 {                si = string(k1/26 - 1 + 65) + string(k1%26 + 65)            } else {                si = string(k1%26 + 65)            }                        ki := strconv.Itoa(k + 1)                        // Set value of a cell.                        f.SetCellValue("Sheet1", si+ki, typeof(v1))                }        }        // Save xlsx file by the given path.        err := f.SaveAs("../"+file)        start2 := time.Now().Unix()        var pFile string        pFile = fmt.Sprintf("生成完毕共花费%d秒%s", start2-start1, file)        fmt.Println(pFile)    result := make(map[string]interface{})        result["code"] = 0        result["data"] = path        result["msg"] = pFile        //内存释放    runtime.GC()    debug.FreeOSMemory()    if err != nil {        fmt.Println(err)        result["code"] = -1        result["data"] = ""        result["msg"] = err    }        resA, _ := json.Marshal(result)        return string(resA)}func strjsonArray(data string) [][]string {        var jsonArray [][]string        err := json.Unmarshal([]byte(data), &jsonArray)        if err != nil {                fmt.Println(err)        }        return jsonArray}func oneJsonArray(data string) interface{} {        var _jsonArray interface{}        err := json.Unmarshal([]byte(data), &_jsonArray)        if err != nil {                fmt.Println(err)        }        return _jsonArray}type ExcelDelJob struct {}func (this ExcelDelJob)Run() {        files, _ := ioutil.ReadDir("../public/excel/")        for _, f := range files {                fmt.Println(f.Name())                reg := regexp.MustCompile(`(?i:^dc_)*.(\d)+?.xlsx`)                if len(reg.FindAllString( f.Name(), -1)) > 0 {                        file := "../public/excel/" + f.Name()                        os.Remove(file)                        log.Println("ExcelDelJob delete ... %s",file)                }        }        log.Println("ExcelDelJob list ...")}func typeof(v interface{}) string {    switch t := v.(type) {    case string:        return t    case int:        return strconv.Itoa(t)    default:        _ = t        return ""    }}/*传入值$data = [['a1','c1','d1'],['a2','c2','d2'],['a2','c2','d2']];这样才能解析{"data":[['a1','c1','d1'],['a2',0,'d2'],['a2','c2',100]]}*/func excelV2(data string, path string) string {        //解析传输过来的二维数组        file := "public/excel/" + path        os.Remove(file)        fmt.Println(file)        f := excelize.NewFile()        start1 := time.Now().Unix()        // Create a new sheet.        b := []byte(fmt.Sprintf("{\"data\":%s}",data))    var bf interface{}    err := json.Unmarshal(b, &bf)    if err != nil {        fmt.Println(err)    }    m := bf.(map[string]interface{})    switch vv := m["data"].(type) {    case string:        fmt.Println(vv, "is string", vv)    case int:        fmt.Println(vv, "is int", vv)    case []interface{}:        //fmt.Println(vv, "is an array:")        //大行        for k, u := range vv {            switch vvv := u.(type) {            case string:                fmt.Println(k, "is string", vvv)            case int:                fmt.Println(k, "is int", vvv)            case []interface{}:                //大列                for k1, u1 := range vvv {                    var si string                    //大A列 大B列                    if k1/26 > 0 {                        si = string(k1/26 - 1 + 65) + string(k1%26 + 65)                    } else {                        si = string(k1%26 + 65)                    }                    ki := strconv.Itoa(k + 1)                    switch u11 := u1.(type) {                    case int:                        f.SetCellInt("Sheet1", si+ki, u11)                        break                    default:                        f.SetCellValue("Sheet1", si+ki, u11)                    }                    //f.SetCellValue("Sheet1", si+ki, u1)                }            default:                fmt.Println("is of a type I don't know how to handle")            }        }    default:        fmt.Println( vv," is of a type I don't know how to handle")    }        // Save xlsx file by the given path.        err = f.SaveAs("../"+file)        start2 := time.Now().Unix()    var pFile string        pFile = fmt.Sprintf("生成完毕共花费%d秒%s", start2-start1, file)        fmt.Println(pFile)        result := make(map[string]interface{})    result["code"] = 0    result["data"] = path    result["msg"] = pFile    //内存释放        runtime.GC()    debug.FreeOSMemory()        if err != nil {                fmt.Println(err)                result["code"] = -1        result["data"] = ""        result["msg"] = err        }        resA, _ := json.Marshal(result)        return string(resA)}func excelRead(path string) string {        result := struct {                Code int         `json:"code""`                Msg  string      `json:"msg"`                Date interface{} `json:"data"`        }{}        xls_os, error := excelize.OpenFile(path)        if error != nil {                result.Code = 0                result.Msg = error.Error()                result.Date = []string{}                err_str, _ := json.Marshal(result)                return string(err_str)        }        xls_data := xls_os.GetRows(xls_os.GetSheetName(1))        result.Code = 1        result.Msg = "ok"        result.Date = xls_data        res_data, _ := json.Marshal(result)        return string(res_data)}func main() {        runtime.GOMAXPROCS(runtime.NumCPU())    //计划任务    c := cron.New()    spec := "0 0 */1 * * ?"    //spec20 := "0 */1 * * * ?"    //i := 0    //c.AddFunc(spec20, func() {    //    i++    //    log.Println("内存回收cron running:", i)    //})        c.AddJob(spec,ExcelDelJob{})        //启动计划任务        c.Start()        //关闭着计划任务, 但是不能关闭已经在执行中的任务.        defer c.Stop()        service := rpc.NewHTTPService()        service.AddFunction("excel", excel)        service.AddFunction("excelV2", excelV2)        service.AddFunction("excelRead", excelRead)        beego.Handler("/rpc", service)        beego.BConfig.Listen.HTTPPort = 8881        beego.Run()}

"beego excel的导出和读取操作"的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注网站,小编将为大家输出更多高质量的实用文章!

0