• Epplus导出excel


     public class EpplusExcel
        {
            /// <summary>
            /// 导出Excel
            /// </summary>
            /// <typeparam name="T"></typeparam>
            /// <param name="dataSource"></param>
            /// <param name="strFilePath"></param>
            /// <param name="MappingColumns"></param>
            /// <param name="keepTime">是否保留时分秒</param>
            public static void ToExcel<T>(List<T> dataSource, string strFilePath, List<ExcelColumns> MappingColumns = null,bool keepTime=false)
            {
                if (dataSource!=null&& dataSource.Count>0)
                {
                    DataTable dataTable = ListToDataTable(dataSource, MappingColumns, keepTime);
                    ToExcel(dataTable, strFilePath, MappingColumns);
                }
                else
                {
                    if (!File.Exists(strFilePath))
                    {
                        File.Create(strFilePath);
                    }
                }
                
            }
            public static void ToExcel(DataTable dt, string strFilePath, List<ExcelColumns> MappingColumns = null)
            {
                try
                {
                    if (dt.Rows.Count==0)
                    {
                        if (!File.Exists(strFilePath))
                        {
                            File.Create(strFilePath);
                        }
                        return;
                    }
                    //目录不存在则创建
                   var dicpath= System.IO.Path.GetDirectoryName(strFilePath);
                    if (!Directory.Exists(dicpath))
                    {
                        Directory.CreateDirectory(dicpath);
                    }
    
                    if (File.Exists(strFilePath))
                    {
                        File.Delete(strFilePath);
                    }
                    FileInfo file = new FileInfo(strFilePath);
                    using (ExcelPackage ep = new ExcelPackage(file))
                    {
                        ExcelWorksheet ws = ep.Workbook.Worksheets.Add("Sheet1");
    
                        #region 处理不存在的Mapping中的Name
                        DataColumn[] arr = new DataColumn[dt.Columns.Count];
                        dt.Columns.CopyTo(arr,0) ;
                        if (MappingColumns!=null)
                        {
    
                      
                        foreach (var col in arr)
                        {
                            if (MappingColumns.All(m=>m.field!=col.ColumnName))
                            {
                                dt.Columns.Remove(col.ColumnName);
                            }
                        }
                        }
                        #endregion
    
    
                        ws.Cells["A1"].LoadFromDataTable(dt, true);
                        ws.Cells.Style.Fill.PatternType = ExcelFillStyle.Solid;
                        //单元格背景颜色
                        ws.Cells.Style.Fill.BackgroundColor.SetColor(System.Drawing.Color.White);
                        if (MappingColumns!=null)
                        {
                            for (int i = 0; i < dt.Columns.Count; i++)
                            {
                               var strColName= dt.Columns[i].ColumnName;
                               var map= MappingColumns.FirstOrDefault(m=>m.field== strColName);
                                if (map!=null)
                                {
                                    ws.Cells[1, i+1].Value = map.title;
                                }
    
                                try
                                {
                                    var lenth = ws.Cells[2, i + 1].Value.ToString().Length;
                                    ws.Column(i + 1).Width = lenth > 10 ? lenth + 6 : 10;
                                }
                                catch (Exception)
                                {
    
                                  
                                }
                          
                               ws.Cells[1, i+1].Style.Fill.PatternType = ExcelFillStyle.Solid;
                                ws.Cells[1, i + 1].Style.Border.BorderAround(ExcelBorderStyle.Thin, Color.FromArgb(191, 191, 191));
                                ws.Cells[1, i+1].Style.Fill.BackgroundColor.SetColor(Color.FromArgb(0, 151, 167));//设置单元格背景色
                                ws.Cells[1, i + 1].Style.Font.Color.SetColor(System.Drawing.Color.White);
                            }
                        }
    
                        ws.Row(1).Height = 18;
                        ws.Row(1).Style.Font.Bold = true;
                        ws.Row(1).Style.HorizontalAlignment = ExcelHorizontalAlignment.Center;
                        //设置字体,也可以是中文,比如:宋体
                        ws.Cells.Style.Font.Name = "宋体";
    
                        //字体加粗
                      
    
                        //字体大小
                        ws.Cells.Style.Font.Size = 12;
    
                        //字体颜色
                       // ws.Cells.Style.Font.Color.SetColor(System.Drawing.Color.Black);
    
                        //单元格背景样式,要设置背景颜色必须先设置背景样式
                 
                        //ws.Cells.Style.ShrinkToFit = true;//单元格自动适应大小
                        ws.Cells.Style.Border.Top.Style = ExcelBorderStyle.Thin;
                        ws.Cells.Style.Border.Top.Color.SetColor(System.Drawing.Color.Gray);
                        ws.Cells.Style.Border.Bottom.Style = ExcelBorderStyle.Thin;
                        ws.Cells.Style.Border.Bottom.Color.SetColor(System.Drawing.Color.Gray);
                        ws.Cells.Style.Border.Left.Style = ExcelBorderStyle.Thin;
                        ws.Cells.Style.Border.Left.Color.SetColor(System.Drawing.Color.Gray);
                        ws.Cells.Style.Border.Right.Style = ExcelBorderStyle.Thin;
                        ws.Cells.Style.Border.Right.Color.SetColor(System.Drawing.Color.Gray);
                        //设置单元格所有边框样式和颜色
                        //ws.Cells.Style.Border.BorderAround(ExcelBorderStyle.Thin, System.Drawing.ColorTranslator.FromHtml("#0097DD"));
    
                        ep.Save();
    
                        //for (int j = 0; j < dt.Columns.Count; j++)
                        //{
                        //    string dtcolumntype = dt.Columns[j].DataType.Name.ToLower();
                        //    if (dtcolumntype == "datetime")
                        //    {
                        //        for (int i = 0; i < dt.Rows.Count; i++)
                        //        {
                        //            ws.Cells[i+1, j+1].Style.Numberformat.Format = "yyyy/m/d h:mm";
                        //        }
                        //    }
                        //}
                    }
                }
                catch (Exception ex)
                {
                    throw ex;
                }
            }
    
    
            public static void ToExcel(DataTable dt, string strTemplete, string strExcelFile, int intSheet)
            {
                FileInfo strTemp = new FileInfo(strTemplete);
                FileInfo strNewTemp = new FileInfo(strExcelFile);
                try
                {
                    ExcelPackage package = new ExcelPackage(strTemp);
                    int vSheetCount = package.Workbook.Worksheets.Count; //获取总Sheet页
    
                    ExcelWorksheet worksheet = package.Workbook.Worksheets[intSheet];//选定 指定页
    
                    //int maxColumnNum = ws.Dimension.End.Column;//最大列
                    //int minColumnNum = ws.Dimension.Start.Column;//最小列
    
                    //int maxRowNum = ws.Dimension.End.Row;//最小行
                    //int minRowNum = ws.Dimension.Start.Row;//最大行
    
                    worksheet.Cells["A1"].LoadFromDataTable(dt, true);
    
                    package.SaveAs(strNewTemp);
    
                }
                catch (Exception ex)
                {
                    throw ex;
                }
            }
    
            public static void ToExcel2(DataTable dt1, DataTable dt2, string strTemplete, string strExcelFile)
            {
                FileInfo strTemp = new FileInfo(strTemplete);
                FileInfo strNewTemp = new FileInfo(strExcelFile);
                try
                {
                    ExcelPackage package = new ExcelPackage(strTemp);
                    int vSheetCount = package.Workbook.Worksheets.Count; //获取总Sheet页
    
                    ExcelWorksheet worksheet = package.Workbook.Worksheets["Sheet2"];//选定 表
                    worksheet.Cells["A1"].LoadFromDataTable(dt1, true);
    
                    worksheet = package.Workbook.Worksheets["Sheet3"];//选定 指定页
                    worksheet.Cells["A1"].LoadFromDataTable(dt2, true);
    
                    package.SaveAs(strNewTemp);
    
                }
                catch (Exception ex)
                {
                    throw ex;
                }
            }
    
    
            /// <summary>
            /// 获取Datatable
            /// </summary>
            /// <param name="strFilePath"></param>
            /// <param name="showFirstRow"></param>
            /// <returns></returns>
          public static DataTable GetDataTableFromExcelHasNoHeader(string strFilePath, bool showFirstRow = false)
            {
                try
                {
                    FileInfo file = new FileInfo(strFilePath);
    
                    if (file.Extension.Replace(".","").ToLower()=="xls")
                    {
                        return Wise.Core.Common.Excel.ExcelHelper.GetDataTableFromExcelHasNoHeader(strFilePath, showFirstRow);
                    }
    
                    using (ExcelPackage ep = new ExcelPackage(file))
                    {
                        ExcelWorksheet ws = ep.Workbook.Worksheets.FirstOrDefault();
                        int maxColumnNum = ws.Dimension.End.Column;//最大列
                        int minColumnNum = ws.Dimension.Start.Column;//最小列
    
                        int maxRowNum = ws.Dimension.End.Row;//最小行
                        int minRowNum = ws.Dimension.Start.Row;//最大行
    
                        DataTable vTable = new DataTable();
                        DataColumn vC;
                        for (int j = 1; j <= maxColumnNum; j++)
                        {
                            vC = new DataColumn("F" + j, typeof(string));
                            vTable.Columns.Add(vC);
                        }
                        int startNum = showFirstRow ? 1 : 2;
                        for (int n = startNum; n <= maxRowNum; n++)
                        {
                            DataRow vRow = vTable.NewRow();
                            for (int m = 1; m <= maxColumnNum; m++)
                            {
                                vRow[m - 1] = ws.Cells[n, m].Value;
                            }
                            vTable.Rows.Add(vRow);
                        }
                        return vTable;
                    }
                }
                catch (Exception ex)
                {
                    throw ex;
                }
            }
    
            public static DataTable GetExcel(string strFilePath, string tbName="dt1")
            {
                try
                {
                    FileInfo file = new FileInfo(strFilePath);
                    using (ExcelPackage ep = new ExcelPackage(file))
                    {
                        ExcelWorksheet ws = ep.Workbook.Worksheets.FirstOrDefault();
                        int maxColumnNum = ws.Dimension.End.Column;//最大列
                        int minColumnNum = ws.Dimension.Start.Column;//最小列
    
                        int maxRowNum = ws.Dimension.End.Row;//最小行
                        int minRowNum = ws.Dimension.Start.Row;//最大行
    
                        DataTable vTable = new DataTable();
                        DataColumn vC;
                        for (int j = 1; j <= maxColumnNum; j++)
                        {
                            vC = new DataColumn("A_" + j, typeof(string));
                            vTable.Columns.Add(vC);
                        }
    
                        for (int n = 2; n <= maxRowNum; n++)
                        {
                            DataRow vRow = vTable.NewRow();
                            for (int m = 1; m <= maxColumnNum; m++)
                            {
                                vRow[m - 1] = ws.Cells[n, m].Value;
                            }
                            vTable.Rows.Add(vRow);
                        }
                        return vTable;
                    }
                }
                catch (Exception ex)
                {
                    throw ex;
                }
            }
    
            public static DataTable GetExcel(string strFilePath, int tbIndex)
            {
                try
                {
                    FileInfo file = new FileInfo(strFilePath);
                    using (ExcelPackage ep = new ExcelPackage(file))
                    {
                        ExcelWorksheet ws = ep.Workbook.Worksheets[tbIndex];
                        int maxColumnNum = ws.Dimension.End.Column;//最大列
                        int minColumnNum = ws.Dimension.Start.Column;//最小列
    
                        int maxRowNum = ws.Dimension.End.Row;//最小行
                        int minRowNum = ws.Dimension.Start.Row;//最大行
    
                        DataTable vTable = new DataTable();
                        DataColumn vC;
                        for (int j = 1; j <= maxColumnNum; j++)
                        {
                            vC = new DataColumn("A_" + j, typeof(string));
                            vTable.Columns.Add(vC);
                        }
    
                        for (int n = 2; n <= maxRowNum; n++)
                        {
                            DataRow vRow = vTable.NewRow();
                            for (int m = 1; m <= maxColumnNum; m++)
                            {
                                vRow[m - 1] = ws.Cells[n, m].Value;
                            }
                            vTable.Rows.Add(vRow);
                        }
                        return vTable;
                    }
                }
                catch (Exception ex)
                {
                    throw ex;
                }
            }
    
    
            /// <summary>
            /// 类型转换
            /// </summary>
            /// <typeparam name="T"></typeparam>
            /// <param name="entitys"></param>
            /// <returns></returns>
            public static DataTable ListToDataTable<T>(List<T> entitys, List<ExcelColumns> MappingColumns = null,bool keepTime=false)
            {
                //检查实体集合不能为空
                if (entitys == null || entitys.Count < 1)
                {
                    throw new Exception("The list is empty");
                }
                //取出第一个实体的所有Propertie
                Type entityType = entitys[0].GetType();
                 var entityProperties = entityType.GetProperties().Where(m => (!m.GetAccessors()[0].IsVirtual) && (!(m.PropertyType.Name.ToLower() != "string" && m.PropertyType.IsClass))).ToList();
    
                DataTable dt = new DataTable();
                if (MappingColumns!=null)
                {
                    foreach (var item in MappingColumns)
                    {
                        var prop = entityProperties.FirstOrDefault(m => m.Name == item.field);
                        if (prop!=null)
                        {
                            var tp = prop.PropertyType;
                            if (tp.IsGenericType &&
                               //判断是否为nullable泛型类
                               tp.GetGenericTypeDefinition().Equals(typeof(Nullable<>)))
                            {
                                //如果tp为nullable类,声明一个NullableConverter类,该类提供从Nullable类到基础基元类型的转换
    
                                if (tp.Name.ToLower() == "datetime" || (tp.GenericTypeArguments != null && tp.GenericTypeArguments.Length > 0 && tp.GenericTypeArguments[0].Name.ToLower() == "datetime"))
                                {
                                    dt.Columns.Add(prop.Name,  typeof(string));
                                }
                                else
                                {
                                    dt.Columns.Add(prop.Name,tp.GenericTypeArguments[0]);
                                }
                            }
                            else
                            {
                                if (tp.Name.ToLower()== "datetime")
                                {
                                    dt.Columns.Add(prop.Name, typeof(string));
                                }
                                else
                                {
                                    dt.Columns.Add(prop.Name, tp);
                                }
                              
                            }
    
                                   
    
                        }
                    }
                    
                    //将所有entity添加到DataTable中
                    foreach (object entity in entitys)
                    {
                        //检查所有的的实体都为同一类型
    
                        object[] entityValues = new object[MappingColumns.Count];
                        var i = 0;
                        DateTime dateTime = DateTime.Now;
                        foreach (var item in MappingColumns)
                        {
                            var prop = entityProperties.FirstOrDefault(m => m.Name == item.field);
                            if (prop != null)
                            {
                                var objval = prop.GetValue(entity, null);
    
                                var tp = prop.PropertyType;
                                if (tp.IsGenericType &&
                                   //判断是否为nullable泛型类
                                   tp.GetGenericTypeDefinition().Equals(typeof(Nullable<>)))
                                {
                                    //如果tp为nullable类,声明一个NullableConverter类,该类提供从Nullable类到基础基元类型的转换
    
                                    if (tp.Name.ToLower() == "datetime" || (tp.GenericTypeArguments != null && tp.GenericTypeArguments.Length > 0 && tp.GenericTypeArguments[0].Name.ToLower() == "datetime"))
                                    {
                                        if (objval!=null&&DateTime.TryParse(objval.ToString(), out dateTime))
                                        {
                                            if (keepTime)
                                            {
                                                entityValues[i++] = dateTime.ToString("yyyy-MM-dd HH:mm:ss");
                                            }
                                            else
                                            {
                                                entityValues[i++] = dateTime.ToString("yyyy-MM-dd");
                                            }
                                           
                                        }
                                    }
                                    else
                                    {
                                        NullableConverter nullableConverter = new NullableConverter(tp);
                                        if (objval!=null)
                                        {
                                            entityValues[i++] =  nullableConverter.ConvertFromString(objval.ToString());
                                        }
                                        else
                                        {
                                            entityValues[i++] = null;
                                        }
                                       
                                    }
                                }
                                else
                                {
                                    if (tp.Name.ToLower() == "datetime")
                                    {
                                        if (objval != null && DateTime.TryParse(objval.ToString(), out dateTime))
                                        {
                                            if (keepTime)
                                            {
                                                entityValues[i++] = dateTime.ToString("yyyy-MM-dd HH:mm:ss");
                                            }
                                            else
                                            {
                                                entityValues[i++] = dateTime.ToString("yyyy-MM-dd");
                                            }
                                           
                                        }
                                        else
                                        {
                                            entityValues[i++] = "";
                                        }
                                       
                                    }
                                    else
                                    {
                                        entityValues[i++] = objval;
                                    }
                                  
                                }
    
                              
                            }
                        }
                        dt.Rows.Add(entityValues);
                    }
                }
                else
                {
                    for (int i = 0; i < entityProperties.Count; i++)
                    {
                        dt.Columns.Add(entityProperties[i].Name, entityProperties[i].PropertyType);
                    }
                    //将所有entity添加到DataTable中
                    foreach (object entity in entitys)
                    {
                        //检查所有的的实体都为同一类型
    
                        object[] entityValues = new object[entityProperties.Count];
                        for (int i = 0; i < entityProperties.Count; i++)
                        {
                            entityValues[i] = entityProperties[i].GetValue(entity, null);
                        }
                        dt.Rows.Add(entityValues);
                    }
                }
               
                return dt;
            }
    
    
        }
  • 相关阅读:
    「USACO 2020 US Open Platinum」Exercise
    Equilateral Triangles
    [USACO 2020 February Platinum]Help Yourself
    「ICPC World Finals 2019」美丽的桥梁
    「ICPC World Finals 2019 何以伊名始
    COCI20162017 Contest#6 F
    COCI2016/2017 Contest#3 F Meksikanac
    TopCoder SRM 570 Div1 CurvyonRails
    COCI2016-2017 Contest#2 F
    UOJ Round Good Bye JiHai D. 新年的追逐战
  • 原文地址:https://www.cnblogs.com/nayilvyangguang/p/14121413.html
Copyright © 2020-2023  润新知