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;
            }
  • 相关阅读:
    转载:SQL语句执行顺序
    [Oracle/sql]查看当前用户名下有多少表 以及查看表字段信息
    [oracle/Sql]怎样比较两表的差异?
    从两表连接看Oracle sql优化器的效果
    使用Hint /*+ full(emp)*/ 将索引全扫描改成全表扫描,看cost差别
    全扫描与快速全索引扫描的比较实验
    Hint usenl usage /*+ leading(emp,dept) usenl(emp) */
    毛驴儿拉磨啊。 它走不出那个圈。 井里蛤蟆就能看见巴掌大的一块天呦!
    大数据技术之_03_Hadoop学习_02_入门_Hadoop运行模式+【本地运行模式+伪分布式运行模式+完全分布式运行模式(开发重点)】+Hadoop编译源码(面试重点)+常见错误及解决方案
    大数据技术之_03_Hadoop学习_01_入门_大数据概论+从Hadoop框架讨论大数据生态+Hadoop运行环境搭建(开发重点)
  • 原文地址:https://www.cnblogs.com/benpao/p/7463330.html
Copyright © 2011-2022 走看看