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(, , , arr.Length - ); //合并0列的n--n+2行
sheet1.AddMergedRegion(m_region);
IRow row = sheet1.CreateRow();
ICell cell = row.CreateCell();
cell.SetCellValue("基本信息");
ICellStyle cellstyle = book.CreateCellStyle();//设置垂直居中格式
cellstyle.VerticalAlignment = VerticalAlignment.CENTER;//垂直居中
cellstyle.Alignment = HorizontalAlignment.CENTER;//水平居中
cell.CellStyle = cellstyle; IRow row2 = sheet1.CreateRow();
for (int i = ; 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();
IRow row4 = sheet1.CreateRow();
int num = ;
//绘制随访计划列
for (int i = ; 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(, , rowTwo, rowTwo + r - ));
ICell cellFllow = row4.CreateCell(rowTwo);
cellFllow.CellStyle = cellstyle;
cellFllow.SetCellValue(fllowName[j - arr.Length].ToString());
rowTwo += r;
}
sheet1.AddMergedRegion(new CellRangeAddress(, , rowOne, rowOne + timu.Count - ));
ICell cellPlan = row.CreateCell(rowOne);
cellPlan.CellStyle = cellstyle;
cellPlan.SetCellValue(planName[i]);
rowOne += timu.Count;
num += ; }
//绘制题目列
for (int u = ; u < planName.Count; u++)
{
for (int k = ; 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 = ; w < planName.Count + ; w++)
{
for (int t = ; t < timuList.Count; t++)
{
ExData.Columns.Add(timuList[t] + w, System.Type.GetType("System.String")); } }
//选择患者的个数
for (int p = ; p < singlePid.Length; p++)
{
// var excutePlanid = await patientBLL.getExcutePlan_ID(singlePid[p]);
DataRow ExRow = ExData.NewRow(); for (int m = ; m < planName.Count + ; m++)
{ #region 获取数据 var res = await patientBLL.SavaExcel(singlePid[p], fugid);
ExRow["序号"] = p + ;
ExRow["姓名"] = res[].Patient_ID.ToString();
ExRow["性别"] = res[].Patient_Sex.ToString();
ExRow["年龄"] = (timeYear - res[].age.Value.Year).ToString() + "岁";
ExRow["联系电话"] = res[].Login_Account.ToString();
ExRow["随访医生"] = res[].fudname.ToString();
ExRow["最近一次随访"] = res[].followUp_Last_time.ToString();
ExRow["计划次数"] = res[].planCount.ToString();
ExRow["共随访次数"] = res[].followUpCount.ToString();
ExRow["病历数"] = res[].AdvisoryRecordCount.ToString();
ExRow["咨询数"] = res[].medicalCount.ToString();
ExRow["下次随访时间"] = res[].followUp_Next_time.ToString();
ExRow["状态"] = res[].FuP_Status == "" ? "在访" : (res[].FuP_Status == "" ? "失访" : (res[].FuP_Status == "-2" ? "死亡" : "出组")); for (int i = ; i < singleInfo.Length; i++)
{ string[] info = singleInfo[i].Split(new char[] { ',' });
//选择了随访计划
if (info[] == m.ToString() && info.Length == )
{
var quesResult = await patientBLL.SavaExcel(singlePid[p], fugid);
var querRes = quesResult.Where(x => x.fllowplanid.Equals(info[]));
foreach (var item in querRes)
{
if (item.Question_Name != null) {
string index = item.Question_Name + m;
ExRow[index] = item.Choice_Content;
} }
}
//选择了随访计划的某一个问卷
if (info[] == m.ToString() && info.Length == )
{
var querResult_1 = await patientBLL.SavaExcel(singlePid[], fugid);
var querRes_1 = querResult_1.Where(x => x.QBClass_Code.Equals(info[]) && x.fllowplanid.Equals(info[]));
foreach (var item in querRes_1)
{
if (item.Question_Name != null)
{
string index = item.Question_Name + m;
ExRow[index] = item.Choice_Content; }
}
}
//如果一次随访计划下有多个问卷,选择了一个或者多个问卷
if (info[] == m.ToString() && info.Length < )
{
string[] condition = info[].Split(new char[] { '*' }, StringSplitOptions.RemoveEmptyEntries);
for (int k = ; k < condition.Length; k++)
{
string[] singCondtion = condition[k].ToString().Split(new char[] { '@' });
var querResult_2 = await patientBLL.SavaExcel(singlePid[], fugid);
// List<excelModel> querRs = new List<excelModel>();
for (int n = ; n < singCondtion.Length; n++)
{
var querRes_2 = querResult_2.Where(x => x.QBClass_Code.Equals(singCondtion[]) && x.fllowplanid.Equals(info[])).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 = ; i < ExData.Rows.Count; i++)
{
row = sheet1.CreateRow(i + );
ExData.Rows[i][] = (i + ).ToString();
for (int j = ; 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); }

js导出excel的更多相关文章

  1. js导出Excel表格

    js导出Excel表格 直接上代码: 红色部分:如果表格数据中有“1/1”这样的值,会在导出的Excel中转化为日期“1月1日”,所以才加上了红色那两句.如果返回值中没有这样的格式,红色部分可以不写. ...

  2. JS导出excel设置下载的标题/与angular结合冲突

    2017.8更新 此功能与angular结合使用时,最后一行 document.getElementById("dlink").click(); 与angular的ng-click ...

  3. EasyUI 如何结合JS导出Excel文件

    出处:http://blog.csdn.net/jumtre/article/details/41119991 EasyUI 如何结合JS导出Excel文件 分类: 技术 Javascript jQu ...

  4. [转]tableExport.js 导出excel 如果有负数或是空值 导出前面会自动加上单引号

    原文地址:https://blog.csdn.net/private66/article/details/88718285 tableExport.js  导出excel  如果有负数或是空值 导出前 ...

  5. 利用PHPExcel导出excel 以及利用js导出excel

    导出excel的方法output_excel需要依赖PHPExcel 导出csv的方法csv_export不需要 <?php /** * @author ttt */ class ExcelCo ...

  6. Html Table用JS导出excel格式问题 导出EXCEL后单元格里的000412341234会变成412341234 7-14 会变成 2018-7-14(7月14) 自定义格式 web利用table表格生成excel格式问题 js导出excel增加表头、mso-number-format定义数据格式 数字输出格式转换 mso-number-format:"\@"

    Html Table用JS导出excel格式问题 我在网上找的JS把HTML Tabel导出成EXCEL.但是如果Table里的数字内容为0开的的导成Excel后会自动删除0,我想以text的格式写入 ...

  7. 浏览器端JS导出EXCEL

    浏览器端JS导出EXCEL FileSaver.js 实现了在本身不支持 HTML5 W3C saveAs() FileSaver 接口的浏览器支持文件保存.FileSaver.js 在客户端保存文件 ...

  8. html js 导出excel表格

    这个使用js 导出excel,可以集成其他语言,可以html,php,asp ,java 等,自己喜欢用那种语言就用哪种,使用非常方便.js是使用tableExport.js ,jquery-3.2. ...

  9. JS导出excel 兼容ie、chrome、firefox

    运用js实现将页面中的table导出为excel文件,页面显示如下: 导出的excel文件显示如下: 实现代码: <!DOCTYPE html> <html> <head ...

随机推荐

  1. 企业IT架构介绍

    企业信息化之路 问题   互联互通   统一访问 统一身份管理 数据管理模型 企业数据集成业务架构 业务流程框架 业务流程模型 个性流程支持 跨业务的业务流程组合 EBS总线 ] SOA架构上视图 B ...

  2. 【设计模式】单例模式 c++实现

    单例模式一般应用在整个应用中只会存在一个对象.比如应用类,游戏场景类,工具类等. 实现方式: 头文件 singleton.h: #ifndef _SINGLETON_H_ #define _SINGL ...

  3. swift 学习笔记[1]

    最近在IMOOK(网站)上自学了下swift , 总结下swift相对其他语言的不同之处 , 方便熟悉其他语言的程序员,熟悉swift语言的特性. 1. swift 的特别之处就是可以在原有的类上 , ...

  4. Android Volley

    1.volley简单的介绍: Volley是一个HTTP库,使Android应用程序变得更加容易,最重要的是,网络 得更快. Vollry 提供以下好处: 1.自动调度的网络请求. 2.多个并发的网络 ...

  5. jdbc数据库连接过程及驱动加载与设计模式详解

    首先要导入JDBC的jar包:接下来,代码:Class.forName(xxx.xx.xx)返回的是一个类 Class.forName(xxx.xx.xx)的作用是要求JVM查找并加载指定的类, 也就 ...

  6. Freemarker 程序开发

    Freemarker 程序开发 现在web开发中,多使用freemarker 来描述页面.通常会使用的macro来定义各种组件,从而达到UI组件的复用.结合使用其它的指定,可快速的描述一个html页面 ...

  7. 关于java的递归写法,经典的Fibonacci数的问题

    经典的Fibonacci数的问题 主要想展示一下迭代与递归,以及尾递归的三种写法,以及他们各自的时间性能. public class Fibonacci { /*迭代*/ public static ...

  8. TCP连接建立和终止小结

    TCP连接建立(三次握手) 如图: 请求端发送一个SYN到服务器的相应端口,以及初始序号ISN 服务器发送包含服务器的初始序号的SYN作为应答,同时确认序号设置为客户的ISN+1 客户将确认序号设置为 ...

  9. 【转】XenServer架构之XAPI的调用流程

    XAPI 调用是使用XML-RPC协议通过网络发送到安装有XenServer 的主机上.XAPI对象的引用不保证对象的永久标识符,引用不允许对象进行相等比较.对同一物体的两个引用,不保证是文本相同的. ...

  10. O(1)效率的表面模糊算法优化。

    很久没有写文章了,主要是最近一段时间没有以前那么多空暇空间,内存和CPU占用率一致都很高,应前几日群里网友的要求,今天发个表面模糊的小程序来找回之前写博客的热情吧. 国内我认为,破解表面模糊的原理的最 ...