/**
利用hrpose rpc 连接传输以组合好的数据生成文件
https://github.com/hprose
php 项目中引用
在你的 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%AF
go 部分 go 1.11+ 使用 go.mod 版本
go 环境自己搭建
go mod downloadbuild
go build -o rpc_excel rpc.go
跨平台编译一次编译世界通用
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o bin/rpc_excel_linux rpc_excel.go
CGO_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/" + pathos.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 stringpFile = fmt.Sprintf("生成完毕共花费%d秒%s", start2-start1, file)fmt.Println(pFile)result := make(map[string]interface{})result["code"] = 0result["data"] = pathresult["msg"] = pFile//内存释放runtime.GC()debug.FreeOSMemory()if err != nil {fmt.Println(err)result["code"] = -1result["data"] = ""result["msg"] = err}resA, _ := json.Marshal(result)return string(resA)
}func strjsonArray(data string) [][]string {var jsonArray [][]stringerr := 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 tcase int:return strconv.Itoa(t)default:_ = treturn ""}
}/*
传入值
$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/" + pathos.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)breakdefault: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 stringpFile = fmt.Sprintf("生成完毕共花费%d秒%s", start2-start1, file)fmt.Println(pFile)result := make(map[string]interface{})result["code"] = 0result["data"] = pathresult["msg"] = pFile//内存释放runtime.GC()debug.FreeOSMemory()if err != nil {fmt.Println(err)result["code"] = -1result["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 = 0result.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 = 1result.Msg = "ok"result.Date = xls_datares_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 = 8881beego.Run()
}

excel 导出 php和go 版本相关推荐

  1. Java excel导出支持2007以上版本

    一.创建工作薄 XSSFWorkbook wb= new XSSFWorkbook(); 二.创建sheet页(如果需要同时导出多个sheet也内容,则如下)XSSFSheet sheet1 = cr ...

  2. 让C# Excel导入导出,支持不同版本的Office

    问题:最近在项目中遇到,不同客户机安装不同Office版本,在导出Excel时,发生错误. 找不到Excel Com组件,错误信息如下. 未能加载文件或程序集"Microsoft.Offic ...

  3. 数据库数据用Excel导出的3种方法

    数据库数据用Excel导出的3种方法 分类: .Net 2008-06-30 11:07 173人阅读 评论(2) 收藏 举报 将数据库数据用Excel导出主要有3种方法:用Excel.Applica ...

  4. 记一次悲惨的 Excel 导出事件

    背景 话说这个背景挺惨的,京东某系统使用了poi-ooxml-3.5-final做excel导出功能.起初使用该版本的poi的HSSF配合多线程生成excel,没有任何问题,后来改成了XSSF生成后上 ...

  5. Apache POI操作Excel导出JAVABEAN对象方法

    2019独角兽企业重金招聘Python工程师标准>>> Apache POI操作Excel导出方法说明 Apache的POI组件是Java操作Microsoft Office办公套件 ...

  6. 简单的Excel导出(两种方式)

    最近项目里面有个周报Excel导出的功能,为了解决这个问题,我显示调研Excel内核的方式实现了,但是被告知该方法有诸多弊端(1.服务器需要装相应版本的Excel:2.如果程序中途出错服务器会有很多E ...

  7. java excel导出2007_java操作excel文件,实现批量导出,和导入

    一.POI的定义 JAVA中操作Excel的有两种比较主流的工具包: JXL 和 POI .jxl 只能操作Excel 95, 97, 2000也即以.xls为后缀的excel.而poi可以操作Exc ...

  8. php larver 导出e,laravel5 Excel导出

    1.安装:maatwebsite/excel的2.1.0版本,命令行:composer require "maatwebsite/excel:~2.1.0": 2.在config/ ...

  9. java实现excel导出功能

    导出的是xls版本的excel,用的是HSSFWorkbook,想导出xlsx的就用XSSFWorkbook,模板自己提前准备好 用到的依赖 <dependency><groupId ...

最新文章

  1. Windows Server 2008 R2入门之文件服务器
  2. Java访问控制修饰符作用域
  3. uat环境是什么环境_环境污染会对环境造成怎样的损害?污水处理活性炭能起到什么效果呢?...
  4. 使用 AppleScript 在 Chrome 中查看当前 Safari 打开的网页
  5. Hexo-theme-Fluid Material Design 风格的 Hexo 主题
  6. 学会java基础能找工作吗?
  7. 【5分钟Paper】Fast强化学习和Slow强化学习
  8. FPGA(七) PWM波
  9. 摄像头视场角-对角线视场角-水平视场角
  10. html 单元格拆分及合并,一键轻松搞定合并和拆分单元格-excel拆分单元格
  11. gitter 卸载_最佳Gitter渠道:材料设计
  12. 幻方解法之Strachey法生成双偶幻方
  13. 计算机按键变成音符怎么弄,作曲大师怎么设置键盘输入 音符快速输入方法
  14. Python 医学知识图谱问答系统(一),建立医学知识图谱,基于neo4j知识图谱的医学问答体系
  15. cogs1487. 麻球繁衍
  16. ubuntu 3D桌面搞定了
  17. 微信公众号/微信小程序获取用户信息以及推送微信模版消息_MQ
  18. java fresh 水果,《蓝莓甜杏面包/ Fresh Apricot and Blueberry Tea Bread》把水果做进面包里...
  19. CF1397E Monster Invaders(思维+dp)
  20. Mac安装python3完整教程

热门文章

  1. 苹果cms对接微信公众号自动回复的样式设置
  2. 凯利公式的原理推导和应用方向
  3. IEEE PHM 2012挑战赛的实验数据集简介
  4. 在Bootstrap4中使用垂直居中
  5. 【更新】LMD VCL Complete 2019.1发布
  6. jquery带缩略图轮播_带有jQuery和PHP的新鲜滑动缩略图库
  7. python多个sheet数据透视表_python创建excel数据透视表(基于win32com)
  8. 保护个人隐私,你需要养成这8个习惯
  9. c语言随机数的产生方法
  10. python鼠标右键检测按钮_松勤软件自动化测试-如何将一个Python脚本加入Windows右键菜单...