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;
            }
  • 相关阅读:
    BZOJ 2034 【2009国家集训队】 最大收益
    vijos P1780 【NOIP2012】 开车旅行
    BZOJ 2115 【WC2011】 Xor
    BZOJ 3631 【JLOI2014】 松鼠的新家
    BZOJ 4717 改装
    BZOJ 2957 楼房重建
    BZOJ 4034 【HAOI2015】 T2
    BZOJ 1834 【ZJOI2010】 network 网络扩容
    BZOJ 2440 【中山市选2011】 完全平方数
    BZOJ 2733 【HNOI2012】 永无乡
  • 原文地址:https://www.cnblogs.com/benpao/p/7463330.html
Copyright © 2011-2022 走看看