• Aspose------导出Excel


    代码:

    /// <summary>
    /// 导出Excel
    /// </summary>
    /// <typeparam name="T">泛型类</typeparam>
    /// <param name="list">数据列</param>
    /// <param name="row">插入行索引</param>
    /// <param name="column">插入列索引</param>
    public static void ExportToExcel<T>(List<T> list,int row, int column)
    {
      //模板地址
      var template = Path.Combine(System.AppDomain.CurrentDomain.BaseDirectory, "Temp", "A_Login.xlsx");
    
      Workbook book = new Workbook(template);
      Worksheet sheet = book.Worksheets[0];
      //设置筛选
      sheet.AutoFilter.SetRange(0, 0, 12);
                
      Cells cell = sheet.Cells;
    
      for (var i = 0; i < list.Count; i++)
      {
        cell.InsertRows(row + 1,1);
      }
    
      int rowIndex = 0;
      int colIndex = column;
    
      Type type = typeof(T);
      PropertyInfo []propertyInfo = type.GetProperties();
      foreach (var pi in propertyInfo)
      {
        rowIndex = row;
        foreach (var li in list)
        {
          var value = pi.GetValue(li);
          cell[rowIndex, colIndex].PutValue(value);
          rowIndex++;
        }
        colIndex++;
      }
    
      var path = Path.Combine(System.AppDomain.CurrentDomain.BaseDirectory, "Temp", "成品.xlsx");
      book.Save(path);
    }
    /// <summary>
            /// 导出合并单元格的Excel
            /// </summary>
            /// <typeparam name="T">泛型类</typeparam>
            /// <param name="list">需要合并的数据</param>
            public void ExportToMergeExcel<T>(List<T> list)
            {
                Workbook book = new Workbook();
                Worksheet sheet = book.Worksheets[0];
                Cells cell = sheet.Cells;
                Type type = typeof(T);
    
                int rowIndex = 0;
                int colIndex = 0;
                PropertyInfo[] property = type.GetProperties();
                //合并的第一个单元格数据
                var name = "";
                //是否取出第一个单元格数据
                var isFirst = true;
                //记录需要合并的行数
                var num = 1;
                List<int> mergeIndex = new List<int>();
                List<int> mergeCount = new List<int>();
    
                foreach (var pi in property)
                {
                    rowIndex = 0;
                    cell[rowIndex, colIndex].PutValue(pi.Name);
    
                    foreach (var li in list)
                    {
                        ++rowIndex;
                        var value = pi.GetValue(li);
                        cell[rowIndex, colIndex].PutValue(value);
    
                        if (pi.Name == "Component")
                        {
                            if (isFirst == true)
                            {
                                isFirst = false;
                                continue;
                            }
    
                            var v = value.ToString();
                            if (v == name)
                            {
                                num++;
                                if (rowIndex == list.Count())
                                {
                                    if (num > 1)
                                    {
                                        mergeIndex.Add(rowIndex - num + 1);
                                        mergeCount.Add(num);
                                    }
                                }
                            }
                            else
                            {
                                name = v;
                                mergeIndex.Add(rowIndex - num);
                                mergeCount.Add(num);
                                num = 1;
                            }
                        }
                        if (pi.Name == "SubComponent")
                        {
                            if (value == null)
                            {
                                cell.Merge(rowIndex, 0, 1, 9);
                            }
                        }
                    }
                    colIndex++;
                }
                
                //合并
                for (var i = 0; i < mergeIndex.Count(); i++)
                {
                    var f = mergeIndex[i];
                    var r = mergeCount[i];
                    cell.Merge(f, 0, r, 1);
                }
    
                SetCellsStyle(cell);
    
                //设置筛选行
                sheet.AutoFilter.SetRange(0, 0, 12);
    
                //自动行列宽
                sheet.AutoFitColumns();
                sheet.AutoFitRows();
    
                var path = Path.Combine(System.AppDomain.CurrentDomain.BaseDirectory, "Temp", "成品nck.xlsx");
                book.Save(path);
            }
    
            /// <summary>
            /// 设置整行/整列样式
            /// </summary>
            /// <param name="cells"></param>
            private void SetCellsStyle(Cells cells)
            {
                //设置样式
                Style style1 = new Style();
                //style.Font.Size = 12;
                StyleFlag flag1 = new StyleFlag();
                flag1.VerticalAlignment = true;
                flag1.Font = true;
                cells.ApplyColumnStyle(0, style1, flag1);
                //cell.Columns[0].ApplyStyle(style1, flag1);
    
                Style style2 = new Style();
                style2.Font.Size = 12;
                style2.Pattern = BackgroundType.Solid;
                style2.ForegroundColor = Color.FromArgb(122, 136, 145, 240);
                style2.Font.IsBold = true;
                style2.HorizontalAlignment = TextAlignmentType.Left;
                StyleFlag flag2 = new StyleFlag();
                flag2.Font = true;
                flag2.All = true;
                //flag2.HorizontalAlignment = true;
                cells.ApplyRowStyle(0, style2, flag2);
            }
    
            private void SetCellStyle(Cell cell, int fontSize, bool isBold = false, bool isItalic = false, List<int> argb = null)
            {
                Style style = new Style();
                style.Font.Size = fontSize;
                style.Font.IsBold = isBold;
                style.Font.IsItalic = isItalic;
                style.HorizontalAlignment = TextAlignmentType.Left;
                style.Pattern = BackgroundType.Solid;
                style.ForegroundColor = Color.FromArgb(argb[0], argb[1], argb[2], argb[3]);
                cell.SetStyle(style, true);
            }

    需要合并的条目

    private List<MergeItem> MergeEfficientItem(List<ProjectItem> list)
            {
                PropertyInfo[] propertyInfo = typeof(MergeItem).GetProperties();
                //var data = _ProjectItemRepository.AsQueryable().where(p => p.ProjectCode == projectCode);
                var data = list;
                var level1List = data.Where(p => p.ItemLevel == "Level1").ToList();
                var level2List = data.Where(p => p.ItemLevel == "Level2").ToList();
                var level3List = data.Where(p => p.ItemLevel == "Level3").ToList();
                var datalist = new List<MergeItem>();
    
                //一级条目
                foreach (var li in level1List)
                {
                    var pitem = new MergeItem();
                    pitem.Component = li.Component;
                    datalist.Add(pitem);
    
                    //三级条目
                    var citem = level3List.Where(p => p.Component == li.Component).OrderBy(p => p.Seq);
                    var subitem = new List<MergeItem>();
                    foreach (var cli in citem)
                    {
                        var sitem = new MergeItem();
                        sitem.Component = cli.SubComponent;
                        sitem.SubComponent = cli.Description;
                        sitem.Unit = cli.Unit;
                        sitem.Remark = cli.Remark;
                        sitem.FillInstruct = cli.FillInstruct;
    
                        if (subitem.Any(p => p.Component == cli.SubComponent && p.SubComponent == cli.Description))
                        {
                            sitem = subitem.Where(p => p.Component == cli.SubComponent && p.SubComponent == cli.Description).FirstOrDefault();
                        }
                        else
                        {
                            subitem.Add(sitem);
                        }
    
                        foreach (var pi in propertyInfo)
                        {
                            foreach (var c in citem)
                            {
                                var trim = c.Scenario.Replace(" ", "");
                                if (pi.Name == trim && c.Description == sitem.SubComponent)
                                {
                                    pi.SetValue(sitem, c.UnitCost);
                                }
                            }
                        }
                    }
                    datalist.AddRange(subitem);
                }
                _ExcelUtil.ExportToMergeExcel<MergeItem>(datalist);
                
                return datalist;
            }
  • 相关阅读:
    【php】PHP检测json格式数据
    【php】PHP那些非常有用却鲜有人知的函数
    MySQL DELETE 语句:语法及案例剖析、从命令行中删除数据
    MySQL UPDATE 更新:语法及案例剖析
    MySQL WHERE 子句:语法及案例剖析、从命令提示符中读取数据
    mysql实现主从复制/主从同步
    docker安装mysql方法
    MySQL之账户管理的几种方式
    MySQL 查询数据:语法及案例剖析
    MySQL 插入数据:语法以及案例剖析
  • 原文地址:https://www.cnblogs.com/tianhengblogs/p/7565679.html
Copyright © 2020-2023  润新知