zoukankan      html  css  js  c++  java
  • 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);
            }
  • 相关阅读:
    eWebEditor在ie9下按钮功能失效的解决办法
    FLV视频播放代码
    笔记 PHP常用 语句
    jquery 无刷新加载执行,显示数据
    常用的PHP与SQL语句
    PHP常用语句
    Ajax+php 无刷新更新数据.并将数据库操作改写成类.
    js下拉框联动代码
    PHP 更新功能 笔记
    MyEclipse8.5开发环境配置中SVN插件安装重点解析
  • 原文地址:https://www.cnblogs.com/WangJunZzz/p/5989307.html
Copyright © 2011-2022 走看看