js导出excel

  
function inportEx()
{
    $("#btnEx").text("导出中...");
    var fugNumber = "";//第几次随访
    var fugid = "";//随访组Id
    var fudid = "";//医生id
    var zTree = $.fn.zTree.getZTreeObj("tree");
    var nodes = zTree.getSelectedNodes();
    //获取选中节点的id值
    if (nodes.length > 0) {
        var pnode = nodes[0].getParentNode();
        if (pnode != null && pnode != "") {
            fugid = pnode.FuGID;
        }
        // fudid = nodes[0].FuGID;
    }
    //获取需要导出excel的患者的id
    var chek_value_id = [];
    $(‘input[name="checkItem"]:checked‘).each(function () {
        chek_value_id.push($(this).val());
    });

    var treeObj = $.fn.zTree.getZTreeObj("treeExcel");
    var nodes = treeObj.getCheckedNodes(true);

    //将患者id数组转化为字符串传到后台
    var pId = chek_value_id.join(",");
    $.ajax({
        url: ‘/Patient/SaveExcel‘,// 跳转到 action
        data: {
            pid: pId,
            pfid:pfid,
            fugid: fugid
        },
        type: ‘get‘,
        cache: false,
        dataType: ‘json‘,
        success: function (result) {
            console.log(result);
            if (checkSession(result)) {
                if (result != null && result.length > 0) {
                    console.log(result);
                    downloadFile(result);
                }
            }

        },
        complete: function (XMLHttpRequest, textStatus) {

            pfid = "";
            $(‘#myModal‘).modal("hide");
        }
    });
}
//文件下载
function downloadFile(url) {
    try {
        var elemIF = document.createElement("iframe");
        elemIF.src = url;
        elemIF.style.display = "none";
        document.body.appendChild(elemIF);
    } catch (e) {

    }
}
 public async Task<JsonResult> SaveExcel(string pId, string pfid, string fugid)
        {

            //使用js导出excel
            string dir = Server.MapPath("/");
            string serverUrl = HttpContext.Request.Url.Authority;
            string filePath = "Excel\\" + DateTime.Now.ToString("yyyyMMddhhmmss") + "\\";
            dir = dir + filePath;
            string fileName = "患者管理" + DateTime.Now.ToString("yyyyMMddhhmmss");
            string path = dir + fileName + ".xls";
            string rtnValue = "http://" + serverUrl + "/Excel/" + DateTime.Now.ToString("yyyyMMddhhmmss") + "/" + fileName + ".xls";
            if (!Directory.Exists(dir))
            {
                //创建文件所在目录
                Directory.CreateDirectory(dir);
            }
            //获取该随访组的随访计划和问卷信息
            List<FllowAndPlanName> list = new List<FllowAndPlanName>();
            list = await patientBLL.SelectFllowPlan(fugid);
            int listGroup = (list.GroupBy(x => x.FllowPlan_id)).Count();
            var _list = await patientBLL.getFllowInfoList(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);
            cell.SetCellValue("基本信息");
            ICellStyle cellstyle = book.CreateCellStyle();//设置垂直居中格式
            cellstyle.VerticalAlignment = VerticalAlignment.CENTER;//垂直居中
            cellstyle.Alignment = HorizontalAlignment.CENTER;//水平居中
            cell.CellStyle = cellstyle;

            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>();//当前问卷下的答案的个数
            Dictionary<string, string> fllowInfo = new Dictionary<string, string>();//问卷名称和问卷id
            var listInfo = list.GroupBy(x => x.FollowInfo_ID).Select(g => g.First());
            foreach (var info in listInfo)
            {
                fllowInfo.Add(info.FollowInfo_Name, info.FollowInfo_ID);
            }
            //获取随访计划和问卷信息
            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);
            }
            int rowOne = arr.Length;
            int rowTwo = arr.Length;
            //用来控制题目的列数
            List<int> timuNum = new List<int>();
            IRow row3 = sheet1.CreateRow(0);
            IRow row4 = sheet1.CreateRow(1);
            int num = 0;
            //绘制随访计划列
            for (int i = 0; i < planName.Count; i++)
            {
                //绘制问卷列
                for (int j = arr.Length; j < fllowName.Count + arr.Length; j++)
                {
                    //获取当前问卷下面的题目个数
                    int r = timuResult[fllowName[j - arr.Length].ToString()];
                    sheet1.AddMergedRegion(new CellRangeAddress(1, 1, rowTwo, rowTwo + r - 1));
                    ICell cellFllow = row4.CreateCell(rowTwo);
                    cellFllow.CellStyle = cellstyle;
                    cellFllow.SetCellValue(fllowName[j - arr.Length].ToString());
                    rowTwo += r;
                }
                sheet1.AddMergedRegion(new CellRangeAddress(0, 0, rowOne, rowOne + timu.Count - 1));
                ICell cellPlan = row.CreateCell(rowOne);
                cellPlan.CellStyle = cellstyle;
                cellPlan.SetCellValue(planName[i]);
                rowOne += timu.Count;
                num += 1;

            }
            //绘制题目列
            for (int u = 0; u < planName.Count; u++)
            {
                for (int k = 0; k < timuList.Count; k++)
                {

                    ICell cellTimu = row2.CreateCell(timuNum.Count + arr.Length);
                    cellTimu.CellStyle = cellstyle;
                    cellTimu.SetCellValue(timuList[k].ToString());
                    timuNum.Add(k);

                }
            }

            #endregion
            #region Databtable的建立
            DataTable ExData = new DataTable();

            var tablleTitle = await patientBLL.getFllowInfoList(fugid);
            var infoCode = tablleTitle.GroupBy(x => x.FollowInfo_ID).Select(p => (new { Infoid = p.Key }));
            List<string> infoCodeList = new List<string>();
            foreach (var code in infoCode)
            {
                infoCodeList.Add(code.Infoid);
            }
            ExData.Columns.Add("序号", System.Type.GetType("System.String"));
            ExData.Columns.Add("姓名", System.Type.GetType("System.String"));
            ExData.Columns.Add("性别", System.Type.GetType("System.String"));
            ExData.Columns.Add("年龄", System.Type.GetType("System.String"));
            ExData.Columns.Add("联系电话", System.Type.GetType("System.String"));
            ExData.Columns.Add("随访医生", System.Type.GetType("System.String"));
            ExData.Columns.Add("最近一次随访", System.Type.GetType("System.String"));
            ExData.Columns.Add("计划次数", System.Type.GetType("System.String"));
            ExData.Columns.Add("共随访次数", System.Type.GetType("System.String"));
            ExData.Columns.Add("病历数", System.Type.GetType("System.String"));
            ExData.Columns.Add("咨询数", System.Type.GetType("System.String"));
            ExData.Columns.Add("下次随访时间", System.Type.GetType("System.String"));
            ExData.Columns.Add("状态", System.Type.GetType("System.String"));
            //把选择的随访计划和问卷信息做处理
            string[] singleInfo = pfid.Split(new char[] { ‘|‘ }, StringSplitOptions.RemoveEmptyEntries);
            int timeYear = DateTime.Now.Year;
            string[] singlePid = pId.Split(new char[] { ‘,‘ }, StringSplitOptions.None);
            //当前随访组下的随访计划
            for (int w = 1; w < planName.Count + 1; w++)
            {
                for (int t = 0; t < timuList.Count; t++)
                {
                    ExData.Columns.Add(timuList[t] + w, System.Type.GetType("System.String"));

                }

            }
            //选择患者的个数
            for (int p = 0; p < singlePid.Length; p++)
            {
              //  var excutePlanid = await  patientBLL.getExcutePlan_ID(singlePid[p]);
               DataRow ExRow = ExData.NewRow();

                for (int m = 1; m < planName.Count + 1; m++)
                { 

                    #region 获取数据

                    var res = await patientBLL.SavaExcel(singlePid[p], fugid);
                    ExRow["序号"] = p + 1;
                    ExRow["姓名"] = res[0].Patient_ID.ToString();
                    ExRow["性别"] = res[0].Patient_Sex.ToString();
                    ExRow["年龄"] = (timeYear - res[0].age.Value.Year).ToString() + "岁";
                    ExRow["联系电话"] = res[0].Login_Account.ToString();
                    ExRow["随访医生"] = res[0].fudname.ToString();
                    ExRow["最近一次随访"] = res[0].followUp_Last_time.ToString();
                    ExRow["计划次数"] = res[0].planCount.ToString();
                    ExRow["共随访次数"] = res[0].followUpCount.ToString();
                    ExRow["病历数"] = res[0].AdvisoryRecordCount.ToString();
                    ExRow["咨询数"] = res[0].medicalCount.ToString();
                    ExRow["下次随访时间"] = res[0].followUp_Next_time.ToString();
                    ExRow["状态"] = res[0].FuP_Status == "1" ? "在访" : (res[0].FuP_Status == "0" ? "失访" : (res[0].FuP_Status == "-2" ? "死亡" : "出组"));

                    for (int i = 0; i < singleInfo.Length; i++)
                    {

                        string[] info = singleInfo[i].Split(new char[] { ‘,‘ });
                        //选择了随访计划
                        if (info[3] == m.ToString() && info.Length == 6)
                        {
                            var quesResult = await patientBLL.SavaExcel(singlePid[p], fugid);
                            var querRes = quesResult.Where(x => x.fllowplanid.Equals(info[0]));
                            foreach (var item in querRes)
                            {
                                if (item.Question_Name != null) {
                                    string index = item.Question_Name + m;
                                    ExRow[index] = item.Choice_Content;
                                }

                            }
                        }
                        //选择了随访计划的某一个问卷
                        if (info[3] == m.ToString() && info.Length == 7)
                        {
                            var querResult_1 = await patientBLL.SavaExcel(singlePid[0], fugid);
                            var querRes_1 = querResult_1.Where(x => x.QBClass_Code.Equals(info[4]) && x.fllowplanid.Equals(info[0]));
                            foreach (var item in querRes_1)
                            {
                                if (item.Question_Name != null)
                                {
                                    string index = item.Question_Name + m;
                                    ExRow[index] = item.Choice_Content;

                                }
                            }
                        }
                        //如果一次随访计划下有多个问卷,选择了一个或者多个问卷
                        if (info[3] == m.ToString() && info.Length < 6)
                        {
                            string[] condition = info[4].Split(new char[] { ‘*‘ }, StringSplitOptions.RemoveEmptyEntries);
                            for (int k = 0; k < condition.Length; k++)
                            {
                                string[] singCondtion = condition[k].ToString().Split(new char[] { ‘@‘ });
                                var querResult_2 = await patientBLL.SavaExcel(singlePid[0], fugid);
                                // List<excelModel> querRs = new List<excelModel>();
                                for (int n = 0; n < singCondtion.Length; n++)
                                {
                                    var querRes_2 = querResult_2.Where(x => x.QBClass_Code.Equals(singCondtion[0]) && x.fllowplanid.Equals(info[0])).ToList();
                                    foreach (var item in querRes_2)
                                    {
                                        if (item.Question_Name != null)
                                        {
                                            string index = item.Question_Name + m;
                                            ExRow[index] = item.Choice_Content;
                                        }
                                    }
                                    //querRs.AddRange(querRes_2);
                                }
                            }
                        }
                    }
                    #endregion
                }
                ExData.Rows.Add(ExRow);
            }
            //将数据写入到excel
            for (int i = 0; i < ExData.Rows.Count; i++)
            {
                row = sheet1.CreateRow(i + 3);
                ExData.Rows[i][0] = (i + 1).ToString();
                for (int j = 0; j < ExData.Columns.Count; j++)
                {
                    ICell ce = row.CreateCell(j);
                    ce.SetCellValue(ExData.Rows[i][j].ToString());
                }

            }
            #endregion

            using (FileStream fs = new FileStream(path, FileMode.OpenOrCreate, FileAccess.Write))
            {
                book.Write(fs);
                fs.Close();
            }
            return Json(rtnValue, JsonRequestBehavior.AllowGet);

        }
时间: 2024-08-07 06:23:14

js导出excel的相关文章

浏览器端JS导出EXCEL

很多表格业务需要将表格数据导出为Excel,通常使用后台语言java或者php实现数据查询组织Excel文件,提供下载.如果使用客户端JS导出Excel的话,可以减轻服务器端的运算压力,并且能够快速响应. 早期浏览器端导出excel都是借助IE的ActiveX,需要调整浏览器的安全级别,且只能再IE浏览器下使用.我们需要一种跨平台的解决方案. 而Flash具有强大的客户端处理能力,其FileReference类可以从浏览器向本地存储数据.随着Html5的发展,File API也支持浏览器读写本地

CefSharp中实现Chrome中jS导出Excel

[前言] 在博客园闲逛了一年多,平时都是借鉴别人的成功经验,总觉得自己应该分享点什么,但是苦于自己技术有限,平时又不爱写东西,所以一直没有写过任何东西.毕业一年多,在现实工作中遇到各种问题,深切体会到遇到问题时的焦急与纠结.今天决定写自己的第一篇现实中遇到的问题.希望能够为遇到类似问题的博友们提供一些帮助.文章可能写的不好,请勿喷!! [背景] 使用JS将<table>数据以Excel形式已经不是新鲜事情,在IE中常常使用ActiveXObject来创建Excel.application对象来

js导出excel增加表头、mso-number-format定义数据格式

问题1:增加表头 js导出表格时,只会导出table里的展现出的内容,如需增加表头等内容需要在页面获取的字符串中拼接表头的相关字符串,详细介绍如下: tableString:新增的表头内容字符串: ctx.table: 新增的表头+页面获取的table字符串. 这样,表头就加上了,还可以通过style设置它的样式: 问题2:mso-number-format定义数据格式 在做项目时遇到mso-number-format定义的科学计数法转化格式与金额定义的向右对齐样式有冲突.  之前有写过篇博客专

js 导出Excel

最近从Silverlight这边转到javascript过来,现在要导出一个导出excel的功能.上级领导指示当页显示多少数据,就导出多少数据,没有必要从后台在去数据.以前也没有接触过这方面的,在网上一整狂查资料,最终决定采用excel2003xml+flash插件实现改功能. 获取excel2003xml格式 在桌面新建一个excel文件,另存为2003xml格式,用Vs2012打开该文件,就能清晰的明白数据保存方式. javascript构造xml数据 了解数据结构后,我们已经知道了exce

js导出excel:前端当前数据的导出

网上找的库文件,同样做了修改.在导出的时候,有时候数据第一列和最后一列可能是复选框和操作按钮,这个是我们不需要的,加了这个的过滤 //table2excel.js /* * jQuery table2excel - v1.1.1 * jQuery plugin to export an .xls file in browser from an HTML table * https://github.com/rainabba/jquery-table2excel * * Made by raina

XLSX.js 导出Excel demo

GitHub:https://github.com/SheetJS/js-xlsx 一个js操作Excel的工具,如下代码,很方便的就将json数据导出为Excel文件. 使用示例: //json 数据 var data = [{ "a": 1, "x": 2, "b": 3, "y": 4, "success":true }, { "a": 1, "x": 2, &

chrome浏览器js 导出excel

1 <table id="table"> 2 <tr> 3 <th>ID</th> 4 <th>姓名</th> 5 <th>年龄</th> 6 <th>职业</th> 7 <th>地区</th> 8 <th>邮箱</th> 9 </tr> 10 <tr> 11 <td>1</td

使用JSExcelXML.js导出Excel模板

     老规矩先来个预览图 业务系统显示效果图 导出模板图 功能描述    世间万物总是相生相克,既然我们的客户要求有导出Excel,当然也会提导人Excel,那么问题就来了,我们的业务系统怎么知道用户提供的数据会是怎样的呢,那么用户需要的数据模板就应运而生了,在JSExcelXmL的最新版本中提供模板生成功能. var tmpdlg = $.ExportExcelTmp({options }); tmpdlg.ExportExcelTmp('open'); 2.参数说明 { SheetNam

js导出excel ()基于 OpenXML 支持 2007版本以上 浏览器 data 协议) 无须ie插件支持.

方法一(推荐): 基于微软OpenXML协议,支持excel2007版本以上. 基于浏览器 data 协议 , 完全不需要依赖ie 插件.不需要客户端是否安装excel. 欢迎点评,共同进步 ! 1 <html> 2 <head> 3 <meta http-equiv="content-Type" content="text/html;charset=utf-8"/> 4 <script type="text/ja