导入导出EXL
/// <summary> /// 导出公用方法 /// </summary> public class ImportBase { /// <summary> /// NOPI控件实现导入数据 /// </summary> /// <param name="FilesName">file上传文件ID</param> /// <returns>DataTable</returns> public static DataTable ImportExcel(HttpPostedFileBase files1) { //上传和返回(保存到数据库中)的路径 string uppath = string.Empty; string savepath = string.Empty; string nameImg = Guid.NewGuid().ToString(); //记录excel中的所有图片的数据库路径 List<string> list_Url = new List<string>(); #region 上传临时文件部分 //导入文档格式校验 if (files1.ContentType != "application/vnd.ms-excel") { DataTable dt = new DataTable(); dt.Columns.Add("error"); dt.Rows.Add("error"); return dt; } string fileName = files1.FileName; //获得上传图片的类型(后缀名) string type = fileName.Substring(fileName.LastIndexOf(".") + 1).ToLower(); HttpPostedFileBase files = files1; Stream filedata = files.InputStream;//上传文件的流 #endregion IWorkbook workbook = WorkbookFactory.Create(filedata); //HSSFWorkbook hssfWorkBook = new HSSFWorkbook(file); IList pictures = workbook.GetAllPictures(); ISheet sheet = workbook.GetSheetAt(0); //取第一个表 DataTable table = new DataTable(); IRow headerRow = sheet.GetRow(0);//第一行为标题行 int cellCount = headerRow.LastCellNum;//LastCellNum = PhysicalNumberOfCells int rowCount = sheet.LastRowNum;//LastRowNum = PhysicalNumberOfRows - 1 //handling header. for (int i = headerRow.FirstCellNum; i < cellCount; i++) { ICell hs = headerRow.GetCell(i); //ColumnDataType[i] = GetCellDataType(hs); //CellType dsfa = hs.CellType; DataColumn column = new DataColumn(headerRow.GetCell(i).StringCellValue); table.Columns.Add(column); } for (int i = (sheet.FirstRowNum + 1); i <= rowCount; i++) { IRow row = sheet.GetRow(i); DataRow dataRow = table.NewRow(); if (row != null) { for (int j = 0; j < cellCount; j++) { if (row.GetCell(j) != null) { dataRow[j] = row.GetCell(j); } //else //{ // dataRow[j] = list_Url[i - 1]; //} } } table.Rows.Add(dataRow); } return table; } /// <summary> /// 将Excel导入到DataSet /// 返回DataSet /// </summary> /// <returns></returns> public static DataSet ExcelToDataSet(string fileupexcel,HttpPostedFileBase file) { string strType = System.IO.Path.GetExtension(fileupexcel); DataSet ds = new DataSet(); string filepath = HttpContext.Current.Server.MapPath(@"~/UpExcel/") + Guid.NewGuid().ToString().Trim()+strType;// string path= HttpContext.Current.Server.MapPath("~/UpExcel/"); if (File.Exists(path)) { Directory.CreateDirectory(path); } file.SaveAs(filepath); string strCon = string.Empty; if (strType == ".xlsx") { strCon = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + filepath + ";Extended Properties='Excel 12.0;IMEX=1'"; } else if (strType == ".xls") { strCon = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + filepath + ";Extended Properties='Excel 8.0;IMEX=1'"; } OleDbConnection conn = new OleDbConnection(strCon); conn.Open(); DataTable schemaTable = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null); string tblname = "[" + schemaTable.Rows[0][2].ToString().Trim() + "]"; try { string sql = "select * from " + tblname; OleDbDataAdapter adapter = new OleDbDataAdapter(sql, conn); adapter.Fill(ds, tblname); } catch (Exception ex) { throw ex; } finally { conn.Close(); File.Delete(filepath); } return ds; } } #region 导出 /// <summary> /// 导出 /// </summary> /// <returns></returns> public ActionResult ExportExcel() { GetPubParameter(); IList<IT_TechnicalInformation> list = new List<IT_TechnicalInformation>(); if (Request.QueryString["ids"] != null) { string ids = HttpUtility.UrlDecode(Request.QueryString["ids"]); string[] idCollections = ids.TrimEnd(',').Split(new char[] { ',' }); if (idCollections != null) { for (int i = 0; i < idCollections.Length; i++) { IT_TechnicalInformation info = new IT_TechnicalInformation(); if (!string.IsNullOrEmpty(idCollections[i])) { info = technicalbll.GetModel(idCollections[i]); list.Add(info); } } NPOIExcel(list); } } return null; } #endregion #region 使用NPOI控件实现导出 private void NPOIExcel(IList<IT_TechnicalInformation> list) { string path = ConfigurationManager.AppSettings["fileProxy"]; FileInfo TheFile = new FileInfo(Server.MapPath(path)); if (!TheFile.Directory.Exists) { TheFile.Directory.Create(); } MemoryStream ms = new MemoryStream(); NPOI.HSSF.UserModel.HSSFWorkbook workbook = new NPOI.HSSF.UserModel.HSSFWorkbook(); NPOI.SS.UserModel.ISheet sheet = workbook.CreateSheet(); NPOI.SS.UserModel.IRow headerRow = sheet.CreateRow(0); NPOI.SS.UserModel.ICell cel2 = headerRow.CreateCell(0); headerRow.CreateCell(0).SetCellValue("主题"); headerRow.CreateCell(1).SetCellValue("产品"); headerRow.CreateCell(2).SetCellValue("技术"); headerRow.CreateCell(3).SetCellValue("创建人"); headerRow.CreateCell(4).SetCellValue("创建时间"); NPOI.HSSF.UserModel.HSSFCellStyle cs2 = (NPOI.HSSF.UserModel.HSSFCellStyle)workbook.CreateCellStyle(); NPOI.HSSF.UserModel.HSSFFont font2 = (NPOI.HSSF.UserModel.HSSFFont)workbook.CreateFont(); font2.Boldweight = (short)NPOI.SS.UserModel.FontBoldWeight.Bold; cs2.FillPattern = NPOI.SS.UserModel.FillPattern.SolidForeground; cs2.FillForegroundColor = 40; cs2.VerticalAlignment = NPOI.SS.UserModel.VerticalAlignment.Top; cs2.Alignment = NPOI.SS.UserModel.HorizontalAlignment.Center; cs2.SetFont(font2); cs2.BorderBottom = NPOI.SS.UserModel.BorderStyle.Thin; cs2.BorderLeft = NPOI.SS.UserModel.BorderStyle.Thin; cs2.BorderRight = NPOI.SS.UserModel.BorderStyle.Thin; cs2.BorderTop = NPOI.SS.UserModel.BorderStyle.Thin; for (int i = 0; i <= 4; i++) { sheet.SetColumnWidth(i, 100 * 40); headerRow.GetCell(i).CellStyle = cs2; } headerRow.HeightInPoints = 30; int rowIndex = 1; NPOI.HSSF.UserModel.HSSFPatriarch patriarch = (NPOI.HSSF.UserModel.HSSFPatriarch)sheet.CreateDrawingPatriarch(); if (list != null && list.Count > 0) { NPOI.HSSF.UserModel.HSSFCellStyle cs3 = (NPOI.HSSF.UserModel.HSSFCellStyle)workbook.CreateCellStyle(); NPOI.HSSF.UserModel.HSSFFont font3 = (NPOI.HSSF.UserModel.HSSFFont)workbook.CreateFont(); cs3.VerticalAlignment = NPOI.SS.UserModel.VerticalAlignment.Top; cs3.Alignment = NPOI.SS.UserModel.HorizontalAlignment.Center; for (int i = 0; i < list.Count; i++) { IT_TechnicalInformation info = technicalbll.GetModel(list[i].TechnicalInformation_ID); NPOI.SS.UserModel.IRow dataRow = sheet.CreateRow(rowIndex); dataRow.CreateCell(0).SetCellValue(info.TechnicalName); dataRow.CreateCell(1).SetCellValue(info.ProductName); dataRow.CreateCell(2).SetCellValue(info.ResearcherName); dataRow.CreateCell(3).SetCellValue(info.CreateBy); dataRow.CreateCell(4).SetCellValue(info.CreateTime.Value.ToString("yyyy-MM-dd")); for (int j = 0; j <= 4; j++) { dataRow.GetCell(j).CellStyle = cs3; } dataRow.HeightInPoints = 30; rowIndex++; } workbook.Write(ms); ms.Flush(); ms.Position = 0; sheet = null; headerRow = null; workbook = null; string excelname = System.DateTime.Now.ToString().Replace(":", "").Replace("-", "").Replace(" ", ""); string filePath = Server.MapPath(path + "ReadExcel") + "" + Guid.NewGuid().ToString() + "导出.xls"; FileStream fs = new FileStream(filePath, FileMode.Create, FileAccess.Write); byte[] data = ms.ToArray(); fs.Write(data, 0, data.Length); fs.Flush(); fs.Close(); data = null; ms = null; fs = null; #region 导出到客户端 Response.ContentEncoding = System.Text.Encoding.GetEncoding("GB2312"); Response.AppendHeader("content-disposition", "attachment;filename=" + System.Web.HttpUtility.UrlEncode("导出", System.Text.Encoding.UTF8) + ".xls"); Response.ContentType = "Application/excel"; Response.WriteFile(filePath); Response.End(); FileInfo f = new FileInfo(filePath); f.Delete(); #endregion Response.Write("<script>history.go(-1);</script>"); } else { Response.Write("<script>alert('没有可导出的数据!');history.go(-1);</script>"); } } #region 导出 /// <summary> /// 导出 /// </summary> /// <returns></returns> public ActionResult ExportExcels() { GetPubParameter(); IList<IT_InformationPatent> list = new List<IT_InformationPatent>(); if (Request.QueryString["ids"] != null) { string ids = HttpUtility.UrlDecode(Request.QueryString["ids"]); string[] idCollections = ids.TrimEnd(',').Split(new char[] { ',' }); if (idCollections != null) { for (int i = 0; i < idCollections.Length; i++) { IT_InformationPatent info = new IT_InformationPatent(); if (!string.IsNullOrEmpty(idCollections[i])) { info = infoPatbll.GetModel(idCollections[i]); list.Add(info); } } NPOIExcels(list); } } return null; } #endregion private void NPOIExcels(IList<IT_InformationPatent> list) { string path = ConfigurationManager.AppSettings["fileProxy"]; FileInfo TheFile = new FileInfo(Server.MapPath(path)); if (!TheFile.Directory.Exists) { TheFile.Directory.Create(); } MemoryStream ms = new MemoryStream(); NPOI.HSSF.UserModel.HSSFWorkbook workbook = new NPOI.HSSF.UserModel.HSSFWorkbook(); NPOI.SS.UserModel.ISheet sheet = workbook.CreateSheet(); NPOI.SS.UserModel.IRow headerRow = sheet.CreateRow(0); NPOI.SS.UserModel.ICell cel2 = headerRow.CreateCell(0); headerRow.CreateCell(0).SetCellValue("名称"); headerRow.CreateCell(1).SetCellValue("申请号"); headerRow.CreateCell(2).SetCellValue("发明人"); headerRow.CreateCell(3).SetCellValue("类型"); headerRow.CreateCell(4).SetCellValue("产品"); headerRow.CreateCell(5).SetCellValue("技术"); headerRow.CreateCell(6).SetCellValue("申请日"); headerRow.CreateCell(7).SetCellValue("摘要"); headerRow.CreateCell(8).SetCellValue("状态"); headerRow.CreateCell(9).SetCellValue("日"); headerRow.CreateCell(10).SetCellValue("号"); headerRow.CreateCell(11).SetCellValue("申请人"); headerRow.CreateCell(12).SetCellValue("机构"); headerRow.CreateCell(13).SetCellValue("等级"); headerRow.CreateCell(14).SetCellValue("备注"); NPOI.HSSF.UserModel.HSSFCellStyle cs2 = (NPOI.HSSF.UserModel.HSSFCellStyle)workbook.CreateCellStyle(); NPOI.HSSF.UserModel.HSSFFont font2 = (NPOI.HSSF.UserModel.HSSFFont)workbook.CreateFont(); font2.Boldweight = (short)NPOI.SS.UserModel.FontBoldWeight.Bold; cs2.FillPattern = NPOI.SS.UserModel.FillPattern.SolidForeground; cs2.FillForegroundColor = 40; cs2.VerticalAlignment = NPOI.SS.UserModel.VerticalAlignment.Top; cs2.Alignment = NPOI.SS.UserModel.HorizontalAlignment.Center; cs2.SetFont(font2); cs2.BorderBottom = NPOI.SS.UserModel.BorderStyle.Thin; cs2.BorderLeft = NPOI.SS.UserModel.BorderStyle.Thin; cs2.BorderRight = NPOI.SS.UserModel.BorderStyle.Thin; cs2.BorderTop = NPOI.SS.UserModel.BorderStyle.Thin; for (int i = 0; i <= 14; i++) { sheet.SetColumnWidth(i, 100 * 40); headerRow.GetCell(i).CellStyle = cs2; } headerRow.HeightInPoints = 30; int rowIndex = 1; NPOI.HSSF.UserModel.HSSFPatriarch patriarch = (NPOI.HSSF.UserModel.HSSFPatriarch)sheet.CreateDrawingPatriarch(); if (list != null && list.Count > 0) { NPOI.HSSF.UserModel.HSSFCellStyle cs3 = (NPOI.HSSF.UserModel.HSSFCellStyle)workbook.CreateCellStyle(); NPOI.HSSF.UserModel.HSSFFont font3 = (NPOI.HSSF.UserModel.HSSFFont)workbook.CreateFont(); cs3.VerticalAlignment = NPOI.SS.UserModel.VerticalAlignment.Top; cs3.Alignment = NPOI.SS.UserModel.HorizontalAlignment.Center; for (int i = 0; i < list.Count; i++) { NPOI.SS.UserModel.IRow dataRow = sheet.CreateRow(rowIndex); dataRow.CreateCell(0).SetCellValue(list[i].PatentName); dataRow.CreateCell(1).SetCellValue(list[i].AppPatentNO); dataRow.CreateCell(2).SetCellValue(list[i].Inventor); dataRow.CreateCell(3).SetCellValue(list[i].PatentType); dataRow.CreateCell(4).SetCellValue(list[i].ProductName); dataRow.CreateCell(5).SetCellValue(list[i].ResearcherName); dataRow.CreateCell(6).SetCellValue(list[i].ApplicationDate.Value.ToString("yyyy-MM-dd")); dataRow.CreateCell(7).SetCellValue(list[i].Summary); dataRow.CreateCell(8).SetCellValue(list[i].LawState); dataRow.CreateCell(9).SetCellValue(list[i].DulletinData.Value.ToString("yyyy-MM-dd")); dataRow.CreateCell(10).SetCellValue(list[i].DulletinNO); dataRow.CreateCell(11).SetCellValue(list[i].AppPatentUser); dataRow.CreateCell(12).SetCellValue(list[i].Agency); dataRow.CreateCell(13).SetCellValue(list[i].Level); dataRow.CreateCell(14).SetCellValue(list[i].Remark); for (int j = 0; j <= 14; j++) { dataRow.GetCell(j).CellStyle = cs3; } dataRow.HeightInPoints = 30; rowIndex++; } workbook.Write(ms); ms.Flush(); ms.Position = 0; sheet = null; headerRow = null; workbook = null; string excelname = System.DateTime.Now.ToString().Replace(":", "").Replace("-", "").Replace(" ", ""); string filePath = Server.MapPath(path + "ReadExcel") + "" + Guid.NewGuid().ToString() + "导出.xls"; FileStream fs = new FileStream(filePath, FileMode.Create, FileAccess.Write); byte[] data = ms.ToArray(); fs.Write(data, 0, data.Length); fs.Flush(); fs.Close(); data = null; ms = null; fs = null; #region 导出到客户端 Response.ContentEncoding = System.Text.Encoding.GetEncoding("GB2312"); Response.AppendHeader("content-disposition", "attachment;filename=" + System.Web.HttpUtility.UrlEncode("导出", System.Text.Encoding.UTF8) + ".xls"); Response.ContentType = "Application/excel"; Response.WriteFile(filePath); Response.End(); FileInfo f = new FileInfo(filePath); f.Delete(); #endregion Response.Write("<script>history.go(-1);</script>"); } else { Response.Write("<script>alert('没有可导出的数据!');history.go(-1);</script>"); } } #endregion /// <summary> /// 导入方法 /// </summary> /// <returns></returns> [HttpPost] public ActionResult Import() { HttpPostedFileBase files1 = Request.Files["localImport"]; DataTable dt = ImportBase.ExcelToDataSet(files1.FileName, files1).Tables[0]; if (dt.Rows.Count > 0) { if (dt.Rows[0][0].ToString().Trim() == "error") { Response.Write("<script> window.parent.uploadSuccess('导入文件错误,请重新上传导入文件!');</script>"); } else { try { if (dt.Rows.Count > 0) { for (int i = 0; i < dt.Rows.Count; i++) { IT_InformationPatent info = new IT_InformationPatent(); info.InformationPatent_ID = Guid.NewGuid().ToString(); info.TechnicalID = List; info.AppPatentNO = dt.Rows[i]["申请号"].ToString().Trim(); if (string.IsNullOrEmpty(dt.Rows[i]["申请日"].ToString().Trim())) { info.ApplicationDate = null; } else { info.ApplicationDate = Convert.ToDateTime(dt.Rows[i]["申请日"].ToString().Trim()); } info.PatentName = dt.Rows[i]["名称"].ToString().Trim(); info.Summary = dt.Rows[i]["摘要"].ToString().Trim(); info.PatentType = dt.Rows[i]["类型"].ToString().Trim(); info.LawState = dt.Rows[i]["状态"].ToString().Trim(); if (string.IsNullOrEmpty(dt.Rows[i]["日"].ToString().Trim())) { info.DulletinData = null; } else { info.DulletinData = Convert.ToDateTime(dt.Rows[i]["授权公告日"].ToString().Trim()); } info.DulletinNO = dt.Rows[i]["号"].ToString().Trim(); info.AppPatentUser = dt.Rows[i]["申请人"].ToString().Trim(); info.Inventor = dt.Rows[i]["发明人"].ToString().Trim(); info.Agency = dt.Rows[i]["机构"].ToString().Trim(); info.Researchers = dt.Rows[i]["技术"].ToString().Trim(); info.Products = dt.Rows[i]["产品"].ToString().Trim(); info.Level = dt.Rows[i]["等级"].ToString().Trim(); info.Remark = dt.Rows[i]["备注"].ToString().Trim(); info.CreateBy = dt.Rows[i]["创建人"].ToString().Trim(); if (string.IsNullOrEmpty(dt.Rows[i]["创建时间"].ToString().Trim())) { info.CreateTime = null; } else { info.CreateTime = Convert.ToDateTime(dt.Rows[i]["创建时间"].ToString().Trim()); } info.UpdateBy = dt.Rows[i]["更新人"].ToString().Trim(); if (string.IsNullOrEmpty(dt.Rows[i]["更新时间"].ToString().Trim())) { info.UpdateTime = null; } else { info.UpdateTime = Convert.ToDateTime(dt.Rows[i]["更新时间"].ToString().Trim()); } informationbll.Add(info); Response.Write("<script> top.uploadSuccess('导入数据成功!');window.parent.location.reload();</script>"); } } } catch (Exception) { Response.Write("<script> window.parent.uploadSuccess('导入文件错误,请重新上传导入文件!');</script>"); } } } else { Response.Write("<script> window.parent.uploadSuccess('导入文件没有数据,请重新上传导入文件!');</script>"); } return null; }