亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

Asp.netMVC+EasyUI+NPOI做通用導出功能

2019-11-14 14:34:51
字體:
來源:轉載
供稿:網友

首先需要一個Column的類,代表一列,還需要一個Sheet類,代表一個Sheet頁。

    public class Column    {        public string Code { get; set; }        public string Name { get; set; }        public string DataType { get; set; }        public int Width { get; set; }        public bool Hidden { get; set; }        public Column() { }        public Column(string code, string name, string dataType, int width, bool hidden = false)        {            Code = code;            Name = name;            DataType = dataType;            Width = width;            Hidden = hidden;        }    }    public class Sheet    {        public string Name { get; set; }        public List<Column> Columns { get; set; }        public DataTable DataSource { get; set; }        public Sheet() { }        public Sheet(string name, List<Column> columns, DataTable dataSource)        {            Name = name;            Columns = columns;            DataSource = dataSource;        }    }

封裝一個Workbook,方便操作。

  1     /// <summary>  2     /// 工作薄  3     /// </summary>  4     public class Workbook  5     {  6         public HSSFWorkbook workbook;  7         /// <summary>  8         /// 表頭格式  9         /// </summary> 10         PRivate HSSFCellStyle HeadStyle 11         { 12             get 13             { 14                 HSSFCellStyle headStyle = (HSSFCellStyle)workbook.CreateCellStyle(); 15                 headStyle.Alignment = NPOI.SS.UserModel.HorizontalAlignment.Center; 16                 headStyle.VerticalAlignment = NPOI.SS.UserModel.VerticalAlignment.Center; 17                 HSSFFont font = (HSSFFont)workbook.CreateFont(); 18                 font.FontHeightInPoints = 10; 19                 font.Boldweight = 700; 20                 headStyle.SetFont(font); 21                 return headStyle; 22             } 23         } 24         /// <summary> 25         /// 時間格式 26         /// </summary> 27         private HSSFCellStyle DateStyle 28         { 29             get 30             { 31                 HSSFCellStyle dateStyle = (HSSFCellStyle)workbook.CreateCellStyle(); 32                 HSSFDataFormat format = (HSSFDataFormat)workbook.CreateDataFormat(); 33                 dateStyle.DataFormat = format.GetFormat("yyyy-mm-dd"); 34                 return dateStyle; 35             } 36         } 37  38         /// <summary> 39         /// 實例一個工作薄 40         /// </summary> 41         public Workbook() 42         { 43             workbook = new HSSFWorkbook(); 44             #region 右擊文件 屬性信息 45             DocumentSummaryInformation dsi = PropertySetFactory.CreateDocumentSummaryInformation(); 46             dsi.Company = "SiBu"; 47             workbook.DocumentSummaryInformation = dsi; 48  49             SummaryInformation si = PropertySetFactory.CreateSummaryInformation(); 50             si.CreateDateTime = System.DateTime.Now; 51             workbook.SummaryInformation = si; 52             #endregion 53         } 54  55         /// <summary> 56         /// 加載Excel文件 57         /// </summary> 58         /// <param name="filePath">文件路徑</param> 59         public Workbook(string filePath) 60         { 61             using (FileStream file = new FileStream(filePath, FileMode.Open, Fileaccess.Read)) 62             { 63                 workbook = new HSSFWorkbook(file); 64             } 65         } 66  67         /// <summary> 68         /// 獲取Sheet頁的數據 69         /// </summary> 70         /// <param name="sheetIndex">Sheet頁Index,從0開始</param> 71         /// <returns>DataTable</returns> 72         public DataTable GetDataTable(int sheetIndex = 0) 73         { 74             DataTable dt = new DataTable(); 75  76             HSSFSheet sheet = (HSSFSheet)workbook.GetSheetAt(sheetIndex); 77             System.Collections.IEnumerator rows = sheet.GetRowEnumerator(); 78  79             HSSFRow headerRow = (HSSFRow)sheet.GetRow(0); 80             int cellCount = headerRow.LastCellNum; 81  82             for (int j = 0; j < cellCount; j++) 83             { 84                 HSSFCell cell = (HSSFCell)headerRow.GetCell(j); 85                 dt.Columns.Add(cell.ToString()); 86             } 87  88             for (int i = (sheet.FirstRowNum + 1); i <= sheet.LastRowNum; i++) 89             { 90                 HSSFRow row = (HSSFRow)sheet.GetRow(i); 91                 if (row == null) 92                     continue; 93                 DataRow dataRow = dt.NewRow(); 94  95                 for (int j = row.FirstCellNum; j < cellCount; j++) 96                 { 97                     ICell cell = row.GetCell(j); 98                     if (cell != null) 99                     {100                         if (cell.CellType == CellType.Numeric)101                         {102                             //NPOI中數字和日期都是NUMERIC類型的,這里對其進行判斷是否是日期類型103                             if (HSSFDateUtil.IsCellDateFormatted(cell))//日期類型104                             {105                                 dataRow[j] = cell.DateCellValue;106                             }107                             else//其他數字類型108                             {109                                 dataRow[j] = cell.NumericCellValue;110                             }111                         }112                         else if (cell.CellType == CellType.Blank)//空數據類型113                         {114                             dataRow[j] = "";115                         }116                         else if (cell.CellType == CellType.Formula)//公式類型117                         {118                             HSSFFormulaEvaluator eva = new HSSFFormulaEvaluator(workbook);119                             dataRow[j] = eva.Evaluate(cell).StringValue;120                         }121                         else //其他類型都按字符串類型來處理122                         {123                             dataRow[j] = cell.StringCellValue;124                         }125                     }126                 }127 128                 dt.Rows.Add(dataRow);129             }130             return dt;131         }132 133         /// <summary>134         /// 創建一個Sheet頁135         /// </summary>136         /// <param name="Sheet">Sheet</param>137         public void CreateSheet(Sheet sheetInfo)138         {139             if (string.IsNullOrWhiteSpace(sheetInfo.Name)) sheetInfo.Name = "Sheet" + workbook.NumberOfSheets + 1;140             HSSFSheet sheet = (HSSFSheet)workbook.CreateSheet(sheetInfo.Name);141 142             int rowIndex = 0;143 144             #region 新建表,填充表頭,填充列頭,樣式145             HSSFRow headerRow = (HSSFRow)sheet.CreateRow(rowIndex);146             headerRow.HeightInPoints = 20;147             var columIndex = 0;148             foreach (var column in sheetInfo.Columns)149             {150                 headerRow.CreateCell(columIndex).SetCellValue(column.Name);151                 headerRow.GetCell(columIndex).CellStyle = HeadStyle;152                 //設置列寬153                 sheet.SetColumnWidth(columIndex, column.Width * 256);154                 sheet.SetColumnHidden(columIndex, column.Hidden);155                 columIndex++;156             }157 158             #endregion159             #region 填充內容160             rowIndex = 1;161             foreach (DataRow row in sheetInfo.DataSource.Rows)162             {163                 HSSFRow dataRow = (HSSFRow)sheet.CreateRow(rowIndex);164                 var columnIndex = 0;165                 foreach (var column in sheetInfo.Columns)166                 {167                     HSSFCell newCell = (HSSFCell)dataRow.CreateCell(columnIndex);168                     if (!sheetInfo.DataSource.Columns.Contains(column.Code))169                     {170                         newCell.SetCellValue("");171                     }172                     else173                     {174                         string drValue = row[column.Code].ToString();175 176                         switch (column.DataType.ToUpper())177                         {178                             case "S"://字符串類型179                                 newCell.SetCellValue(drValue);180                                 break;181                             case "D"://日期類型182                                 System.DateTime dateV;183                                 System.DateTime.TryParse(drValue, out dateV);184                                 newCell.SetCellValue(dateV);185                                 newCell.CellStyle = DateStyle;//格式化顯示186                                 break;187                             case "B"://布爾型188                                 bool boolV = false;189                                 bool.TryParse(drValue, out boolV);190                                 newCell.SetCellValue(boolV);191                                 break;192                             case "I"://整型193                                 int intV = 0;194                                 int.TryParse(drValue, out intV);195                                 newCell.SetCellValue(intV);196                                 break;197                             case "F"://浮點型198                                 double doubV = 0;199                                 double.TryParse(drValue, out doubV);200                                 newCell.SetCellValue(doubV);201                                 break;202                             default:203                                 newCell.SetCellValue(drValue);204                                 break;205                         }206                     }207                     columnIndex++;208                 }209                 rowIndex++;210             }211             #endregion212         }213 214         /// <summary>215         /// 保存216         /// </summary>217         /// <param name="filePath">文件路徑</param>218         public void SaveAs(string filePath)219         {220             using (MemoryStream ms = new MemoryStream())221             {222                 workbook.Write(ms);223                 ms.Flush();224                 ms.Position = 0;225 226                 using (FileStream fs = new FileStream(filePath, FileMode.Create, FileAccess.Write))227                 {228                     byte[] data = ms.ToArray();229                     fs.Write(data, 0, data.Length);230                     fs.Flush();231                 }232             }233         }234 235         /// <summary>236         /// 獲取Workbook的MemoryStream237         /// </summary>238         /// <returns></returns>239         public MemoryStream GetMemoryStream()240         {241             MemoryStream ms = new MemoryStream();242             workbook.Write(ms);243             ms.Flush();244             ms.Position = 0;245             return ms;246         }247     }
