您的位置:首页 > 其它

.Net MVC 导入导出Excel总结(三种导出Excel方法,一种导入Excel方法)

2017-10-09 11:23 519 查看

http://blog.csdn.net/gx_liangwenlong/article/details/46277277

通过MVC控制器导出导入Excel文件(可用于java SSH架构)

[csharp]
view plain
copy
print?

public class ExcelController : Controller  
    {  
        //  
        // GET: /Excel/  
        Models.zbwxglEntities myMdl = new Models.zbwxglEntities();  
        /// <summary>  
        /// 第一种方法,利用文件输出流进行读写操作  
        /// </summary>  
        public void outExcel()  
        {  
            DataTable dtData = (DataTable)Session["datatable"];  
            string shtnl = "";  
            shtnl = "<table border='1' cellspacing='1' cellpadding='1'>";  
            shtnl = shtnl + "<thead>";  
            for (int j = 0; j < dtData.Columns.Count; j++)  
            {  
                shtnl = shtnl + "<th>" + j + "</th>";  
            }  
            shtnl = shtnl + "</thead><tbody>";  
            for (int i = 0; i < dtData.Rows.Count; i++)  
            {  
                shtnl = shtnl + "<tr>";  
                for (int j = 0; j < dtData.Columns.Count; j++)  
                {  
                        shtnl = shtnl + "<td>" + dtData.Rows[i][j] + "</td>";  
                }  
                shtnl = shtnl + "</tr>";  
            }  
            shtnl = shtnl + "</tbody></table>";  
            ExportToExcel("application/x-excel", "123.xls", shtnl);  
        }  
        public void ExportToExcel(string FieldType, string FileName, string dt)  
        {  
            System.Web.HttpContext.Current.Response.Charset = "utf-8";  
            System.Web.HttpContext.Current.Response.AppendHeader("Content-Disposition", "attachment;filename=" + HttpUtility.UrlEncode(FileName, System.Text.Encoding.UTF8).ToString());  
            System.Web.HttpContext.Current.Response.ContentEncoding = System.Text.Encoding.GetEncoding("GB2312");  
            System.Web.HttpContext.Current.Response.ContentType = FieldType;  
            StringWriter tw = new StringWriter();  
            System.Web.HttpContext.Current.Response.Output.Write(dt);  
            System.Web.HttpContext.Current.Response.Flush();  
            System.Web.HttpContext.Current.Response.End();  
        }  
        /// <summary>  
        /// 第二种方法,利用微软自带插件  
        /// </summary>  
        /// <returns></returns>  
        public ActionResult DownloadFile()  
        {  
            try  
            {  
                DataTable dt = (DataTable)Session["datatable"];  
                string strdate = DateTime.Now.ToString("yyyyMMddhhmmss");  
                string str = Server.HtmlEncode(Request.PhysicalApplicationPath).ToString() + "Content\\DownLoadTest\\" + Session["YongHuID"] + strdate + "Excel.xls";  
                if (System.IO.File.Exists(str))  
                {  
                    //如果存在则删除  
                    System.IO.File.Delete(str);  
                }  
                ConvertHelper myConvertHelper = new ConvertHelper();  
                DataTableToExcel(dt, str);  
                System.Threading.Thread.Sleep(5000);  
                return File(str, "application/vnd.ms-excel", strdate + "Excel.xls");  
            }  
            catch  
            {  
                DataTable dt = new DataTable();  
                List<Dictionary<string, object>> ListReturn = ConvertHelper.DtToList(dt);  
                return Json(ListReturn, JsonRequestBehavior.AllowGet);  
            }  
        }  
        public void DataTableToExcel(DataTable datas, string p)  
        {  
  
            Microsoft.Office.Interop.Excel.Application app = new Microsoft.Office.Interop.Excel.Application();  
            app.SheetsInNewWorkbook = 1;  
            app.Workbooks.Add();  
            Microsoft.Office.Interop.Excel.Worksheet sheet = (Microsoft.Office.Interop.Excel.Worksheet)app.ActiveWorkbook.Worksheets[1];  
  
            for (int i = 0; i < datas.Columns.Count; i++)  
            {  
                sheet.Cells[1, i + 1] = datas.Columns[i].ColumnName;  
            }  
  
            for (int i = 0; i < datas.Rows.Count; i++)  
            {  
                for (int j = 0; j < datas.Columns.Count; j++)  
                {  
                    sheet.Cells[2 + i, j + 1] = datas.Rows[i][j].ToString();  
                }  
            }  
  
            app.Visible = true;  
            System.Threading.Thread.Sleep(500);  
            try  
            {  
                app.ActiveWorkbook.SaveAs(p);  
            }  
            catch { }  
            app.Quit();  
        }  
        /// <summary>  
        /// 第三种方法,利用NPOI插件  
        /// </summary>  
        /// <returns></returns>  
        public FileResult DownLoadExcelJiZuChaXunGenRenXiaoFeiJiLu()  
        {  
            DataTable dt = (DataTable)Session["datatable"];//获取需要导出的datatable数据  
            //创建Excel文件的对象  
            NPOI.HSSF.UserModel.HSSFWorkbook book = new NPOI.HSSF.UserModel.HSSFWorkbook();  
            //添加一个sheet  
            NPOI.SS.UserModel.ISheet sheet1 = book.CreateSheet("Sheet1");  
            //给sheet1添加第一行的头部标题  
            NPOI.SS.UserModel.IRow row1 = sheet1.CreateRow(0);  
            //row1.RowStyle.FillBackgroundColor = "";  
            for (int i = 0; i < dt.Columns.Count; i++)  
            {  
                row1.CreateCell(i).SetCellValue(dt.Columns[i].ColumnName);  
            }  
            //将数据逐步写入sheet1各个行  
            for (int i = 0; i < dt.Rows.Count; i++)  
            {  
                NPOI.SS.UserModel.IRow rowtemp = sheet1.CreateRow(i + 1);  
                for (int j = 0; j < dt.Columns.Count; j++)  
                {  
                    rowtemp.CreateCell(j).SetCellValue(dt.Rows[i][j].ToString().Trim());  
                }  
            }  
            string strdate = DateTime.Now.ToString("yyyyMMddhhmmss");//获取当前时间  
            // 写入到客户端   
            System.IO.MemoryStream ms = new System.IO.MemoryStream();  
            book.Write(ms);  
            ms.Seek(0, SeekOrigin.Begin);  
            return File(ms, "application/vnd.ms-excel", strdate + "Excel.xls");  
        }  
        /// <summary>  
        /// Excel导入  
        /// </summary>  
        /// <returns></returns>  
        public ActionResult GetTableFromExcel()  
        {  
            //FileStream file = new FileStream(Server.HtmlEncode(Request.PhysicalApplicationPath).ToString() + "excel\\123.xlsx", FileMode.Open, FileAccess.Read);  
  
            HttpPostedFileBase fostFile = Request.Files["file1"];  
            Stream streamfile = fostFile.InputStream;  
            //HSSFWorkbook hssfworkbook = new HSSFWorkbook(streamfile);  
            HSSFWorkbook hssfworkbook = new HSSFWorkbook(streamfile);  
            using (NPOI.SS.UserModel.ISheet sheet = hssfworkbook.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++)  
                {  
                    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 = row.FirstCellNum; j < cellCount; j++)  
                        {  
                            if (row.GetCell(j) != null)  
                                dataRow[j] = GetCellValue(row.GetCell(j));  
                        }  
                    }  
                    table.Rows.Add(dataRow);  
                }  
                for (int i = 0; i < table.Rows.Count; i++)  
                {  
                    //myUpLoadBLL.ForDownLoad(table.Rows[i][1].ToString(), table.Rows[i][2].ToString(),Convert.ToBoolean( table.Rows[i][3]));  
                }  
            }  
            return Content("");  
        }  
        /// <summary>  
        /// 根据Excel列类型获取列的值  
        /// </summary>  
        /// <param name="cell">Excel列</param>  
        /// <returns></returns>  
        private static string GetCellValue(ICell cell)  
        {  
            if (cell == null)  
                return string.Empty;  
            switch (cell.CellType)  
            {  
                case CellType.BLANK:  
                    return string.Empty;  
                case CellType.BOOLEAN:  
                    return cell.BooleanCellValue.ToString();  
                case CellType.ERROR:  
                    return cell.ErrorCellValue.ToString();  
                case CellType.NUMERIC:  
                case CellType.Unknown:  
                default:  
                    return cell.ToString();  
                case CellType.STRING:  
                    return cell.StringCellValue;  
                case CellType.FORMULA:  
                    try  
                    {  
                        HSSFFormulaEvaluator e = new HSSFFormulaEvaluator(cell.Sheet.Workbook);  
                        e.EvaluateInCell(cell);  
                        return cell.ToString();  
                    }  
                    catch  
                    {  
                        return cell.NumericCellValue.ToString();  
                    }  
            }  
        }  
    }  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: