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

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

Excel導入導出幫助類

2019-11-14 14:19:44
字體:
來源:轉載
供稿:網友

   /// <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
久久夜色撩人精品| 久久精品亚洲精品| 日韩亚洲欧美中文高清在线| 国产精品人人做人人爽| 国产91对白在线播放| 亚洲精选一区二区| 日韩av影视在线| 国产一级揄自揄精品视频| 一区二区三区久久精品| 国产做受高潮69| 国产精品久久久一区| 最近2019中文字幕大全第二页| 日韩福利视频在线观看| 亚洲国产精品电影| 精品国偷自产在线视频| 国产亚洲精品日韩| 久久久久久久999精品视频| 久久777国产线看观看精品| 夜色77av精品影院| 精品无码久久久久久国产| 国产一区二区美女视频| 亚洲淫片在线视频| 国产精品老女人精品视频| 国产精品777| 亚洲国产私拍精品国模在线观看| 国产精品亚洲网站| 欧美伊久线香蕉线新在线| 日韩av手机在线| 国产精品午夜一区二区欲梦| 国产精品美女www爽爽爽视频| 永久555www成人免费| 久久艳片www.17c.com| 成人免费午夜电影| 久热精品视频在线观看一区| 91精品国产91久久| 日韩精品在线观看一区| 疯狂做受xxxx高潮欧美日本| 两个人的视频www国产精品| 久久久久久久久久国产精品| 亚洲精品美女视频| 亚洲一区二区三区四区在线播放| 国模精品一区二区三区色天香| 永久免费毛片在线播放不卡| 亚洲视屏在线播放| 亚洲精品美女网站| 国产欧美日韩综合精品| 日韩av在线影院| 欧美激情aaaa| 北条麻妃在线一区二区| 久久久成人精品视频| 欲色天天网综合久久| 在线成人激情黄色| 最新国产精品亚洲| 78色国产精品| 欧美激情综合色| 国产午夜一区二区| 欧美黑人一级爽快片淫片高清| 色偷偷av一区二区三区乱| 久精品免费视频| 午夜精品三级视频福利| 国产视频精品一区二区三区| 久久精品中文字幕| 国产精品伦子伦免费视频| 黄色成人在线免费| 综合国产在线视频| 欧美丝袜美女中出在线| 欧美在线www| 日本一区二区三区四区视频| 日本久久久久久久久久久| 欧美激情视频一区二区| 国产91在线播放九色快色| 黑人欧美xxxx| 国产一区二区三区在线观看网站| 最新亚洲国产精品| 成人国产亚洲精品a区天堂华泰| 久久国产精品久久久| 亚洲电影av在线| 久久久国产91| 川上优av一区二区线观看| 1769国产精品| 国产精品日韩在线播放| 成人a在线视频| 亚洲无线码在线一区观看| 日韩久久精品成人| 国产成一区二区| 美女视频黄免费的亚洲男人天堂| 亚洲视频999| 久久久午夜视频| 久久国产精品久久国产精品| 亚洲人成在线观看网站高清| 日本高清视频精品| 亚洲欧洲黄色网| 亚洲在线观看视频网站| 性夜试看影院91社区| 97久久超碰福利国产精品…| 亚洲丝袜在线视频| 一区二区三区四区在线观看视频| 欧美另类交人妖| 最近中文字幕mv在线一区二区三区四区| 51视频国产精品一区二区| 欧美理论电影网| 成人免费观看a| 亚洲欧美另类人妖| 国产精彩精品视频| 在线播放日韩专区| 成人福利视频在线观看| 亚洲视频自拍偷拍| 亚洲999一在线观看www| 久久69精品久久久久久国产越南| 日韩精品有码在线观看| 91在线国产电影| 久久综合久久88| 亚洲第一网中文字幕| 欧美精品一区在线播放| 欧美剧在线观看| 国精产品一区一区三区有限在线| 亚洲精品日产aⅴ| 欧美性xxxxx极品娇小| 成人黄色免费在线观看| 欧美综合激情网| 成人免费高清完整版在线观看| 亚洲精品一区中文字幕乱码| 国产精品久久久久999| 久久久人成影片一区二区三区观看| 欧美激情一二区| 性色av一区二区三区免费| 久久久久久久国产精品视频| 欧美极品美女视频网站在线观看免费| 日韩激情av在线免费观看| 久久久久久伊人| 久久亚洲综合国产精品99麻豆精品福利| 国产91精品高潮白浆喷水| 亚洲男人天堂2023| 国产一区二区免费| 97欧美精品一区二区三区| 在线观看欧美成人| 欧美有码在线观看视频| 理论片在线不卡免费观看| 性日韩欧美在线视频| 久久91精品国产91久久跳| 精品久久久久久中文字幕| 中文字幕亚洲激情| 欧美电影在线观看网站| 亚洲欧美日韩第一区| 精品国产美女在线| 精品日韩视频在线观看| 国模私拍一区二区三区| 国产精品99久久99久久久二8| 亚洲欧美www| 亚洲精品美女免费| 亚洲国产天堂久久综合| 91精品国产综合久久久久久蜜臀| 精品久久中文字幕| 亚洲国产精品va在线看黑人动漫| 国产日韩中文字幕| 色综合久久久久久中文网| 国产日韩欧美自拍| 亚洲综合小说区| 色小说视频一区| xxav国产精品美女主播| 国产精品偷伦免费视频观看的| 国产一区二区三区三区在线观看| 国产精品福利无圣光在线一区| 日韩高清电影好看的电视剧电影|