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;
            }
  • 相关阅读:
    hihoCoder #1062 : 最近公共祖先·一
    hihoCoder #1050 : 树中的最长路
    hihoCoder #1049 : 后序遍历
    108 Convert Sorted Array to Binary Search Tree 将有序数组转换为二叉搜索树
    107 Binary Tree Level Order Traversal II 二叉树的层次遍历 II
    106 Construct Binary Tree from Inorder and Postorder Traversal 从中序与后序遍历序列构造二叉树
    105 Construct Binary Tree from Preorder and Inorder Traversal 从前序与中序遍历序列构造二叉树
    104 Maximum Depth of Binary Tree 二叉树的最大深度
    102 Binary Tree Level Order Traversal 二叉树的层次遍历
    101 Symmetric Tree 判断一颗二叉树是否是镜像二叉树
  • 原文地址:https://www.cnblogs.com/benpao/p/7463330.html
Copyright © 2011-2022 走看看