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的导出和读取操作"的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注网站,小编将为大家输出更多高质量的实用文章!
任务
生成
内存
传输
内容
数组
文件
更多
知识
项目
二维
编译
实用
学有所成
接下来
世界
困境
实际
情况
数据
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
数据库数据丢失应付措施
fm数据库补丁怎么使用
用网络技术能赚钱
获取数据库时间 sql
淘宝网网络安全策略
北京信息网络技术服务哪家好
网络技术发展里程碑
网络安全分析推理言情
13寸软件开发
高中网络技术会考指导
长沙企业软件开发团队
轻量服务器能放解析吗
安仁计算机软件开发
360企业服务器在哪里
河南做软件开发的公司
db2数据库查询去重
网络安全大赛小说
支持ios的数据库
为什么链接服务器失败
按条件查询数据库java
股票软件开发的价格怎么定
招行软件开发岗
redis和数据库读写性能比较
无锡网络软件开发进货价
网络安全法律知识竞答题
网络安全法进社区宣传活动
软件开发与销售服务
雅虎收发电子服务器名称
工业互联网展湾科技有限公司
主动加被动的网络安全策略