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

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

Excel導入導出幫助類

2019-11-14 14:29:48
字體:
來源:轉載
供稿:網友

   /// <summary>
    /// Excel導入導出幫助類
    /// 記得引入 NPOI
    /// 下載地址   http://npoi.codeplex.com/releases/
    /// </summary>

public class ExcelHelper
    {
        #region 導出Excel

        /// <summary>
        /// 導出Excel  注:model 字段必須加[DisplayName("XXX")]不要導出的標為[DisplayName("null")],并且不要導出的字段放在最后,要導出的放前面
        /// </summary>
        /// <param name="p_List">數據集合</param>
        /// <param name="p_Title">Excel路徑</param>
        /// <param name="ColumnsCount">總列數</param>
        public void ToExcel<T>(List<T> p_List, string p_Title, int ColumnsCount)
        {
            if (p_List == null || p_List.Count <= 0 || ColumnsCount <= 0)
            {
                return;
            }
            PRopertyDescriptorCollection properties = TypeDescriptor.GetProperties(typeof(T));

            if (properties.Count <= 0)
            {
                return;
            }

            StringBuilder ExcelInfo = new StringBuilder();
            string sign = string.Empty;
            string DisplayName = string.Empty;
            //寫表頭
            for (int i = 0; i < ColumnsCount; i++)
            {
                DisplayName = properties[i].DisplayName;
                if (!string.IsNullOrEmpty(DisplayName) && DisplayName != "null" && DisplayName != "Id")
                {
                    sign = i == ColumnsCount - 1 ? "/n" : "/t";
                    ExcelInfo.AppendFormat("{0}{1}", DisplayName, sign);
                }
            }

            //寫表內容
            for (int i = 0; i < p_List.Count; i++)
            {
                for (int j = 0; j < ColumnsCount; j++)
                {
                    DisplayName = properties[j].DisplayName;
                    if (!string.IsNullOrEmpty(DisplayName) && DisplayName != "null" && DisplayName != "Id")
                    {
                        sign = j == ColumnsCount - 1 ? "/n" : "/t";
                        object obj = properties[j].GetValue(p_List[i]);
                        obj = obj == null ? string.Empty : obj.ToString();
                        ExcelInfo.AppendFormat("{0}{1}", obj, sign);
                    }
                }
            }

            HttpResponse p_Response = HttpContext.Current.Response;
            p_Response.Clear();
            p_Response.ClearContent();
            p_Response.Buffer = true;

            //設置Http的頭信息,編碼格式
            p_Response.AppendHeader("Content-Disposition", "attachment;filename=" + p_Title + ".xls");
            p_Response.ContentType = "application/ms-excel";

            //設置編碼
            p_Response.Charset = "gb2312";
            p_Response.ContentEncoding = System.Text.Encoding.GetEncoding("gb2312");
            p_Response.Write(ExcelInfo);
            p_Response.Flush();
            p_Response.Close();
            p_Response.End();
        }

        #endregion


        #region 導入Excel數據

        /// <summary>
        /// OleDB連接Excel文件 --> DataSet
        /// </summary>
        /// <param name="xlsFilePath">.xls文件路徑</param>
        /// <returns></returns>
        public static DataSet XlsToDataSet(string xlsFilePath)
        {
            OleDbConnection oleDBConn = new OleDbConnection();
            OleDbDataAdapter oleAdMaster = new OleDbDataAdapter();
            DataSet ds = new DataSet();

            try
            {
                FileInfo file = new FileInfo(xlsFilePath);
                if (!file.Exists)
                {
                    throw new Exception("文件不存在。");
                }

                string extension = file.Extension.ToLower();
                StringBuilder oleDBConnStr = new StringBuilder();
                switch (extension)
                {
                    case ".xls":
                        oleDBConnStr.AppendFormat("Provider=Microsoft.Jet.Oledb.4.0;Data Source={0};Extended Properties='Excel 8.0;HDR=NO;IMEX=1';", xlsFilePath);//此連接只能操作Excel2007之前(.xls)文件
                        //備注: "HDR=yes;"是說Excel文件的第一行是列名而不是數據,"HDR=No;"正好與前面的相反。
                        //      "IMEX=1 "如果列中的數據類型不一致,使用"IMEX=1"可必免數據類型沖突。
                        break;
                    case ".xlsx":
                        oleDBConnStr.AppendFormat("Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Extended Properties='Excel 12.0;HDR=Yes;IMEX=1';", xlsFilePath);
                        break;
                    default:
                        oleDBConnStr.AppendFormat("Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};Extended Properties=Excel 8.0;HDR=YES;IMEX=1;", xlsFilePath);
                        break;
                }

                oleDBConn = new OleDbConnection(oleDBConnStr.ToString());
                oleDBConn.Open();

                DataTable tableStructure = oleDBConn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);

                if (tableStructure != null && tableStructure.Rows.Count > 0)
                {
                    tableStructure.TableName = tableStructure.Rows[0]["TABLE_NAME"].ToString();
                    StringBuilder sqlStr = new StringBuilder();
                    sqlStr.AppendFormat("select * from [{0}]", tableStructure.TableName);

                    oleAdMaster = new OleDbDataAdapter(sqlStr.ToString(), oleDBConn);
                    oleAdMaster.Fill(ds, "m_tableName");

                    if (ds.Tables["m_tableName"].Rows.Count <= 0)
                    {
                        throw new Exception("excel文件中沒有有客戶數據,請錄入數據。");
                    }
                }
                else
                {
                    throw new Exception("未能找到該上傳的excel文件。");
                }
            }
            finally
            {
                oleAdMaster.Dispose();
                oleDBConn.Close();
                oleDBConn.Dispose();
            }

            return ds;
        }

        #endregion

        #region NPOI 導出Excel

        private const Int32 MaxRowPerSheet = 65535;
        private Int32 rowPerSheet = 1000;
        public Int32 RowPerSheet
        {
            get { return rowPerSheet; }
            set
            {
                if (value < 0 || value > MaxRowPerSheet)
                {
                    throw new ArgumentOutOfRangeException("RowPerSheet");
                }
                else
                {
                    rowPerSheet = value;
                }
            }
        }


        HSSFWorkbook hssfworkbook;

        public void Export<T>(IList<T> records)
        {
            if (records.Count == 0)
                throw new ArgumentNullException("無導出數據。");

            PropertyDescriptorCollection properties = TypeDescriptor.GetProperties(typeof(T));
            int ColumnsCount = properties.Count;
            PropertyInfo[] props = new PropertyInfo[ColumnsCount];
            string DisplayName = string.Empty;
            for (int i = 0; i < ColumnsCount; i++)
            {
                DisplayName = properties[i].DisplayName;
                if (!string.IsNullOrEmpty(DisplayName) && DisplayName != "null" && DisplayName != "Id")
                {
                    props[i] = typeof(T).GetProperty(properties[i].Name); //注意屬性數組仍然可以有元素為null
                }
            }

            ISheet sheet = null;
            IRow row = null;

            for (int r = 0; r < records.Count; r++)
            {
                if ((r % RowPerSheet) == 0)
                {
                    Int32 sheetIndex = (Int32)((Double)r / RowPerSheet) + 1;
                    sheet = hssfworkbook.CreateSheet("Sheet" + sheetIndex);
                    row = sheet.CreateRow(0);
                    for (int i = 0; i < ColumnsCount; i++)
                    {
                        DisplayName = properties[i].DisplayName;
                        if (!string.IsNullOrEmpty(DisplayName) && DisplayName != "null" && DisplayName != "Id")
                        {
                            row.CreateCell(i).SetCellValue(properties[i].DisplayName);
                        }
                    }
                    Console.WriteLine();
                }

                //注意CreateRow(Int32 rownum)中參數rownum雖然從第0行開始,但因為表頭存在,每次得往下一行
                row = sheet.CreateRow(r % RowPerSheet + 1);
                for (int i = 0; i < props.Length; i++)
                {
                    if (props[i] != null) //注意null檢查
                    {
                        Object value = props[i].GetValue(records[r], null);
                        if (value != null)
                        {
                            row.CreateCell(i).SetCellValue(value.ToString());
                        }
                    }
                }
            }

            for (Int32 i = 0; i < hssfworkbook.NumberOfSheets; i++)
            {
                sheet = hssfworkbook.GetSheetAt(i);
                for (Int32 h = 0; h < ColumnsCount; h++)
                {
                    sheet.AutoSizeColumn(h); //每列寬度自適應
                }
            }
        }

        /// <summary>
        /// 導出Excel
        /// </summary>
        /// <typeparam name="T">泛型</typeparam>
        /// <param name="records">數據</param>
        /// <param name="filename">Excel名稱</param>
        public void SaveToExcel<T>(IList<T> records, string fileName)
        {
            RowPerSheet = 100;

            string userAgent = HttpContext.Current.Request.ServerVariables["http_user_agent"].ToLower();
            if (userAgent.IndexOf("Firefox") == -1)//判斷是否是火狐瀏覽器
                fileName = HttpUtility.UrlEncode(fileName, System.Text.Encoding.UTF8);

            HttpResponse p_Response = HttpContext.Current.Response;
            p_Response.ContentType = "application/vnd.ms-excel";
            p_Response.AddHeader("Content-Disposition", string.Format("attachment;filename={0}", fileName));
            p_Response.Clear();

            InitializeWorkbook();
            Export<T>(records);
            GetExcelStream().WriteTo(p_Response.OutputStream);
            p_Response.End();
        }

        MemoryStream GetExcelStream()
        {
            //Write the stream data of workbook to the root directory
            MemoryStream file = new MemoryStream();
            hssfworkbook.Write(file);
            return file;
        }

        void InitializeWorkbook()
        {
            hssfworkbook = new HSSFWorkbook();

            ////create a entry of DocumentSummaryInformation
            DocumentSummaryInformation dsi = PropertySetFactory.CreateDocumentSummaryInformation();
            // dsi.Company = "NPOI Team";
            hssfworkbook.DocumentSummaryInformation = dsi;

            ////create a entry of SummaryInformation
            SummaryInformation si = PropertySetFactory.CreateSummaryInformation();
            //  si.Subject = "NPOI SDK Example";
            hssfworkbook.SummaryInformation = si;
        }

        #endregion

        #region NPOI 導入Excel

        /// <summary>
        /// Excel轉換DataTable
        /// </summary>
        /// <param name="FilePath">文件的絕對路徑</param>
        /// <returns>DataTable</returns>
        public static DataTable ExcelInput(string FilePath)
        {
            DataTable dt = new DataTable();

            HSSFWorkbook hssfworkbook;
            using (FileStream file = new FileStream(FilePath, FileMode.Open, Fileaccess.Read))
            {
                hssfworkbook = new HSSFWorkbook(file);
            }
            ISheet sheet = hssfworkbook.GetSheetAt(0);
            System.Collections.IEnumerator rows = sheet.GetRowEnumerator();

            IRow headerRow = sheet.GetRow(0);
            int cellCount = headerRow.LastCellNum;

            for (int j = 0; j < cellCount; j++)
            {
                ICell cell = headerRow.GetCell(j);
                dt.Columns.Add(cell.ToString());
            }

            for (int i = (sheet.FirstRowNum + 1); i <= sheet.LastRowNum; i++)
            {
                IRow row = sheet.GetRow(i);
                DataRow dataRow = dt.NewRow();

                for (int j = row.FirstCellNum; j < cellCount; j++)
                {
                    if (row.GetCell(j) != null)
                        dataRow[j] = row.GetCell(j).ToString();
                }

                dt.Rows.Add(dataRow);
            }
            return dt;
        }

        #endregion
    }


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美夫妻性生活xx| 成人性生交大片免费观看嘿嘿视频| 国产一区二区三区在线播放免费观看| 亚洲色图狂野欧美| 精品一区二区三区四区| 国产精品爽爽爽爽爽爽在线观看| 久久精品亚洲一区| 欧美乱大交xxxxx另类电影| 国产精品黄色影片导航在线观看| 国产精品美女久久久久av超清| 成人妇女免费播放久久久| 国产69久久精品成人| 亚洲情综合五月天| 国产成人综合亚洲| 国产精品www| 国产成人极品视频| 大伊人狠狠躁夜夜躁av一区| 91av在线国产| 久久伊人色综合| 国产精品极品尤物在线观看| 九九热精品视频国产| 亚洲人成网站999久久久综合| 欧洲永久精品大片ww免费漫画| 久久免费成人精品视频| 性欧美长视频免费观看不卡| 亚洲精品一区二三区不卡| 国产精品偷伦免费视频观看的| 中文字幕国产日韩| 精品福利免费观看| 2019中文字幕全在线观看| 亚洲香蕉av在线一区二区三区| 日韩中文字幕欧美| 国产视频久久久久| 色狠狠av一区二区三区香蕉蜜桃| 久久这里有精品视频| 国产精品久久久久久一区二区| 韩国国内大量揄拍精品视频| 亚洲毛片在线看| 国产人妖伪娘一区91| 欧美激情精品久久久久久大尺度| 国精产品一区一区三区有限在线| 亚洲精品日韩欧美| 国产精品18久久久久久首页狼| 亚洲第一页自拍| 精品国产成人在线| 国产精品免费观看在线| 97在线视频免费| 欧美贵妇videos办公室| 蜜月aⅴ免费一区二区三区| 国产有码一区二区| 国产精品一区二区久久| 伊人久久大香线蕉av一区二区| 久久香蕉精品香蕉| 久久成人国产精品| 色综合伊人色综合网| 亚洲一品av免费观看| 国产精品亚洲美女av网站| 久久久久这里只有精品| 成人啪啪免费看| 欧美韩国理论所午夜片917电影| 国产精品video| 亚洲国产精彩中文乱码av在线播放| 97在线视频观看| 欧美亚洲激情在线| 91在线免费观看网站| 欧美xxxx做受欧美.88| 宅男66日本亚洲欧美视频| 欧美日本高清一区| 国产精品扒开腿做爽爽爽的视频| 国产精品中文字幕在线观看| 亚洲人成自拍网站| 久久亚洲精品毛片| 黄色成人在线播放| 91高潮精品免费porn| 在线日韩欧美视频| 美女av一区二区三区| 国产精品欧美激情| 4k岛国日韩精品**专区| 黄色精品在线看| 成人精品aaaa网站| 韩日精品中文字幕| 欧美电影免费观看| 国产日韩欧美在线视频观看| 97免费视频在线| 久久久视频免费观看| 91免费观看网站| 91九色国产社区在线观看| 97精品在线观看| 91亚洲精品久久久久久久久久久久| 精品少妇v888av| 青青草99啪国产免费| 成人精品视频在线| 国产一区二区免费| 精品国产区一区二区三区在线观看| 51ⅴ精品国产91久久久久久| 岛国精品视频在线播放| 亚洲视频在线观看免费| 91美女片黄在线观看游戏| 国产免费一区二区三区在线能观看| 精品成人乱色一区二区| 欧美性猛交xxxx富婆弯腰| 成人福利免费观看| 怡红院精品视频| 精品毛片网大全| 日韩亚洲成人av在线| 57pao成人国产永久免费| 成人av电影天堂| 国产欧美日韩免费看aⅴ视频| 久久综合电影一区| 亚洲一二在线观看| 欧美国产日韩一区二区三区| 国产午夜精品全部视频播放| 亚洲第一天堂无码专区| 国产mv久久久| 日本aⅴ大伊香蕉精品视频| 91精品久久久久久久久青青| 亚洲国产精品电影| 精品视频www| 国产欧美一区二区三区在线| 日韩在线免费视频观看| 国产精品欧美激情在线播放| 久久综合久久八八| 日韩av色在线| 2019中文字幕全在线观看| 国产精品电影网站| 欧美激情va永久在线播放| 亚洲成年人影院在线| 精品中文字幕视频| 亚洲一区999| 91免费精品视频| 青青久久av北条麻妃海外网| 国产福利精品av综合导导航| 中文字幕v亚洲ⅴv天堂| 国产欧美精品在线播放| 91精品在线观看视频| 亚洲成人精品av| 国产婷婷成人久久av免费高清| 97国产精品人人爽人人做| 久久精品国产2020观看福利| 91精品久久久久久久久不口人| 欧美日韩aaaa| 欧美高清视频在线播放| 欧美中文字幕在线视频| 久久久久久久久久久亚洲| 中文字幕日韩欧美| 色综合91久久精品中文字幕| 国产香蕉97碰碰久久人人| 亚洲电影成人av99爱色| 国产一区二区丝袜高跟鞋图片| 欧美高清视频在线| 成人有码视频在线播放| 亚洲欧美激情四射在线日| 久久男人资源视频| 久久99久久99精品免观看粉嫩| 国产一区二区丝袜| 亚洲国产精品久久| 成人综合网网址| 国产日韩欧美日韩大片| 色偷偷噜噜噜亚洲男人的天堂| 国产午夜精品美女视频明星a级| 在线性视频日韩欧美| 国产精品丝袜高跟| 国产亚洲欧美aaaa| 国产精品人人做人人爽|