NopiHelper Excel导出 导入
来源:互联网 发布:女儿出嫁父亲知乎 编辑:程序博客网 时间:2024/06/03 19:24
先上一个Helper类:
public class NopiHelper { public string DataTableToExcel(DataTable tempDataTable, string path, bool is2007 = true) { try { //创建工作薄 var wk = GetWorkbook(is2007); SetHssfWorkbook(wk, tempDataTable); var outPath = string.Format(@"{0}.{1}", path, is2007 ? @"xlsx" : @"xls"); using (var file = new FileStream(outPath, FileMode.Create)) { wk.Write(file); } return outPath; } catch (Exception ex) { throw ex; } } public MemoryStream DataTableToExcel(DataTable tempDataTable) { try { //创建工作薄 var wk = new HSSFWorkbook(); SetHssfWorkbook(wk, tempDataTable); var file = new MemoryStream(); wk.Write(file); return file; } catch (Exception ex) { throw ex; } } public MemoryStream DataTableToExcel(DataSet ds) { try { var wk = new HSSFWorkbook(); //创建工作薄 for (int i = 0; i < ds.Tables.Count; i++) { SetHssfWorkbook(wk, ds.Tables[i]); } var file = new MemoryStream(); wk.Write(file); return file; } catch (Exception ex) { throw ex; } } public MemoryStream DataTableToExcel_Xlsx(DataSet ds) { try { var wk = new XSSFWorkbook(); //创建工作薄 for (int i = 0; i < ds.Tables.Count; i++) { SetHssfWorkbook(wk, ds.Tables[i]); } var file = new MemoryStream(); wk.Write(file); return file; } catch (Exception ex) { throw ex; } } public DataTable GetFromExcel(string filePath, bool isFirstRowColumn = true) { try { ISheet sheet = null; DataTable data = new DataTable(); int startRow = 0; var workbook = GetWorkbook(filePath); sheet = workbook.GetSheetAt(0); if (sheet != null) { IRow firstRow = sheet.GetRow(0); int cellCount = firstRow.LastCellNum; //一行最后一个cell的编号 即总的列数 if (isFirstRowColumn) { for (int i = firstRow.FirstCellNum; i < cellCount; ++i) { ICell cell = firstRow.GetCell(i); if (cell != null) { string cellValue = cell.StringCellValue; if (cellValue != null) { DataColumn column = new DataColumn(cellValue); data.Columns.Add(column); } } } startRow = sheet.FirstRowNum + 1; } else { startRow = sheet.FirstRowNum; } //最后一列的标号 int rowCount = sheet.LastRowNum; for (int i = startRow; i <= rowCount; ++i) { IRow row = sheet.GetRow(i); if (row == null) continue; //没有数据的行默认是null DataRow dataRow = data.NewRow(); for (int j = row.FirstCellNum; j < cellCount; ++j) { if (row.GetCell(j) != null) //同理,没有数据的单元格都默认是null dataRow[j] = row.GetCell(j).ToString(); } data.Rows.Add(dataRow); } } return data; } catch (Exception ex) { throw ex; } } public DataTable GetFromExcel(Stream stream, bool isFirstRowColumn = true) { try { ISheet sheet = null; DataTable data = new DataTable(); int startRow = 0; var workbook = new NPOI.XSSF.UserModel.XSSFWorkbook(stream); // 2007 格式 sheet = workbook.GetSheetAt(0); if (sheet != null) { IRow firstRow = sheet.GetRow(0); int cellCount = firstRow.LastCellNum; //一行最后一个cell的编号 即总的列数 if (isFirstRowColumn) { for (int i = firstRow.FirstCellNum; i < cellCount; ++i) { ICell cell = firstRow.GetCell(i); if (cell != null) { string cellValue = cell.StringCellValue; if (cellValue != null) { DataColumn column = new DataColumn(cellValue); data.Columns.Add(column); } } } startRow = sheet.FirstRowNum + 1; } else { startRow = sheet.FirstRowNum; } //最后一列的标号 int rowCount = sheet.LastRowNum; for (int i = startRow; i <= rowCount; ++i) { IRow row = sheet.GetRow(i); if (row == null) continue; //没有数据的行默认是null DataRow dataRow = data.NewRow(); for (int j = row.FirstCellNum; j < cellCount; ++j) { if (row.GetCell(j) != null) //同理,没有数据的单元格都默认是null dataRow[j] = row.GetCell(j).ToString(); } data.Rows.Add(dataRow); } } return data; } catch (Exception ex) { throw ex; } } #region Private private IWorkbook GetWorkbook(string path) { try { IWorkbook userModel; using (var file = new FileStream(path, FileMode.Open, FileAccess.Read)) { try { userModel = new NPOI.XSSF.UserModel.XSSFWorkbook(file); // 2007 格式 } catch (Exception) { userModel = new NPOI.HSSF.UserModel.HSSFWorkbook(file); // 2003 格式 } finally { file.Close(); } } return userModel; } catch (Exception ex) { throw ex; } } private IWorkbook GetWorkbook(bool is2007 = true) { try { IWorkbook userModel; if (is2007) userModel = new NPOI.XSSF.UserModel.XSSFWorkbook(); // 2007 格式 else userModel = new NPOI.HSSF.UserModel.HSSFWorkbook(); // 2003 格式 return userModel; } catch (Exception ex) { throw ex; } } private void SetHssfWorkbook(IWorkbook hssfWorkbook, DataTable tempDataTable) { try { //创建一个名称为mySheet的表 var tb = hssfWorkbook.CreateSheet(tempDataTable.TableName); //标题行 var rowhead = tb.CreateRow(0); for (var i = 0; i < tempDataTable.Columns.Count; i++) //写入字段 { var cell = rowhead.CreateCell(i); //在第二行中创建单元格 cell.SetCellValue(tempDataTable.Columns[i].Caption); //循环往第二行的单元格中添加数据 } for (var y = 0; y < tempDataTable.Rows.Count; y++) { var rowcontent = tb.CreateRow(y + 1); for (int i = 0; i < tempDataTable.Columns.Count; i++) { var cell = rowcontent.CreateCell(i); //在第二行中创建单元格 cell.SetCellValue(tempDataTable.Rows[y][tempDataTable.Columns[i].ToString()].ToString()); //循环往第二行的单元格中添加数据 } } } catch (Exception ex) { throw ex; } } #endregion }
一、Excel导出功能:
页面按钮:window.open("/User/UserExportExcel/?SearchPhone=" + SearchPhone);控制器代码:
/// <summary> /// 导出用户列表 /// </summary> /// <param name="collection"></param> /// <returns></returns> public ActionResult UserExportExcel(FormCollection collection) { try { var searchEntity = GetSelect(); var listData = new UserBll().GetList(searchEntity).OrderByDescending(c => c.Id).ToList(); DataSet ds = new DataSet(); var dt = new DataTable(); dt.Columns.Add("序号"); dt.Columns.Add("编号"); dt.Columns.Add("用户名"); var i = 1; if (listData.Count > 20000) { DataRow dr = dt.NewRow(); dr["序号"] = i++; dr["编号"] = "数据过多请缩小时间范围,分批导出"; dr["用户名"] = "数据过多请缩小时间范围,分批导出"; dt.Rows.Add(dr); } else { listData.ForEach(entity => { DataRow dr = dt.NewRow(); dr["序号"] = i++; dr["编号"] = entity.No; dr["用户名"] = entity.Name; dt.Rows.Add(dr); }); } dt.TableName = "用户列表_" + ConfigInfo.CurrrentDateTime.ToString("yyyyMMdd") + "_" + (1).ToString().PadLeft(4, '0') + ".xlsx"; ds.Tables.Add(dt); string title = "用户列表(" + ConfigInfo.CurrrentDateTime.ToString("yyyyMMdd") + ")" + ".xlsx"; var stream = new NopiHelper().DataTableToExcel_Xlsx(ds); return File(stream.ToArray(), "application/ms-excel", title); } catch (Exception ex) { throw; } }
二、Excel导入功能:
1 、页面代码:
<input type="file" id="ExcelFile" accept=".csv,.xlsx" /> <input type="button" value="上传" id="btn_UploadExcel" /> <table id="table_body" cellpadding="5" cellspacing="0" width="100%" align="center" class="grid" border="0"> <thead> <tr> <th>序号</th> <th>真实姓名</th> <th>手机号</th> <th>备注信息</th> </tr> </thead> <tbody></tbody> </table> <input type="hidden" name="json" id="json" value="" />
<input type="button" value="发送XX" id="btn_SendAddInterestActivity" />2、上传按钮JS:
//上传数据 $("#btn_UploadExcel").click(function () { var obj = document.getElementById("ExcelFile"); var formdata = new FormData(); var fileObj = obj.files; for (var i = 0; i < fileObj.length; i++) formdata.append("file" + i, fileObj[i]); $.ajax({ type: 'POST', url: '/AddInterestActivity/UploadExcel', data: formdata, contentType: false, processData: false }).then(function (data) { if (!isEmpty(data)) { var html = ""; $.each(data, function (index, value) { html += "<tr>"; html += "<td>" + value["序号"] + "</td>"; html += "<td>" + value["真实姓名"] + "</td>"; html += "<td>" + value["手机号"] + "</td>"; html += "<td>" + value["备注"] + "</td>"; html += "</tr>"; }); $("#table_body tbody").html(html); } else { alert("数据类型错误"); } }, function () { //failCal }); });
收集数据保存:
//发送 $("#btn_SendAddInterestActivity").click(function () { $.messager.confirm("确认", "确定执行此操作", function (r) { var tbody = $("#table_body tbody"); var trList = tbody.children("tr") var json = []; for (var i = 0; i < trList.length; i++) { var tdArr = trList.eq(i).find("td"); var RealName = tdArr.eq(1).html();//手机号 var UserPhone = tdArr.eq(2).html();//手机号 var Remark = tdArr.eq(3).html();//备注 if (UserPhone.indexOf("不合格") > 0 || RealName.indexOf("不合格") > 0) { alert("不合格"); $("#submitloading").hide(); return false; } json.push({ "UserPhone": UserPhone, "RealName": RealName, "Remark": Remark }); } $("#json").val(JSON.stringify(json)); //alert("发送红包"); var data = { json: $("#json").val(), activityId: $("#Id").val() }; $.ajax({ type: 'POST', url: '/AddInterestActivity/SendAddInterestActivity', data: data, success: function (msg) { if (msg.ResultType == 0) { alert(msg.Message); tbody.html(""); } else { alert("发送失败"); } } }); }); });
3、上传控制器:
public ActionResult UploadExcel() { HttpFileCollectionBase fileToUpload = Request.Files; foreach (string file in fileToUpload) { var curFile = Request.Files[file]; if (curFile.ContentLength < 1) continue; string fileName = DateTime.Now.ToString("yyyyMMddHHmmss") + System.IO.Path.GetExtension(curFile.FileName); if (fileName.Substring((fileName.IndexOf(".") + 1)) == "xls" || fileName.Substring((fileName.IndexOf(".") + 1)) == "xlsx" || fileName.Substring((fileName.IndexOf(".") + 1)) == "csv") { DataTable dt = new NopiHelper().GetFromExcel(curFile.InputStream); if (!dt.Columns.Contains("手机号")) { return null; } for (int i = 0; i < dt.Rows.Count; i++) { //验证“手机号” var toName = dt.Rows[i]["手机号"].ToString(); var operationResult_ToUser = new UserBll().GetByPhone(toName); if (operationResult_ToUser.ResultType != OperationResultType.Success) { dt.Rows[i]["手机号"] += " <span style='color:red'>(不合格)</span>"; } ////验证“交易金额” //var money = dt.Rows[i]["交易金额"].ToString(); //if (string.IsNullOrEmpty(money) || money == "0") //{ // dt.Rows[i]["交易金额"] += " <span style='color:red'>(不合格)</span>"; //} } string json = Newtonsoft.Json.JsonConvert.SerializeObject(dt); return Content(json, "text/json"); } } return null; }
[HttpPost] public ActionResult SendAddInterestActivity(string json, int activityId) { try { //var importEndTime = Convert.ToDateTime(ImportEndTime); if (json == "[]" || activityId == 0) { return Json(new OperationResult(OperationResultType.Success, @"上传文件错误,或活动不存在")); } //执行保存代码 return Json(new OperationResult(OperationResultType.Success, @"保存成功")); } catch (Exception ex) { throw; } }
阅读全文
0 0
- NopiHelper Excel导出 导入
- 导入/导出Excel
- 导入/导出Excel
- 导入/导出Excel
- 导入/导出Excel
- EXCEL导入导出
- Excel导入&导出
- 数据库导入导出Excel
- 导入/导出Excel
- 导入/导出Excel
- 导入/导出Excel
- 导入/导出Excel
- 导入/导出Excel
- excel导入、导出数据
- 导入/导出Excel
- 导入/导出Excel
- 导入/导出Excel
- 导入/导出Excel
- 用JS获取地址栏参数的方法
- CSS Shapes实现元素滚动自动环绕
- mysql关联更新update
- python numpy教程
- elasticsearch数据导出/导入
- NopiHelper Excel导出 导入
- excel中如何在一个单元格中输入多行文字
- cocos2dx+KinectV2 体感游戏之微信打飞机
- 面向对象的设计原则
- spring的@Transactional注解详细用法
- 负载均衡----实现配置篇(Nginx)
- 表格第一行固定,下面
- Java 根据模板导出Excel时,如何根据后台数据设置复选框的勾选
- Qt设置无边框窗口,窗口透明度