using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; using System.IO; using System.Data; using NPOI.SS.UserModel; using NPOI.HSSF.UserModel; using NPOI.XSSF.UserModel; using NPOI.SS.Util; using NPOI.HSSF.Util; using System.Text; using NPOI.HPSF; using NPOI.SS.Formula.Functions; using Telerik.Web.UI; using VRS.Management.VSAT; namespace VRS.Util { public partial class Import_Theory : BasePage { DataService.BLL.admin_user_role bllAUR = new DataService.BLL.admin_user_role(); DataService.BLL.admin_config bll_config = new DataService.BLL.admin_config(); DataService.BLL.base_major bll_major = new DataService.BLL.base_major(); DataService.BLL.pro_type_manage bll_type_manage = new DataService.BLL.pro_type_manage(); DataService.BLL.admin_user bll_user = new DataService.BLL.admin_user(); DataService.BLL.admin_school bll_school = new DataService.BLL.admin_school(); DataService.BLL.pro_theory_base bll_base = new DataService.BLL.pro_theory_base(); protected override void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { /* var user = DataService.BLL.admin_user.load_login(); var user_login = bll_user.GetModel(user.user_id); if (null != user_login && user_login.role_id == "0") { tr_school.Visible = true; BindSchool(dp_school, ""); } */ excel_option.HRef = "~/Upload/Excel/选项题目模板.xls"; excel_tiankong.HRef = "~/Upload/Excel/填空题简答题模板.xls"; } } protected void btnSure_Click(object sender, EventArgs e) { var user = DataService.BLL.admin_user.load_login(); var user_login = bll_user.GetModel(user.user_id); var school_id = ""; if (fileUpload.UploadedFiles.Count > 0) { string dirPath = Server.MapPath("~/Upload/"); if (!Directory.Exists(dirPath)) Directory.CreateDirectory(dirPath); string fileName = Guid.NewGuid().ToString() + fileUpload.UploadedFiles[0].GetExtension(); string savePath = dirPath + fileName; fileUpload.UploadedFiles[0].SaveAs(savePath); string cmd = Request.Params["cmd"]; string msg = "上传成功!"; bool state = false; switch (cmd) { /* case "ImportUsers"://导入用户 state = ImportUsers(savePath); break; case "ImportStudents"://导入学生 state = ImportStudents(savePath, out msg); break; case "ImportXueyuan"://导入学员 state = ImportXueyuan(savePath, out msg); break; */ case "ImportSchoolStudents"://导入学校学生 state = ImportSchoolStudents(savePath, school_id, out msg); if (File.Exists(savePath)) { File.Delete(savePath); } break; case "ImportTheory"://导入题目 var type = ddp_role.SelectedValue; msg = "上传成功"; //单选、多选、判断题 if (type == "1") { state = ImportTheoryOption(savePath, out msg); } //填空、简答题 if (type == "2") { state = ImportTheoryTiankong(savePath, out msg); } if (File.Exists(savePath)) { File.Delete(savePath); } break; } //if (state) //msg = "上传成功!"; //msg = "上传成功,导入失败!"; RadAjaxManager1.ResponseScripts.Add("alert('" + msg + "');CloseAndRebind();"); } else { RadAjaxManager1.Alert("请选择excel文件,再点击上传!"); } } /// /// 导入教员 /// /// private bool ImportUsers(string filePath) { try { var table = ExcelToDataTable(filePath, "", 0, true, false); if (null != table) { DataService.BLL.admin_user bll = new DataService.BLL.admin_user(); for (int i = 0, len = table.Rows.Count; i < len; i++) { var row = table.Rows[i]; var userId = row["账号"].ToString(); var model = new DataService.Model.admin_user(); var isExists = false; if (bll.ExistsByJobNumber(userId)) { model = bll.GetModelByJobNumber(userId); isExists = true; } //姓名、账号、性别、手机号码、备注 model.real_name = row["姓名"].ToString(); model.sex = row["性别"].ToString(); model.mobile = row["手机号码"].ToString(); model.r1 = row["备注"].ToString(); if (isExists) { bll.Update(model); } else { model.user_id = BasePage.GetNewId("AU"); model.password = BasePage.GetMD5("12345"); //默认12345 model.login_name = row["账号"].ToString(); model.job_number = row["账号"].ToString(); model.create_time = DateTime.Now; var config = bll_config.GetModelList(" is_use =1 ").FirstOrDefault(); var app_key = config.app_key; model.r2 = app_key; bll.Add(model); DataService.Model.admin_user_role model_user_role = new DataService.Model.admin_user_role(); model_user_role.user_role_id = BasePage.GetNewId("AUR"); model_user_role.user_id = model.user_id; model_user_role.role_id = new DataService.BLL.admin_role().GetModelList(string.Format(" role_name = '教员' ")).First().role_id; //教员 bllAUR.Add(model_user_role); } } return true; } } catch { } return false; } /// /// 导入学生 $$$$ /// /// private bool ImportStudents(string filePath, out string msg) { try { msg = "上传成功"; var table = ExcelToDataTable(filePath, "", 0, true, false); if (null != table && table.Rows.Count > 1) { var list_dep_excel = new List(); var dep = string.Empty; #region ===检查上传的字段==== for (int i = 0; i < table.Rows.Count; i++) { var row = table.Rows[i]; dep = row["部门"].ToString(); if (!string.IsNullOrWhiteSpace(dep)) { if (!list_dep_excel.Contains(dep.Trim())) { list_dep_excel.Add(dep.Trim()); } } else { msg = "存在专业为空的记录,请检查上传文件"; return false; } #region 检查性别 var sex_name = row["性别"].ToString(); if (string.IsNullOrWhiteSpace(sex_name)) { msg = "存在性别为空的记录,请检查上传文件"; return false; } #endregion #region 身份证号 var id_card = row["身份证号"].ToString(); if (string.IsNullOrWhiteSpace(id_card)) { msg = "存在身份证号为空的记录,请检查上传文件"; return false; } if (id_card.Length == 18 && !BasePage.Is_valid_idcard18(id_card)) { msg = "18位身份证号码格式错误!错误身份证号: " + id_card; return false; } #endregion #region 检查姓名 var real_name = row["姓名"].ToString(); if (string.IsNullOrWhiteSpace(real_name)) { msg = "存在姓名为空的记录,请检查上传文件"; return false; } #endregion } #endregion var major_list = bll_type_manage.GetModelList(string.Format(" parent_id = 'sign_dep' ")); List error_major = new List(); foreach (var item in list_dep_excel) { var model = major_list.FirstOrDefault(s => s.type_name == item); if (null == model) { error_major.Add(item); } } if (error_major.Count > 0) { msg = "请先在部门管理模块配置部门,以下部门不存在:" + string.Join(",", error_major.ToArray()); return false; } int insertCount = 0; int updateCount = 0; DataService.BLL.admin_user bll = new DataService.BLL.admin_user(); for (int i = 0, len = table.Rows.Count; i < len; i++) { var row = table.Rows[i]; var id_card = row["身份证号"].ToString().Trim(); var model = new DataService.Model.admin_user(); var isExists = false; if (bll.ExistsByIdcard(id_card)) { model = bll.GetModelByIdcard(id_card); isExists = true; } //姓名 性别 身份证号 部门 model.real_name = row["姓名"].ToString().Trim(); model.sex = row["性别"].ToString(); if (isExists) { if (bll.Update(model)) { updateCount++; } } else { //学号不让修改 model.user_id = BasePage.GetNewId("USER"); model.password = BasePage.GetMD5("12345"); //默认12345 model.create_time = DateTime.Now; model.id_card = id_card; if (bll.Add(model)) { insertCount++; } } } msg = "上传成功"; if (insertCount > 0) { msg += ",添加记录数:" + insertCount; } if (updateCount > 0) { msg += ",修改记录数:" + updateCount; } return true; } else { msg = "上传失败:表格内容为空"; return false; } } catch (Exception ex) { msg = "上传失败:" + ex.Message; return false; } } /// /// 导入学员 $$$$ /// /// private bool ImportXueyuan(string filePath, out string msg) { try { msg = "上传成功"; var table = ExcelToDataTable(filePath, "", 0, true, false); var user = DataService.BLL.admin_user.load_login(); var userModel = bll_user.GetModel(user.user_id); if (null != table && table.Rows.Count > 1) { var list_dep_excel = new List(); var dep = string.Empty; #region ===检查上传的字段==== for (int i = 0; i < table.Rows.Count; i++) { var row = table.Rows[i]; #region 检查姓名 var real_name = row["姓名"].ToString(); if (string.IsNullOrWhiteSpace(real_name)) { msg = "存在姓名为空的记录,请检查上传文件"; return false; } #endregion #region 登录账号 var id_card = row["登录账号"].ToString(); if (string.IsNullOrWhiteSpace(id_card)) { msg = "存在登录账号为空的记录,请检查上传文件"; return false; } if (id_card.Length < 5) { msg = "登录账号的长度小于5!请检查登录账号: " + id_card; return false; } #endregion #region 手机号码 var mobile = row["手机号码"].ToString(); if (string.IsNullOrWhiteSpace(mobile)) { msg = "存在手机号码为空的记录,请检查上传文件"; return false; } if (!BasePage.IsMobile(mobile)) { msg = "手机号码格式不正确,请检查手机号:" + mobile; return false; } #endregion } #endregion int insertCount = 0; int updateCount = 0; DataService.BLL.admin_user bll = new DataService.BLL.admin_user(); for (int i = 0, len = table.Rows.Count; i < len; i++) { var row = table.Rows[i]; var id_card = row["登录账号"].ToString().Trim(); var model = new DataService.Model.admin_user(); var isExists = false; if (bll.ExistsByIdcard(id_card)) { model = bll.GetModelByIdcard(id_card); isExists = true; } //姓名 性别 身份证号 部门 model.real_name = row["姓名"].ToString().Trim(); //model.sex = row["性别"].ToString(); //model.dep_name = row["部门"].ToString(); model.mobile = row["手机号码"].ToString(); if (isExists) { if (bll.Update(model)) { updateCount++; } } else { //学号不存在,进行新增 model.user_id = BasePage.GetNewId("USER"); model.password = BasePage.GetMD5("12345"); //默认12345 model.create_time = DateTime.Now; model.id_card = id_card; model.role_id = bll_user.getStudentRoleId(); if (bll.Add(model)) { insertCount++; } } } msg = "上传成功"; if (insertCount > 0) { msg += ",添加记录数:" + insertCount; } if (updateCount > 0) { msg += ",修改记录数:" + updateCount; } return true; } else { msg = "上传失败:表格内容为空"; return false; } } catch (Exception ex) { msg = "上传失败:" + ex.Message; return false; } } /// /// 导入学校学生 $$$$ /// /// private bool ImportSchoolStudents(string filePath, string school_id, out string msg) { try { msg = "上传成功"; /* var user = DataService.BLL.admin_user.load_login(); var user_login = bll_user.GetModel(user.user_id); if (user_login.role_id=="0") { msg = "上传失败,请用老师角色上传文件!"; return false; } */ var table = ExcelToDataTable(filePath, "", 0, true, false); if (null != table && table.Rows.Count >= 1) { var list_dep_excel = new List(); var dep = string.Empty; List list_login_name = new List(); #region ===检查上传的字段==== for (int i = 0; i < table.Rows.Count; i++) { var row = table.Rows[i]; #region var grade = row["班级"].ToString(); if (string.IsNullOrWhiteSpace(grade)) { msg = "存在班级为空的记录,请检查上传文件"; return false; } #endregion #region 检查姓名 var real_name = row["姓名"].ToString(); if (string.IsNullOrWhiteSpace(real_name)) { msg = "存在姓名为空的记录,请检查上传文件"; return false; } #endregion #region 登录账号 var id_card = row["登录账号"].ToString(); if (string.IsNullOrWhiteSpace(id_card)) { msg = "存在登录账号为空的记录,请检查上传文件"; return false; } if (id_card.Length < 5) { msg = "登录账号的长度小于5!请检查登录账号: " + id_card; return false; } var login_name = row["登录账号"].ToString().Trim(); list_login_name.Add(login_name); /* if (bll_user.ExistsByIdcard(id_card)) { msg = "登录账号已经存在!请检查登录账号: " + id_card; return false; } */ #endregion #region 手机号码 var mobile = row["手机号码"].ToString(); if (!string.IsNullOrWhiteSpace(mobile) && !BasePage.IsMobile(mobile)) { msg = "手机号码格式不正确,请检查手机号:" + mobile; return false; } #endregion } #endregion int insertCount = 0; int updateCount = 0; List list_Insert = new List(); List list_update = new List(); DataService.BLL.admin_user bll = new DataService.BLL.admin_user(); for (int i = 0, len = table.Rows.Count; i < len; i++) { var row = table.Rows[i]; var login_name = row["登录账号"].ToString().Trim(); var model = new DataService.Model.admin_user(); var isExists = false; // var user_exists = bll.GetModelBylogin_name(user_login.school_id, login_name); var user_exists = bll.GetModelBylogin_name(login_name); if (null != user_exists) { model = user_exists; isExists = true; } //班级 姓名 手机号码 登录账号(不变) model.grade = row["班级"].ToString(); model.real_name = row["姓名"].ToString().Trim(); model.job_number = row["学号"].ToString(); model.mobile = row["手机号码"].ToString(); if (isExists) { /* if (bll.Update(model)) { updateCount++; } */ list_update.Add(model); updateCount++; } else { //string password = GetString(6);//随机 //string password = "12345"; //默认 string password = "12345"; var random_value = ""; if (random_value == "1") { password = GetString6();//随机 } model.user_id = BasePage.GetNewId("USER"); model.password = BasePage.GetMD5(password); //默认12345 model.create_time = DateTime.Now; model.login_name = login_name; //登录账号 model.school_id = school_id; //model.role_id = bll_user.getStudentRoleId(); model.role_id = ddp_role.SelectedValue; //model.r6 = password;//随机 /* if (bll.Add(model)) { insertCount++; } */ list_Insert.Add(model); insertCount++; } } var total = bll.BatchAdd_Update(list_Insert, list_update); msg = "上传成功"; if (total == (insertCount + updateCount)) { if (insertCount > 0) { msg += ",添加记录数:" + insertCount; } if (updateCount > 0) { msg += ",修改记录数:" + updateCount; } } return true; } else { msg = "上传失败:表格内容为空"; return false; } } catch (Exception ex) { msg = "上传失败:" + ex.Message; return false; } } /// /// 获取逗号分隔的答案 /// /// /// private int getAnswerCount(string commaAnswer) { var array = commaAnswer.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries); int count = array.Length; return count; } /// /// 获取包含是的答案 /// /// /// private int getAnswerYesCount(string optionsWithAnswer) { var array = optionsWithAnswer.Split(new char[] { '|' }, StringSplitOptions.RemoveEmptyEntries); var end1 = "(是)"; var end2 = "(是)"; int count = 0; foreach (var item in array) { var value = item.Trim(); if (value.EndsWith(end1) || value.EndsWith(end2)) { count++; } } return count; } // obj.question = question; //obj.kind = kind; // obj.target = target; //obj.answer = answer; public class theory_base_add { public string question { get; set; } public string kind { get; set; } public string target { get; set; } public string answer { get; set; } public List Items { get; set; } public theory_base_add() { Items = new List(); } } /// /// 添加填空、简答题目 /// /// /// /// private bool ImportTheoryTiankong(string filePath, out string msg) { try { //知识领域 题目类型 题干 选项答案 List list_base = new List(); var table = ExcelToDataTable(filePath, "简答题填空题", 0, true, false); if (null != table && table.Rows.Count >= 1) { var list_dep_excel = new List(); var dep = string.Empty; List list_login_name = new List(); #region ===检查上传的字段==== for (int i = 0; i < table.Rows.Count; i++) { var row_dsc = "行:" + (i + 1) + " "; var row = table.Rows[i]; #region var target = row["知识领域"].ToString().Trim(); if (string.IsNullOrWhiteSpace(target)) { msg = row_dsc + "存在知识领域为空的记录,请检查上传文件"; return false; } #endregion #region 检查题目类型 var kind = row["题目类型"].ToString().Trim(); if (string.IsNullOrWhiteSpace(kind)) { msg = row_dsc + "存在题目类型为空的记录,请检查上传文件"; return false; } if (kind != "填空题" && kind != "简答题") { msg = row_dsc + "题目类型:" + kind + " 不在填空题、简答题中,请检查上传文件"; return false; } #endregion #region 题干 var question = row["题干"].ToString().Trim(); if (string.IsNullOrWhiteSpace(question)) { msg = row_dsc + "存在题干为空的记录,请检查上传文件"; return false; } #endregion #region 选项答案 var answer = row["选项答案"].ToString().Trim(); if (string.IsNullOrWhiteSpace(answer)) { msg = row_dsc + "存在选项答案为空的记录,请检查上传文件"; return false; } string questionTK = ""; string answerTK = ""; if (kind == "填空题") { var line2 = "__"; questionTK = question.Replace("__________", line2) .Replace("_________", line2) .Replace("________", line2) .Replace("_______", line2) .Replace("______", line2) .Replace("_____", line2) .Replace("____", line2) .Replace("___", line2); var question_count = ExamTheoryBase_Add_Custom.CountSubstringOccurrences(questionTK, line2); answerTK = answer.Replace("__________", line2) .Replace("_________", line2) .Replace("________", line2) .Replace("_______", line2) .Replace("______", line2) .Replace("_____", line2) .Replace("____", line2) .Replace("___", line2); var answer_array = answerTK.Split(new string[] { line2 }, StringSplitOptions.None); if (question_count < 1) { msg = row_dsc + "填空题空格数数量:" + question_count + ",至少1个空格,请检查上传文件"; return false; } if (question_count != answer_array.Length) { msg = row_dsc + string.Format("填空题空格数:{0} ,与答案数:{1} 不一致!", question_count, answer_array.Length); return false; } } var obj = new theory_base_add(); obj.question = question; obj.kind = kind; obj.target = target; obj.answer = answer; if (kind == "填空题") { obj.question = questionTK; obj.answer = answerTK; } list_base.Add(obj); #endregion } #endregion List list_add = new List(); List list_add_items = new List(); var user = DataService.BLL.admin_user.load_login(); for (int i = 0; i < list_base.Count; i++) { var obj = list_base[i]; var model = new DataService.Model.pro_theory_base(); var id = BasePage.GetId(); model.id = id; model.target = obj.target; model.kind = obj.kind; model.question = obj.question; model.create_time = DateTime.Now; model.create_by = user.user_id; model.answer = obj.answer; list_add.Add(model); } var total = bll_base.BatchAddBaseWithItems(list_add, list_add_items); //var total = 1; msg = "上传成功"; if (total > 0) { msg += ",添加记录数:" + total; return true; } else { msg += ",数据添加失败!"; return false; } } else { msg = "上传失败:表格内容为空"; return false; } } catch (Exception ex) { msg = "上传失败:" + ex.Message; return false; } } /// /// 添加选项题目 /// /// /// /// private bool ImportTheoryOption(string filePath, out string msg) { try { //知识领域 题目类型 题干 选项答案 List list_base = new List(); var table = ExcelToDataTable(filePath, "选项题", 0, true, false); if (null != table && table.Rows.Count >= 1) { var list_dep_excel = new List(); var dep = string.Empty; List list_login_name = new List(); #region ===检查上传的字段==== for (int i = 0; i < table.Rows.Count; i++) { var row_dsc = "行:" + (i + 1) + " "; var row = table.Rows[i]; #region var target = row["知识领域"].ToString(); if (string.IsNullOrWhiteSpace(target)) { msg = row_dsc + "存在知识领域为空的记录,请检查上传文件"; return false; } #endregion #region 检查题目类型 var kind = row["题目类型"].ToString(); if (string.IsNullOrWhiteSpace(kind)) { msg = row_dsc + "存在题目类型为空的记录,请检查上传文件"; return false; } if (kind != "单选题" && kind != "判断题" && kind != "多选题") { msg = row_dsc + "题目类型:" + kind + " 不在单选题、判断题、多选题中,请检查上传文件"; return false; } #endregion #region 题干 var question = row["题干"].ToString(); if (string.IsNullOrWhiteSpace(question)) { msg = row_dsc + "存在题干为空的记录,请检查上传文件"; return false; } #endregion #region 选项答案 var answer = row["正确答案"].ToString(); if (string.IsNullOrWhiteSpace(answer)) { msg = row_dsc + "存在正确答案为空的记录,请检查上传文件"; return false; } var list_items = new List(); var optiona = row["选项A"].ToString().Trim(); var optionb = row["选项B"].ToString().Trim(); var optionc = row["选项C"].ToString().Trim(); var optiond = row["选项D"].ToString().Trim(); var optione = row["选项E"].ToString().Trim(); var optionf = row["选项F"].ToString().Trim(); var optiong = row["选项G"].ToString().Trim(); var optionh = row["选项H"].ToString().Trim(); var optioni = row["选项I"].ToString().Trim(); var optionj = row["选项J"].ToString().Trim(); if (!string.IsNullOrEmpty(optiona)) { list_items.Add(optiona); if (!string.IsNullOrEmpty(optionb)) { list_items.Add(optionb); if (!string.IsNullOrEmpty(optionc)) { list_items.Add(optionc); if (!string.IsNullOrEmpty(optiond)) { list_items.Add(optiond); if (!string.IsNullOrEmpty(optione)) { list_items.Add(optione); if (!string.IsNullOrEmpty(optionf)) { list_items.Add(optionf); if (!string.IsNullOrEmpty(optiong)) { list_items.Add(optiong); if (!string.IsNullOrEmpty(optionh)) { list_items.Add(optionh); if (!string.IsNullOrEmpty(optioni)) { list_items.Add(optioni); if (!string.IsNullOrEmpty(optionj)) { list_items.Add(optionj); } } } } } } } } } } var total_count = list_items.Count; var right_count = getAnswerCount(answer); if (kind == "单选题" ) { if (total_count < 2) { msg = row_dsc + "单选题数量:" + total_count + ",至少两个选项,请检查上传文件"; return false; } if (right_count != 1) { msg = row_dsc + "单选题正确选项数量:" + right_count + ",不等1,请检查上传文件"; return false; } } if (kind == "判断题") { if (total_count != 2) { msg = row_dsc + "判断题数量:" + total_count + ",只有两个选项,请检查上传文件"; return false; } if (right_count != 1) { msg = row_dsc + "判断题正确选项数量:" + right_count + ",不等1,请检查上传文件"; return false; } } if (kind == "多选题" ) { if (total_count < 2) { msg = row_dsc + "多选题数量:" + total_count + ",至少两个选项,请检查上传文件"; return false; } if (right_count < 2) { msg = row_dsc + "多选题正确选项数量:" + right_count + ",至少2个选项答案,请检查上传文件"; return false; } } var obj = new theory_base_add(); obj.question = question; obj.kind = kind; obj.target = target; obj.answer = answer; obj.Items.AddRange(list_items); list_base.Add(obj); #endregion } #endregion List list_add = new List(); List list_add_items = new List(); var user = DataService.BLL.admin_user.load_login(); Dictionary dic = new Dictionary(); string alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; var length = alphabet.Length; var now = DateTime.Now; for (int i = 0; i < 26; i++) { dic.Add(i, alphabet.Substring(i, 1)); } for (int i = 0; i < list_base.Count; i++) { var obj = list_base[i]; var model = new DataService.Model.pro_theory_base(); var id = BasePage.GetId(); model.id = id; model.target = obj.target; model.kind = obj.kind; model.question = obj.question; model.create_time = DateTime.Now; model.create_by = user.user_id; model.answer = obj.answer; list_add.Add(model); int index = 1; var full_answer = "," + obj.answer; for (int sub = 0; sub < obj.Items.Count; sub++) { var item = new DataService.Model.pro_theory_base_item(); item.theory_base_id = id; item.id = BasePage.GetNextId(id, index++); item.no = (sub + 1); if (dic.ContainsKey(sub)) { item.item_letter = dic[sub]; } item.create_by = user.user_id; item.create_time = now; item.item = obj.Items[sub]; item.is_answer = 0; if (full_answer.IndexOf(","+item.item_letter)>=0) { item.is_answer = 1; } list_add_items.Add(item); } } var total = bll_base.BatchAddBaseWithItems(list_add, list_add_items); //var total = 1; msg = "上传成功"; if (total >0 ) { //msg += ",添加记录数:" + total; msg += ",添加记录数:" + list_add.Count; return true; } else { msg += ",数据添加失败!" ; return false; } } else { msg = "上传失败:表格内容为空"; return false; } } catch (Exception ex) { msg = "上传失败:" + ex.Message; return false; } } #region /// /// 选项题目---旧有 /// /// /// /// private bool ImportTheoryOption_old(string filePath, out string msg) { try { //知识领域 题目类型 题干 选项答案 List list_base = new List(); var table = ExcelToDataTable(filePath, "选项题", 0, true, false); if (null != table && table.Rows.Count >= 1) { var list_dep_excel = new List(); var dep = string.Empty; List list_login_name = new List(); #region ===检查上传的字段==== for (int i = 0; i < table.Rows.Count; i++) { var row_dsc = "行:" + (i + 1) + " "; var row = table.Rows[i]; #region var target = row["知识领域"].ToString(); if (string.IsNullOrWhiteSpace(target)) { msg = row_dsc + "存在知识领域为空的记录,请检查上传文件"; return false; } #endregion #region 检查题目类型 var kind = row["题目类型"].ToString(); if (string.IsNullOrWhiteSpace(kind)) { msg = row_dsc + "存在题目类型为空的记录,请检查上传文件"; return false; } if (kind != "单选题" && kind != "判断题" && kind != "多选题") { msg = row_dsc + "题目类型:" + kind + " 不在单选题、判断题、多选题中,请检查上传文件"; return false; } #endregion #region 题干 var question = row["题干"].ToString(); if (string.IsNullOrWhiteSpace(question)) { msg = row_dsc + "存在题干为空的记录,请检查上传文件"; return false; } #endregion #region 选项答案 var answer = row["选项答案"].ToString(); if (string.IsNullOrWhiteSpace(answer)) { msg = row_dsc + "存在选项答案为空的记录,请检查上传文件"; return false; } var yesCount = getAnswerYesCount(answer); if (kind == "单选题" && yesCount != 1) { msg = row_dsc + "单选题正确选项数量:" + yesCount + ",不等1,请检查上传文件"; return false; } if (kind == "判断题" && yesCount != 1) { msg = row_dsc + "判断题正确选项数量:" + yesCount + ",不等1,请检查上传文件"; return false; } if (kind == "多选题" && yesCount < 2) { msg = row_dsc + "多选题正确选项数量:" + yesCount + ",至少2个选项答案,请检查上传文件"; return false; } var obj = new DataService.Model.pro_theory_base(); obj.question = question; obj.kind = kind; obj.target = target; obj.answer = answer; list_base.Add(obj); #endregion } #endregion int insertCount = 0; int updateCount = 0; List list_Insert = new List(); List list_update = new List(); List list_add = new List(); var user = DataService.BLL.admin_user.load_login(); for (int i = 0; i < list_base.Count; i++) { var obj = list_base[i]; var model = new DataService.Model.pro_theory_base(); var id = BasePage.GetId(); model.id = id; model.target = obj.target; model.kind = obj.kind; model.question = obj.question; model.create_time = DateTime.Now; model.create_by = user.user_id; //model.answer = string.Join(",", list_answer); list_add.Add(model); } //var total = bll.BatchAdd_Update(list_Insert, list_update); var total = 1; msg = "上传成功"; if (total == (insertCount + updateCount)) { if (insertCount > 0) { msg += ",添加记录数:" + insertCount; } if (updateCount > 0) { msg += ",修改记录数:" + updateCount; } } return true; } else { msg = "上传失败:表格内容为空"; return false; } } catch (Exception ex) { msg = "上传失败:" + ex.Message; return false; } } #endregion public string GetString6() { var d = new Random(BitConverter.ToInt32(Guid.NewGuid().ToByteArray(), 0)); var array1 = new string[] { "a", "b", "d", "e", "f", "h", "m", "n", "t", "y" }; var array2 = new string[] { "2", "3", "4", "5", "6", "7", "8" }; var new_array1 = array1.OrderBy(s => Guid.NewGuid()).ToArray(); var new_array2 = array2.OrderBy(s => Guid.NewGuid()).ToArray(); var temp = new_array1[1] + new_array1[2] + new_array1[3] + new_array2[1] + new_array2[2] + new_array2[3]; return temp; } public static DataTable ExcelToDataTable(string filePath, string sheetName, int startRow, bool isFirstRowColumn, bool cshz) { DataTable dataTable = null; FileStream fs = null; DataColumn column = null; DataRow dataRow = null; IWorkbook workbook = null; ISheet sheet = null; IRow row = null; ICell cell = null; int cellCount = 0; // int startRow = 0; try { using (fs = File.OpenRead(filePath)) { // 2007版本 if (filePath.IndexOf(".xlsx") > 0) workbook = new XSSFWorkbook(fs); // 2003版本 else if (filePath.IndexOf(".xls") > 0) workbook = new HSSFWorkbook(fs); if (workbook != null) { if (sheetName != null) { sheet = workbook.GetSheet(sheetName); if (sheet == null) //如果没有找到指定的sheetName对应的sheet,则尝试获取第一个sheet { if (cshz) { return null; } sheet = workbook.GetSheetAt(0); } } else { sheet = workbook.GetSheetAt(0); } dataTable = new DataTable(); if (sheet != null) { int rowCount = sheet.LastRowNum;//总行数 if (rowCount > 0) { IRow firstRow = sheet.GetRow(startRow);//第一行 int rowindex = 0;                    //搜索空行,并跳过 while (firstRow == null && rowindex < rowCount) { rowindex++; firstRow = sheet.GetRow(rowindex); }                    //如果全为空行则返回null值 if (rowindex == rowCount) return null; cellCount = firstRow.LastCellNum;//列数 startRow = firstRow.RowNum; // 构建datatable的列 if (isFirstRowColumn) { //如果第一行是列名,则从第二行开始读取 for (int i = firstRow.FirstCellNum; i < cellCount; ++i) { cell = firstRow.GetCell(i); if (cell != null) { if (cell.ToString() != null) { column = new DataColumn(cell.ToString()); dataTable.Columns.Add(column); } } } startRow++; } else { for (int i = firstRow.FirstCellNum; i < cellCount; ++i) { column = new DataColumn("column" + (i + 1)); dataTable.Columns.Add(column); } } // 填充行 for (int i = startRow; i <= rowCount; ++i) { row = sheet.GetRow(i); if (row == null) continue; cellCount = row.LastCellNum; //全文行之间的列数不一样的话,继续添加列 if (cellCount > dataTable.Columns.Count) { for (int c = dataTable.Columns.Count; c < cellCount; c++) { column = new DataColumn("column" + (c + 1)); dataTable.Columns.Add(column); } } dataRow = dataTable.NewRow(); for (int j = row.FirstCellNum; j < cellCount; ++j) { cell = row.GetCell(j); if (cell == null) { dataRow[j] = ""; } else { // CellType(Unknown = -1, Numeric = 0, String = 1, Formula = 2, Blank = 3, Boolean = 4, Error = 5,) switch (cell.CellType) { case CellType.Blank: dataRow[j] = ""; break; case CellType.Numeric: short format = cell.CellStyle.DataFormat; // 对时间格式(2015.12.5、2015 / 12 / 5、2015 - 12 - 5等)的处理 if (format == 14 || format == 31 || format == 57 || format == 58) dataRow[j] = cell.DateCellValue; else dataRow[j] = cell.NumericCellValue; break; case CellType.String: dataRow[j] = cell.StringCellValue; break; } } } dataTable.Rows.Add(dataRow); } } } } } return dataTable; } catch (Exception ex) { if (fs != null) { fs.Close(); } return null; } } /// /// /// /// DataTable /// 当前 FileStream 对象将封装的文件的相对路径或绝对路径。 public static void DateTableToExcel(DataTable dt, string path) { MemoryStream stream = (MemoryStream)ExcelTools.RenderDataTableToExcel(dt); byte[] buffer = stream.ToArray(); using (FileStream fs = new FileStream(path, FileMode.Create, FileAccess.Write)) { fs.Write(buffer, 0, buffer.Length); fs.Flush(); } } public static byte[] DateTableToExcelBytes(DataTable dt) { MemoryStream stream = (MemoryStream)ExcelTools.RenderDataTableToExcel(dt); byte[] buffer = stream.ToArray(); return buffer; } /// /// /// /// DataTable /// 当前 FileStream 对象将封装的文件的相对路径或绝对路径。 public static void DateTableToExcelWithTitle(DataTable dt, DataTable source, string path, string title) { MemoryStream stream = (MemoryStream)ExcelTools.RenderDataTableToExcelWithTitle(dt, source, title); byte[] buffer = stream.ToArray(); using (FileStream fs = new FileStream(path, FileMode.Create, FileAccess.Write)) { fs.Write(buffer, 0, buffer.Length); fs.Flush(); } } } }