1. 程式人生 > >.Net MVC 匯入匯出Excel總結(三種匯出Excel方法,一種匯入Excel方法)

.Net MVC 匯入匯出Excel總結(三種匯出Excel方法,一種匯入Excel方法)

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();
                    }
            }
        }
    }
該資料僅供學習,禁止用於商業用途

相關推薦

.Net MVC 匯入匯出Excel總結(匯出Excel方法匯入Excel方法)

public class ExcelController : Controller { // // GET: /Excel/ Models.zbwxglEntities myMdl = new Models.zbwxglEntities();

.Net MVC 導入導出Excel總結(導出Excel方法導入Excel方法) 通過MVC控制器導出導入Excel文件(可用於java SSH架構)

ets esp llb pat lencod cnblogs 創建 etime mmd public class ExcelController : Controller { // // GET: /Excel/ M

android中RadioButton中的自帶的圓圈如何去掉方法.xml、程式碼中

第一種.xml中 我想大家都知道 android:button="@null"其實這就是簡單的多RadioButton做的一個自定義,null就是給他為空,所以就變相的隱藏掉了它自帶那個圓圈。 重點是第二種的方法,在java程式碼中:RadioButton IB_PullD

ASP.NET MVC:多語言的技術處理策略

背景 本文介紹了多語言的三種技術處理策略,每種策略對應一種場景,這三種場景是: 多語言資源資訊只被.NET使用。 多語言資源資訊只被Javascript使用。 多語言資源資訊同時被.NET和Javascript使用。 下文我們就一個一個場景的分析。 第一種場景:多語言資源資訊只被.NET使用

ASP.NET MVC 排球計分程序 ()需求分析與數據庫設計

arch 情況 img 需求 全場 ima 功能 每次 str 需求分析: 軟件名稱:排球計分程序 1、 需要鍵入比賽人員的的姓名,需要根據場上的比賽結果及時做出操作,記分員可以在記錯的情況下撤銷上一部操作。比賽結束,記分員應能查詢到每個隊伍的進球情況,以及攔網、擊球等的

在ASP.NET MVC中利用Aspose.cells 將查詢出的數據導出為excel並在瀏覽器中下載。

width tdi 新增 column 需求 options 解決 印象 ats 正題前的嘮叨 本人是才出來工作不久的小白菜一顆,技術很一般,總是會有遇到一些很簡單的問題卻不知道怎麽做,這些問題可能是之前解決過的。發現這個問題,想著提升一下自己的技術水平,將一些學的新的‘好

ASP.NET MVC下自定義錯誤頁和展示錯誤頁的幾方式

提供服務 one url attribute 運行 16px execute 釋放 namespace 在網站運行中,錯誤是不可避免的,錯誤頁的產生也是不可缺少的。 這幾天看了博友的很多文章,自己想總結下我從中學到的和實際中配置的。 首先,需要知道產生錯誤頁的來源,一種

初學asp.net mvc架構:個人總結

Mvc Ajax→url:/控制器名/方法名/引數             /[Controller]/[ActionName]/[Parameters] 控制器名去掉Controller 將資訊傳遞到控制器,控制器處理來返回(對引數的處理

ASP.NET MVC 檔案上傳和檔案下載 以及 檔案下載的幾方法

1、序言最近專案中需要用到這個功能點,但是網上下載的時候總是出現亂碼。所以趁著這個時間自己整理出了一份,以後需要的時候就直接看自己的部落格就行了。已經測試過:在谷歌、火狐、IE等瀏覽器上都不會出現亂碼問題。2、結果展示2.1、上傳檔案成功介面 2.2、下載檔案成功介面3、上傳

asp.net MVC前臺View頁面向後臺Controller控制器傳遞資料的幾方式

上一篇文章Asp.Net MVC中的@model與Model講解了後臺控制器如何向前臺頁面傳遞資料,今天就接著為大家講解前臺View頁面向後臺Controller控制器傳遞資料的幾種方式。這幾種方式是我在實際中使用並總結的,如果那個地方說的不對或有不足之處,歡迎各位指出並給

無極哥教你微信爆粉的方法天加滿5000好友

直接 數據傳輸 騰訊 用戶數據 規則 時間 服務器 之前 href 2018年,朋友圈或各種社交場合總時不時冒出“某某做微信爆粉,一天加滿5000好友”的說法。這確實是存在的,但嚴重違規。突破每日添加好友數量上限的雙向爆粉,必須使用修改微信底層協議的第三方軟件才能實現。今天

微信爆粉的方法天加滿5000好友

ESS 穩定 微博 添加好友 類型 識別 fff 什麽 交流 2018年,朋友圈或各種社交場合總時不時冒出“某某做微信爆粉,一天加滿5000好友”的說法。這確實是存在的,但嚴重違規。突破每日添加好友數量上限的雙向爆粉,必須使用修改微信底層協議的第三方軟件才能實現。今天,無極

對只含0,1,2元素的陣列設計O(n)時間的排序演算法

針對只含0,1,2三種元素的陣列的一種O(n)時間的排序演算法 1. 問題重述 給定一個整型陣列,陣列中的元素只有三種:0,1,2,例如:[1 ,2 ,0 ,0 ,2 ,1 ,2 ,1 ,1 ,0 ,2 ,2 ,1 ,0 ],試設計一個時間複雜度為O(n),空間複雜度為O(1)的演算法,

Excel中快速寫入數據的又方法

fps fas framework 導出到excel object targe star 列名 num 往Excel寫入數據的方法比較多,但實際應用場景及對性能的要求決定了需要對方法有所取舍。一些具體情形和方法可以參見https://blog.csdn.net/u01310

iOS總結-效能優化-UITableView效能優化-定義Cell

隨著APP使用者介面內容越來越豐富,,再強的手機可能都無法同時渲染複雜的UI介面和保證流暢的體驗. 關於UITableView怎麼實現,正常的當然是用UITableview+自定義的UITableviewCell. 本篇的優化策略: 只定義一種cell 提前計算並快取每個Cell的高

AOP實踐--ASP.NET MVC 5使用Filter過濾Action引數防止sql注入讓你程式碼安全簡潔

在開發程式的過程中,稍微不注意就會隱含有sql注入的危險。今天我就來說下,ASP.NET mvc 5使用Filter過濾Action引數防止sql注入,讓你程式碼安全簡潔。不用每下地方對引數的值都進行檢查,看是使用者輸入的內容是否有危險的sql。如果沒個地方都要加有幾個缺

孤傲蒼狼 只為成功找方法,不為失敗找藉口! javaweb學習總結(十九)——資料庫連線池 、應用程式直接獲取資料庫連線的缺點   使用者每次請求都需要向資料庫獲得連結而資料庫建立連線通常需要

一、應用程式直接獲取資料庫連線的缺點   使用者每次請求都需要向資料庫獲得連結,而資料庫建立連線通常需要消耗相對較大的資源,建立時間也較長。假設網站一天10萬訪問量,資料庫伺服器就需要建立10萬次連線,極大的浪費資料庫的資源,並且極易造成資料庫伺服器記憶體溢位、拓機。如下圖所示:    二、使用資料

ASP.NET MVC 學習 --- 第七課(在非正常關閉IE之後自動清除資料庫中的登陸資訊)

使用者Logon之後,我們可以在logoff裡面寫一些方法幫助我們清理資料庫中的一些資料。 但是如果使用者是非正常Logoff,而是直接關閉IE,如何去自動的清理資料庫中的資料吶。這裡是用session_end方法  方法一: 在Web.Config裡面 <sessi

kotlin 新的android平臺一級開發語言

程序 16px 語法 jvm ava lin 使用 ide 擁有 最近看到一則科技新聞, 大致內容是google將kotlin語言作為android應用開發的一級語言, 與java並駕齊驅, 這是一個開發界的大事件大新聞, 連google的親兒子go語言也沒有這

【強連通分量縮點】【拓撲排序】【dp預處理】CDOJ1640 花自飄零水自流相思兩處閑愁。

如果 vector brush algo blog pri cmp 處理 ret 題意: 在n個點m條邊的有向圖上,從1出發的回路最多經過多少個不同的點 可以在一條邊上逆行一次 題解: 在同一個強連通分量中,顯然可以經過當中的每一個點 因此先將強連通分量縮點,點權為強連通分