• NPOI的操作


      public async Task<MemoryStream> ExportExcel(IList<fuquestionbank> _list, string pId, string pfid, string fugid)
            {
                #region 绘制表头
                string[] arr = { "序号", "姓名", "性别", "年龄", "联系电话", "随访医生", "最近一次随访", "计划次数", "共随访次数", "病历数", "咨询数", "下次随访时间", "状态" };
                HSSFWorkbook book = new NPOI.HSSF.UserModel.HSSFWorkbook();
                //添加一个sheet1  
                ISheet sheet1 = book.CreateSheet("Sheet1");
                CellRangeAddress m_region = new CellRangeAddress(0, 1, 0, arr.Length - 1);  //合并0列的n--n+2行
                sheet1.AddMergedRegion(m_region);
                IRow row = sheet1.CreateRow(0);
                ICell cell = row.CreateCell(0);
                ICellStyle cellstyle = book.CreateCellStyle();//设置垂直居中格式
                cellstyle.VerticalAlignment = VerticalAlignment.CENTER;//垂直居中
                cellstyle.Alignment = HorizontalAlignment.CENTER;//水平居中
    
                cell.CellStyle = cellstyle;
                cell.SetCellValue("基本信息");
                IRow row2 = sheet1.CreateRow(2);
                for (int i = 0; i < arr.Length; i++)
                {
                    row2.CreateCell(i).SetCellValue(arr[i]);
                }
    
                var title = _list.GroupBy(x => x.FllowPlan_Name);
                List<string> planName = new List<string>();//随访计划名称
                List<string> fllowName = new List<string>();//问卷名称
                Dictionary<string, string> timu = new Dictionary<string, string>();//当前问卷下的问卷题目
                List<string> timuList = new List<string>();
                Dictionary<string, int> timuResult = new Dictionary<string, int>();//当前问卷下的题目的个数
                //获取随访计划和问卷信息
                foreach (var item in title)
                {
                    planName.Add(item.Key.ToString());
                    foreach (var name in item)
                    {
                        if (!fllowName.Contains(name.FollowInfo_Name))
                        {
                            fllowName.Add(name.FollowInfo_Name);
                        }
                        if (!timu.ContainsKey(name.Question_Name))
                        {
                            timu.Add(name.Question_Name, name.FollowInfo_Name);
                        }
                    }
                }
                //获取当前问卷下的题目的个数
                var tGroup = timu.GroupBy(x => x.Value);
                foreach (var item in tGroup)
                {
                    foreach (var count in item)
                    {
                        if (!timuResult.ContainsKey(count.Value))
                        {
                            timuResult.Add(count.Value, item.Count());
                        }
                    }
                }
                //获取题目集合
                foreach (KeyValuePair<string, string> item in timu)
                {
                    timuList.Add(item.Key);
                }
                //绘制随访计划表头
                //IRow row3 = sheet1.CreateRow(0);
    
                int rowOne = arr.Length;
                for (int i = 0; i < planName.Count; i++)
                {
                    sheet1.AddMergedRegion(new CellRangeAddress(0, 0, rowOne, rowOne + timu.Count - 2));
                    ICell cellPlan = row.CreateCell(rowOne);
                    cellPlan.CellStyle = cellstyle;
                    cellPlan.SetCellValue(planName[i]);
                    // row.CreateCell(rowOne).SetCellValue(planName[i]);
                    rowOne += timu.Count;
                }
                //绘制随访问卷表头
                IRow row4 = sheet1.CreateRow(1);
                int rowTwo = arr.Length;
                int index = 0;
                for (int i = 0; i < planName.Count * fllowName.Count; i++)
                {
    
                    //获取当前问卷下的题目个数
                    int r = timuResult[fllowName[index]];
                    sheet1.AddMergedRegion(new CellRangeAddress(1, 1, rowTwo, rowTwo + r - 1));
                    ICell cellFllow = row4.CreateCell(rowTwo);
                    cellFllow.CellStyle = cellstyle;
                    cellFllow.SetCellValue(fllowName[index]);
                    //row4.CreateCell(rowTwo).SetCellValue(fllowName[index]);
                    rowTwo += r;
                    index += 1;
                    if (index > fllowName.Count - 1)
                    {
                        index = 0;
                    }
                }
                //绘制问卷题目表头
                //IRow row5 = sheet1.CreateRow(2);
                int index1 = 0;
                for (int i = arr.Length; i < (timuList.Count * planName.Count) + arr.Length; i++)
                {
                    ICell cellTimu = row2.CreateCell(i);
                    cellTimu.CellStyle = cellstyle;
                    cellTimu.SetCellValue(timuList[index1].ToString());
    
                    //  row2.CreateCell(i).SetCellValue(timuList[index1].ToString());
                    index1 += 1;
                    if (index1 >= timuList.Count - 1)
                    {
                        index1 = 0;
                    }
                }
     
                }               
                // 写入到客户端   
                System.IO.MemoryStream ms = new System.IO.MemoryStream();
                book.Write(ms);
                ms.Seek(0, SeekOrigin.Begin);
                return ms;
            }
                //表头数据
                var tablleTitle = await patientBLL.getFllowInfoList(fugid);
                IList<fuquestionbank> tableTil = tablleTitle.OrderBy(x => x.FllowPlan_id).ThenBy(x => x.FollowInfo_Name).ToList();
                //导出
                excelBll excelBll = new BLL.excelBll();
                MemoryStream ms = await excelBll.ExportExcel(tableTil, pId, pfid, fugid);
                string SavaName = DateTime.Now.ToString("yyyyMMddhhmmss");
                return File(ms, "application/vnd.ms-excel", "患者管理" + SavaName + ".xls");
    //list集合转datatable
       public DataTable IListOut(IList<excelModel> _list)
            {
                DataTable dtReturn = new DataTable();
                PropertyInfo[] oProps = null;
                foreach (excelModel rec in _list)
                {
                    if (oProps == null)
                    {
                        oProps = ((Type)rec.GetType()).GetProperties();
                        foreach (PropertyInfo pi in oProps)
                        {
                            Type colType = pi.PropertyType; if ((colType.IsGenericType) && (colType.GetGenericTypeDefinition() == typeof(Nullable<>)))
                            {
                                colType = colType.GetGenericArguments()[0];
                            }
                            dtReturn.Columns.Add(new DataColumn(pi.Name, colType));
                        }
                    }
                    DataRow dr = dtReturn.NewRow(); foreach (PropertyInfo pi in oProps)
                    {
                        dr[pi.Name] = pi.GetValue(rec, null) == null ? DBNull.Value : pi.GetValue(rec, null);
                    }
                    dtReturn.Rows.Add(dr);
                }
                return (dtReturn);
            }
  • 相关阅读:
    面向接口程序设计思想实践
    Block Chain Learning Notes
    ECMAScript 6.0
    Etcd Learning Notes
    Travis CI Build Continuous Integration
    Markdown Learning Notes
    SPRING MICROSERVICES IN ACTION
    Java Interview Questions Summary
    Node.js Learning Notes
    Apache Thrift Learning Notes
  • 原文地址:https://www.cnblogs.com/WangJunZzz/p/5989307.html
Copyright © 2020-2023  润新知