前后端交互导出数据

//导出
    function btnExport() {
        var colArr = [];
        //这里写获取页面表格字段的显示名称,并存到colArr数组里面,为了方便在后台循环渲染。

        if(colArr.length == 0){
            alert("请查询要导出的数据!");
            return;
       }
        
        //这里是要传到后台查询数据的查询条件,根据自己所要传的参数进行修改,ColNames这个传上面获取字段显示名称的数组
        var searchdata = {
            AreaNO: $('#chooseBox').val(),
            StartTime: sDateResult,
            EndTime: sDateResult,
            ColNames: colArr
        };
        //QueryType可以自己定义,后台会根据这个进行判断导出对应的页面数据
        var postData = { QueryType: 1, FileName: "你想要导出的文件名称", QueryParms: JSON.stringify(searchdata) };
        $.post("/Export/ExcelExport", postData, function (data) {
            if (data) {
                location.href = '/Export/GetExcelFile?download=' + data; //根据后台返回文件名称进行下载
            }
        });
    }
public class ExportController : Controller
    {
        /// <summary>
        /// 下载Excel文件
        /// </summary>
        /// <param name="download"></param>
        /// <returns></returns>
        public FileResult GetExcelFile(string download)
        {
            FileStream fs = (FileStream)Session[download];
            Session.Remove(download);
            return File(fs, "application/vnd.ms-excel", download);
        }

        /// <summary>
        /// 导出Excel表格
        /// </summary>
        /// <param name="QueryType"></param>
        /// <param name="FileName"></param>
        /// <param name="QueryParms"></param>
        /// <returns></returns>
        public string ExcelExport(int queryType, string fileName, string queryParms)
        {
            QueryParmsObj o = new QueryParmsObj();
            QueryParmsObj request = (QueryParmsObj)JsonToObject(queryParms, o);
            System.IO.FileStream fs;
            fileName = fileName + "_导出数据_" + DateTime.Now.ToString("yyyyMMddHHmmss");
            string download = string.Format(@"{0}.xlsx", fileName);
            try
            {
                //创建Excel文件的对象
                IWorkbook workbook = new HSSFWorkbook();

                //根据不同的类型导出不同的报表
                if (queryType == 1) 
                {
                    //这里通过参数查询获取要导出的数据
                    var otherController = DependencyResolver.Current.GetService<FinancialAnalysisController>();
                    var response = otherController.FinancialAnalysisMConerlistData(request.AreaNO,request.StartTime,request.EndTime,null,null,null,null);
                    JObject list = (JObject)JsonConvert.DeserializeObject(response);
                    GetRowsOfType1(workbook, list, fileName,request.ColNames);
                }
                else if (queryType == 2)
                {

                }


                string pathString = Request.ApplicationPath;
                var mappath = Server.MapPath(pathString);
                var domainPath = AppDomain.CurrentDomain.GetData("DataDirectory").ToString();

                if (!Directory.Exists(string.Format("{0}\\Report", domainPath)))
                {
                    Directory.CreateDirectory(string.Format("{0}\\Report", domainPath));
                }

                string filePath = String.Format(@"{0}\\Report\\{1}_{2}.xlsx", domainPath, fileName, DateTime.Now.ToString("yyyyMMddHHmmss"));

                // 写入到客户端
                fs = new FileStream(filePath, FileMode.OpenOrCreate);

                workbook.Write(fs);
                fs.Seek(0, SeekOrigin.Begin);
            }
            catch (Exception)
            {
                throw new Exception();
            }
            Session[download] = fs;
            return download;
        }

        /// <summary>
        /// 导出格式和数据渲染
        /// </summary>
        /// <param name="workbook"></param>
        /// <param name="list"></param>
        /// <param name="name"></param>
        /// <param name="colNames"></param>
        /// <returns></returns>
        private IWorkbook GetRowsOfType1(IWorkbook workbook, JObject list, string name,List<string> colNames)
        {
            //添加一个sheet
            ISheet sheet1 = workbook.CreateSheet("Sheet1");
            int colSpan = colNames.Count-1;
            SetSheetTitle(workbook, sheet1, name,colSpan);

            IRow row2 = sheet1.CreateRow(2);
            for (var i = 0; i < colNames.Count; i++)
            {
                row2.CreateCell(i).SetCellValue(colNames[i]);
            }

            //将数据逐步写入sheet1各个行
            var listData = list["data"];
            for (int i = 0; i < listData.ToList().Count; i++)
            {
                IRow rowtemp = sheet1.CreateRow(i + 3);
                var cellVal = "";
                for (int j = 0; j < listData[i].ToList().Count; j++)
                {
                    cellVal = listData[i].ToList()[j].First.ToString();
                    rowtemp.CreateCell(j).SetCellValue(cellVal);
                }
            }
            return workbook;
        }

        /// <summary>
        /// 设置导出Excel标题
        /// </summary>
        /// <param name="workbook"></param>
        /// <param name="sheet1"></param>
        /// <param name="name"></param>
        private void SetSheetTitle(IWorkbook workbook, ISheet sheet1, string name,int colSpan)
        {
            //给sheet1添加第一行的头部标题
            IRow row0 = sheet1.CreateRow(0);
            row0.HeightInPoints = 30;//行高
            row0.CreateCell(0).SetCellValue(name);//创建第一列
            IFont font = workbook.CreateFont(); //创建一个字体样式对象
            font.FontHeightInPoints = 17;//字体大小
            font.Boldweight = short.MaxValue;//字体加粗
            ICellStyle style = workbook.CreateCellStyle();//创建样式对象
            style.SetFont(font); //将字体样式赋给样式对象
            style.Alignment = HorizontalAlignment.Center;
            row0.Cells[0].CellStyle = style; ; //把样式赋给单元格
            CellRangeAddress cellRangeAddress = new CellRangeAddress(0, 0, 0, colSpan);
            sheet1.AddMergedRegion(cellRangeAddress);

            IRow row1 = sheet1.CreateRow(1);
            row1.HeightInPoints = 20;//行高
            row1.CreateCell(0).SetCellValue("制表日期:" + DateTime.Now.Date.ToString("yyyy-MM-dd"));
            font = workbook.CreateFont(); //创建一个字体样式对象
            font.FontHeightInPoints = 13;//字体大小
            font.Boldweight = short.MaxValue;//字体加粗
            style = workbook.CreateCellStyle();//创建样式对象
            style.SetFont(font);
            row1.Cells[0].CellStyle = style;
            cellRangeAddress = new CellRangeAddress(1, 1, 0, colSpan);
            sheet1.AddMergedRegion(cellRangeAddress);
        }


        /// 把Json文本转为实体
        public static object JsonToObject(string jsonString, object obj)
        {
            return JsonConvert.DeserializeObject(jsonString, obj.GetType());
        }

        /// <summary>
        /// 查询参数实体
        /// </summary>
        private class QueryParmsObj
        {
            public string AreaNO { get; set; }
            public string StartTime { get; set; }
            public string EndTime { get; set; }
            public List<string> ColNames { get; set; }
        }

    }
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
RuoYi是一个基于Spring Boot和Vue.js的开源框架,它采用前后端分离的架构设计,实现了数据前后端分离开发。在RuoYi中,通过前后端分离的方式,可以实现导出功能。 首先,前端负责显示数据的页面布局和交互操作。在前端页面中,可以通过调用后端接口获取需要导出数据,并将其展示在页面上。在需要导出的地方,可以添加一个导出按钮或其他触发事件的组件,通过点击按钮或触发事件的方式,调用后端接口进行导出操作。 其次,后端负责处理导出的相关逻辑。在RuoYi的后端代码中,通常会有一个导出的控制层,负责接收前端的导出请求,并进行相应的数据处理和导出操作。后端可以通过调用某些工具类或第三方库来生成导出文件,如使用Apache POI库生成Excel文件、使用iText或PDFBox库生成PDF文件等。 最后,导出的结果可以返回给前端进行下载或其他操作。后端处理完导出逻辑后,可以将生成的导出文件保存到服务器的某个位置,然后将文件的路径返回给前端。前端根据返回的文件路径,可以通过下载链接或其他方式提供给用户进行文件下载。 总结来说,RuoYi采用前后端分离的架构,通过前端调用后端接口来实现数据导出。在前端页面中,添加导出按钮或触发事件的组件,通过点击或触发事件的方式调用后端接口。后端处理导出逻辑后,生成导出文件并保存,然后将文件路径返回给前端进行下载或其他操作。这样可以实现RuoYi的前后端分离导出功能
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值