zoukankan      html  css  js  c++  java
  • <经验杂谈>前端form提交导出数据

    之前在做列表的是总会遇到一些导出的功能,而在做导出的时候总是习惯于用get的方法将参数放在url上,这样一来就会有很多的弊端,一是url的参数长度有限,遇到有的参数很长的时候就会报错,二是也不太安全。

    按照之前写法:

    var url = '@Url.Action("")';
    window.open(url, "_blank");

    现在改成前端form提交的方式:

    function doExport() {
                getCards();
                var element = '<form action="'+url+" target="_self" method="post">'
        + '<input type="text" name="StartDate" value="' + vm.searchReportParam.StartDate + '" />'
        + '<input type="text" name="EndDate" value="' + vm.searchReportParam.EndDate + '" />'
        + '<input type="text" name="CardIdsStr" value="' + vm.CardIdsStr + '" />'
        + '</form>';
                $(element).appendTo('body').submit().remove();
            };

    后端数据处理:

    public static void ToExcel<T>(List<T> datas, int SheetRows, string exportName, HttpResponseBase response)
            {
                AppLibrary.WriteExcel.XlsDocument doc = new AppLibrary.WriteExcel.XlsDocument();
    
                doc.FileName = exportName + ".xls";
                string SheetName = string.Empty;
                //记录条数
                int mCount = datas.Count;
    
                //每个SHEET的数量
                int inv = SheetRows;
                //计算当前多少个SHEET
                int k = Convert.ToInt32(Math.Round(Convert.ToDouble(mCount / inv))) + 1;
    
                Type type = typeof(T);
                PropertyInfo[] properties = type.GetProperties();
    
                for (int i = 0; i < k; i++)
                {
                    SheetName = "数据表" + i.ToString();
                    AppLibrary.WriteExcel.Worksheet sheet = doc.Workbook.Worksheets.Add(SheetName);
                    AppLibrary.WriteExcel.Cells cells = sheet.Cells;
    
                    //创建列样式创建列时引用
                    XF cellXF = doc.NewXF();
                    cellXF.VerticalAlignment = VerticalAlignments.Centered;
                    cellXF.HorizontalAlignment = HorizontalAlignments.Centered;
                    cellXF.Font.FontFamily = FontFamilies.Roman;//设置字体 默认为宋体 
    
                    for (int ColIndex = 0; ColIndex < properties.Length; ColIndex++)
                    {
    
                        PropertyInfo property = properties[ColIndex];
                        ExportAttribute attribute = property.GetCustomAttribute<ExportAttribute>();
                        if (attribute != null)
                        {
                            cells.Add(1, ColIndex + 1, attribute.Name, cellXF);
                        }
    
                    }
                    int f = 1;
                    for (int m = i * inv; m < mCount && m < (i + 1) * inv; m++)
                    {
                        f++;
                        for (int CellIndex = 0; CellIndex < properties.Length; CellIndex++)
                        {
                            ExportAttribute attribute = properties[CellIndex].GetCustomAttribute<ExportAttribute>();
                            if (attribute != null)
                            {
                                object value = properties[CellIndex].GetValue(datas[m]);
                                if (properties[CellIndex].PropertyType == typeof(DateTime))
                                {
                                    value = ((DateTime)value).ToString("yyyy/MM/dd");
                                }
                                cells.Add(f, CellIndex + 1, value, cellXF);
    
                            }
                        }
                    }
                }
    
                doc.Send();
                response.Flush();
                response.End();
            }

    使用插件NPOI来生成EXCEL:

    private static HttpResponseMessage GetExcelResponse(List<T> models)
            {
    
                HSSFWorkbook book = new HSSFWorkbook();
                ISheet sheet = book.CreateSheet("Sheet1");
    
                int rowIndex = 0;
                IRow headRow = sheet.CreateRow(rowIndex++);
                var headColIndex = 0;
                headRow.CreateCell(headColIndex++).SetCellValue("rows1");
                headRow.CreateCell(headColIndex++).SetCellValue("rows2");
                headRow.CreateCell(headColIndex++).SetCellValue("rows3");
                headRow.CreateCell(headColIndex++).SetCellValue("rows4");
                headRow.CreateCell(headColIndex++).SetCellValue("rows5");
                foreach (var model in models)
                {
                    IRow row = sheet.CreateRow(rowIndex++);
                    var colIndex = 0;
                    row.CreateCell(colIndex++).SetCellValue(model.CardName);
                    row.CreateCell(colIndex++).SetCellValue(model.Code);
                    row.CreateCell(colIndex++).SetCellValue((double)model.ItemPrice);
                    row.CreateCell(colIndex++).SetCellValue((double)model.CostPriceTotal);
                    row.CreateCell(colIndex++).SetCellValue(model.OrderCode);
                }
                var ms = new MemoryStream();
                book.Write(ms);
                ms.Position = 0L;
    
                HttpResponseMessage response = new HttpResponseMessage(HttpStatusCode.OK);
                ms.Position = 0L;
                response.Content = new StreamContent(ms);
                response.Content.Headers.ContentType = new MediaTypeHeaderValue("application/vnd.ms-excel");
                response.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment")
                {
                    FileName = $"导出{DateTime.Now.ToString("yyyyMMddHHmmss")}.xls"
                };
                return response;
            }
  • 相关阅读:
    react 性能优化
    JS获取当前网页大小以及屏幕分辨率等
    创建对象的6种方式总结
    版本号规则
    JS事件模型
    浅谈虚拟DOM
    浏览器的回流与重绘
    JavaScript预编译
    canvas学习笔记
    java、tomcat安装
  • 原文地址:https://www.cnblogs.com/benpao/p/7463330.html
Copyright © 2011-2022 走看看