View Code

ExcelController接收客戶端Post過來的數據,處理后返回文件流。

    public class ExcelController : Controller    {        [HttpPost]        public FileResult CommonExport(string Title, string Columns, string Data)        {            var tb = JsonConvert.DeserializeObject<DataTable>(Data);            var Columnslist = JsonConvert.DeserializeObject<List<Column>>(Columns);            var workbook = new Workbook();            workbook.CreateSheet(new Sheet(Title, Columnslist, tb));            var fileStream = workbook.GetMemoryStream();            return File(fileStream, "application/ms-excel", string.Format("{0}.xls", Title));        }    }

JS處理數據后POST到后臺。這里面用到了linq.js,通過構造Form表單提交,直接用Jquery的Post獲取到文件流沒反應。

這里的用到了EasyUI的datagrid,可以封裝成母版頁(OSharp里面有介紹 http://www.49028c.com/guomingfeng/p/osharp-easyui-Opera.html),導出Excel方法直接寫在這里面。

function exportToExcel() {            $("#exportToExcelForm").remove();            var form = $("<form>");//定義一個form表單            form.attr("id", "exportToExcelForm");            form.attr("style", "display:none");            form.attr("target", "");            form.attr("method", "post");            form.attr("action", "/Excel/CommonExport");            var input1 = $("<input>");            input1.attr("type", "hidden");            input1.attr("name", "Title");            input1.attr("value", '@ViewBag.Title');            var input2 = $("<input>");            input2.attr("type", "hidden");            input2.attr("name", "Columns");            input2.attr("value", JSON.stringify(getColumns()));            var input3 = $("<input>");            input3.attr("type", "hidden");            input3.attr("name", "Data");            input3.attr("value", JSON.stringify(getData(grid.datagrid("getRows"))));            $("body").append(form);//將表單放置在web中            form.append(input1);            form.append(input2);            form.append(input3);            form.submit();//表單提交            $("#exportToExcelForm").remove();        }        function getData(Data) {            return Enumerable.From(Data).Select(function (c) {                var obj = {};                for (var i in columns[0]) {                    obj[columns[0][i].field] = c[columns[0][i].field];                }                return obj            }).ToArray();        }        function getColumns() {            return Enumerable.From(columns[0]).Select(function (c)     {                var obj = {};                obj.Code = c.field;                obj.Name = c.title;                obj.DataType = c.datatype || "S";                obj.Width = (c.width || 80) / 10;                obj.Hidden = c.hidden;                return obj            }).ToArray();        }

 


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲天堂视频在线观看| 日韩专区在线观看| 日韩视频欧美视频| 国内精品久久久久久| 精品久久久香蕉免费精品视频| www.亚洲男人天堂| 欧美精品日韩三级| 日韩电视剧在线观看免费网站| 97在线免费观看视频| 国产福利精品av综合导导航| 久久精品国产久精国产一老狼| 91精品国产色综合久久不卡98口| 成人夜晚看av| 久久免费视频网站| 海角国产乱辈乱精品视频| 精品久久久久国产| 美日韩精品视频免费看| 日韩免费观看视频| 欧美日韩爱爱视频| 亚洲在线观看视频| 亚洲人成电影网站色| 国产日韩精品电影| 亚洲欧美福利视频| 日韩国产欧美精品在线| 色老头一区二区三区在线观看| 久久全球大尺度高清视频| 九九九久久久久久| 欧美成人剧情片在线观看| 国产日产亚洲精品| 亚洲二区中文字幕| 久久69精品久久久久久久电影好| 久久久久久久一| 日韩一区二区三区国产| 亚洲大胆人体在线| 日韩美女视频免费看| 精品国产依人香蕉在线精品| 91热精品视频| 久久韩国免费视频| 红桃视频成人在线观看| 久久99久久亚洲国产| 国产欧美韩国高清| 热久久视久久精品18亚洲精品| 久久久久久一区二区三区| 成人h片在线播放免费网站| 九九热精品视频| 国产午夜精品全部视频播放| 日韩av成人在线| 国产欧美日韩丝袜精品一区| 欧美孕妇与黑人孕交| 亚洲欧美国产日韩天堂区| 亚洲第一精品久久忘忧草社区| 国产精品成久久久久三级| 国产亚洲美女精品久久久| 精品国产乱码久久久久久天美| 国产日韩欧美另类| 福利一区视频在线观看| 国产美女被下药99| 国产精品久久国产精品99gif| 国产精品久久久久久久电影| 欧美主播福利视频| 亚洲人精选亚洲人成在线| 日韩欧美亚洲综合| 久久久免费高清电视剧观看| 尤物yw午夜国产精品视频明星| 97在线日本国产| 2019中文字幕在线观看| 亚洲电影在线看| 国产精品欧美日韩一区二区| 欧美亚洲视频在线看网址| 亚洲成人a**站| 91精品国产高清久久久久久91| 奇米影视亚洲狠狠色| 久久成人精品电影| 亲子乱一区二区三区电影| 色噜噜狠狠狠综合曰曰曰88av| 成人高清视频观看www| 一本一道久久a久久精品逆3p| 久久久国产91| 亚洲亚裔videos黑人hd| 国产日韩欧美电影在线观看| 欧美极品少妇全裸体| 亚洲电影免费观看高清完整版在线观看| 欧美精品18videos性欧美| 亚洲欧美国产高清va在线播| 欧美电影免费观看大全| 欧美自拍视频在线观看| 亚洲精品国产精品国自产在线| 国产做受69高潮| 国产精品美女久久久久久免费| 97**国产露脸精品国产| 亚洲欧美中文日韩在线v日本| 日韩电影中文 亚洲精品乱码| 亚洲成人网在线观看| 91精品免费视频| 成人中文字幕在线观看| 久久久999精品免费| 国产91精品高潮白浆喷水| 亚洲激情小视频| 国产美女久久久| 青青在线视频一区二区三区| 国产精品v片在线观看不卡| 国产精品亚洲片夜色在线| 茄子视频成人在线| 国产在线视频2019最新视频| 久久久久国产精品免费| 久久九九免费视频| 日韩精品中文字幕有码专区| 国产suv精品一区二区三区88区| 欧美亚洲国产视频小说| 久久精品影视伊人网| 色樱桃影院亚洲精品影院| 欧美肥臀大乳一区二区免费视频| 欧美又大又粗又长| 欧美成人sm免费视频| 国产香蕉97碰碰久久人人| 国产精品视频1区| 久久成年人免费电影| 欧美午夜电影在线| 欧美放荡办公室videos4k| 懂色aⅴ精品一区二区三区蜜月| 热门国产精品亚洲第一区在线| 亚洲全黄一级网站| 亚洲电影免费观看高清完整版在线| 91久久久在线| 91沈先生在线观看| 日韩一区二区av| 一区二区三区视频观看| 久久激情视频久久| 国产成人福利网站| 国产色综合天天综合网| 欧美色视频日本高清在线观看| 亚洲国产成人爱av在线播放| 国产精品电影网| 美女福利视频一区| 91精品国产电影| 欧美电影《睫毛膏》| 亚洲肉体裸体xxxx137| 久久久久久久一区二区| 欧美人交a欧美精品| 91热精品视频| 国产91精品久久久久| 久久久久久这里只有精品| 国产欧美日韩精品专区| 3344国产精品免费看| 57pao国产成人免费| 亚洲自拍欧美色图| 中文字幕在线国产精品| 欧洲永久精品大片ww免费漫画| 欧美激情亚洲一区| 国产欧美精品在线| 国产精品欧美亚洲777777| 亚洲摸下面视频| 久久精品在线视频| 丰满岳妇乱一区二区三区| 欧美精品激情视频| 国产精品第3页| 亚洲免费伊人电影在线观看av| 中文字幕日本精品| 亚洲欧美日韩视频一区| 久久精视频免费在线久久完整在线看| 亚洲日本成人网| 欧美极品少妇xxxxⅹ喷水| 91久久在线视频| 亚洲欧美日韩第一区|