NPOI 1.1
2015-07-21 14:32
375 查看
1 .NPOI 版本2.1
2. NPOI 读取execl
3.导入数据(SqlBulkCopy)
示例代码:
2. NPOI 读取execl
3.导入数据(SqlBulkCopy)
示例代码:
public class ImportServerData { DataTable dt_ItemInfo = new DataTable(); public StringBuilder WaringMsg { get; set; } public string ParentDeptCode { get; set; } /// <summary> /// 初始化结构 /// </summary> public ImportServerData() { #region dt_ItemInfo dt_ItemInfo.Columns.Add("ID", typeof(string)); dt_ItemInfo.Columns.Add("NeedUnit", typeof(string)); dt_ItemInfo.Columns.Add("ItemType", typeof(string)); dt_ItemInfo.Columns.Add("Name", typeof(string)); dt_ItemInfo.Columns.Add("ItemInfo", typeof(string)); dt_ItemInfo.Columns.Add("Leader", typeof(string)); dt_ItemInfo.Columns.Add("SugDoUnit", typeof(string)); dt_ItemInfo.Columns.Add("State", typeof(int)); dt_ItemInfo.Columns.Add("LinkMan", typeof(string)); dt_ItemInfo.Columns.Add("IsDel", typeof(string)); dt_ItemInfo.Columns.Add("IsShow", typeof(string)); dt_ItemInfo.Columns.Add("AddTime", typeof(DateTime)); dt_ItemInfo.Columns.Add("SourceType", typeof(string)); dt_ItemInfo.Columns.Add("ParentDeptCode", typeof(string)); dt_ItemInfo.Columns.Add("OperateSpeed", typeof(string)); dt_ItemInfo.Columns.Add("Approval", typeof(string)); dt_ItemInfo.Columns.Add("Year", typeof(int)); dt_ItemInfo.Columns.Add("LinkTel", typeof(string)); dt_ItemInfo.Columns.Add("SugDoUnitMan", typeof(string)); dt_ItemInfo.Columns.Add("SugDoUnitTel", typeof(string)); dt_ItemInfo.Columns.Add("NodeState", typeof(string)); dt_ItemInfo.Columns.Add("Remark", typeof(string)); dt_ItemInfo.Columns.Add("SugDoUnitName", typeof(string)); dt_ItemInfo.Columns.Add("Source", typeof(string)); dt_ItemInfo.AcceptChanges(); #endregion } /// <summary> /// 将excel中的数据导入到DataTable中 /// </summary> /// <returns>返回的DataTable</returns> public bool ExcelToDataTable(string fileName) { ISheet sheet = null; FileStream fs; //事件类型 来源 string sql = "select Id,Name From dbo.Per_Dictionary where type in ('36','37')"; DataTable dtDictionary = Ruihua.Common.DapperHelper.Query(sql).Tables[0]; //需求部门 string sqlbaseinfo = "select Id,unitName Name from dbo.DS_DW_BaseIfo "; DataTable dtBaseInfo = Ruihua.Common.DapperHelper.Query(sqlbaseinfo).Tables[0]; //承办单位 string sqlSugDoUnit = "select ArchitectureId Id, Caption Name From dbo.Architecture"; DataTable dtSugDoUnit = Ruihua.Common.DapperHelper.Query(sqlSugDoUnit).Tables[0]; //领导 string sqlleader = "select Id,username Name From usr_user "; DataTable dtLeader = Ruihua.Common.DapperHelper.Query(sqlleader).Tables[0]; bool flag = false; string currindex = ""; try { fs = new FileStream(fileName, FileMode.Open, FileAccess.Read); HSSFWorkbook workbook = new HSSFWorkbook(fs); for (int i = 0; i < 3; i++) { sheet = workbook.GetSheetAt(i); System.Collections.IEnumerator rows = sheet.GetRowEnumerator(); string scouretext = (i == 0 ? "市外联办研提事项" : i == 1 ? "区领导走访征询事项" : "中央单位来函事项"); var scoureDr = dtDictionary.AsEnumerable().Where(w => w.Field<string>("Name") == scouretext).FirstOrDefault(); string scoureId = scoureDr != null ? scoureDr["Id"].ToString() : ""; int year = 0; int index = 0; while (rows.MoveNext()) { IRow row = (HSSFRow)rows.Current; currindex = GetValue<string>(row, 0, 0); if (currindex == "") continue; if (index == 0) { string name = GetValue<string>(row, index, 100); if (name != "") year = Convert.ToInt32(name.Substring(0, 4)); } string waringinfo = ""; if (index >= 2) { string guid = Guid.NewGuid().ToString(); #region 需求单位 1 string unitname = Regex.Replace(GetValue<string>(row, 1, 0), @"\s", ""); string needunitId = ""; bool isneedunit = false; for (int n = 0; n < dtBaseInfo.Rows.Count; n++) { bool falg = false; for (int j = 0; j < unitname.Length; j++) { string result = IsMatch(dtBaseInfo.Rows ["Name"].ToString(), unitname[j].ToString()); if (result == "") { break; } else { falg = true; } if (unitname.Length - 1 == j && falg) { //这里只需要一条数据 就跳出循环 isneedunit = true; needunitId = dtBaseInfo.Rows ["Id"].ToString(); break; } if (isneedunit) break; } } if (needunitId == "") { waringinfo += "[需求单位匹配失败]"; } #endregion #region 事项类型 //事项类型(有多个类型) 3 、 string itemtypename = GetValue<string>(row, 3, 0).Replace("\n", "").Replace("\r\n", ""); string[] itemNames = itemtypename != "" ? Regex.Replace( itemtypename, @"\s", "" ).Split('、') : null; string itemTypeId = ""; if (itemNames != null) { var itemTypeDr = dtDictionary.AsEnumerable().Where(w => itemNames.Contains(w.Field<string>("Name"))); if (itemTypeDr == null || itemTypeDr.Count() == 0) { waringinfo += "[事项类型匹配失败多个类型用、分割]"; } else { foreach (var item in itemTypeDr) { itemTypeId += item != null ? item["Id"].ToString() + "," : ""; } itemTypeId = itemTypeId.Substring(0, itemTypeId.Length - 1); } } else { waringinfo += "[事项类型匹配失败多个类型用、分割]"; } #endregion //承办单位 7 var itemSugDoUnit = dtSugDoUnit.AsEnumerable().Where(w => w.Field<string>("Name") == GetValue<string>(row, 7, 0)).FirstOrDefault(); string sugDoUnitId = ""; if (itemSugDoUnit != null) { sugDoUnitId = itemSugDoUnit["Id"].ToString(); } //else{ // waringinfo += "[承办单位匹配失败]"; //} string SugDoUnitName = GetValue<string>(row, 7, 100); if (SugDoUnitName == "" && sugDoUnitId == "") { waringinfo += "[承办单位不能为空]"; } //主管区领导 6 var itemLeader = dtLeader.AsEnumerable().Where(w => w.Field<string>("Name") == GetValue<string>(row, 6, 0)).FirstOrDefault(); string leaderId = ""; if (itemLeader != null) { leaderId = itemLeader["Id"].ToString(); } else { waringinfo += "[主管区领导匹配失败]"; } string ItemName = GetValue<string>(row, 2, 100); if (ItemName == "ERROROVERTOP") { waringinfo += "[事项名称字符超出]"; } string ItemInfo = GetValue<string>(row, 4, 4000); if (ItemInfo == "ERROROVERTOP") { waringinfo += "[需求事项字符超出]"; } int State = GetStateByName(GetValue<string>(row, 8, 15).Trim()); if (State == -1) { waringinfo += "[办理状态匹配失败]"; } string LinkMan = GetValue<string>(row, 10, 200); if (LinkMan == "ERROROVERTOP") { waringinfo += "[中央单位联系人字符超出]"; } string OperateSpeed = GetValue<string>(row, 9, 2000); if (OperateSpeed == "ERROROVERTOP") { waringinfo += "[办理结果(进展情况)字符超出]"; } //string cc = MergedRegionValue(sheet, index,5); string Approval = MergedRegionValue(sheet, index, 5); if (Approval == "ERROROVERTOP") { waringinfo += "[领导批示字符超出]"; } string LinkTel = GetValue<string>(row, 11, 50); if (LinkTel == "ERROROVERTOP") { waringinfo += "[联系电话字符超出]"; } string SugDoUnitMan = GetValue<string>(row, 12, 200); if (SugDoUnitMan == "ERROROVERTOP") { waringinfo += "[承办单位联系人字符超出]"; } string SugDoUnitTel = GetValue<string>(row, 13, 50); if (SugDoUnitTel == "ERROROVERTOP") { waringinfo += "[联系电话字符超出]"; } string Remark = GetValue<string>(row, 14, 500); if (Remark == "ERROROVERTOP") { waringinfo += "[备注字符超出]"; } if (waringinfo != "") { string sheetname = (i == 0 ? "研提事项" : i == 1 ? "走访(来访)事项" : "来函事项"); if (WaringMsg == null) { WaringMsg = new StringBuilder(); } WaringMsg.Append(sheetname + "提示信息:序号[" + currindex + "]" + waringinfo + "\r\n"); } if (waringinfo == "") { //处理ItemInfo dt_ItemInfo.Rows.Add(guid, needunitId, itemTypeId, ItemName, ItemInfo, leaderId, sugDoUnitId, State, LinkMan, 0, 1, DateTime.Now, 1, ParentDeptCode, OperateSpeed, Approval, year, LinkTel, SugDoUnitMan, SugDoUnitTel, GetNodeStateByName(GetValue<string>(row, 9, 200)), Remark, SugDoUnitName, scoureId ); } } index++; } } dt_ItemInfo.AcceptChanges(); flag = true; } catch (Exception ex) { flag = false; Ruihua.Log4Net.LogHelper.SaveLogError(new Log4Net.LogMessage { Info = "Exception: " + currindex + "序号" + ex.Message.ToString(), UserID = "" }); } return flag; } private string MergedRegionValue(ISheet sheet, int rowNum, int colNum) { for (int i = 0; i < sheet.NumMergedRegions; i++) { CellRangeAddress range = sheet.GetMergedRegion(i); sheet.IsMergedRegion(range); if (range != null) { if (range.FirstRow <= rowNum && range.LastRow >= rowNum && range.FirstColumn <= colNum && range.LastColumn >= colNum) { return sheet.GetRow(range.FirstRow).GetCell(range.FirstColumn).StringCellValue.ToString(); } } } return ""; } private string GetValue<T>(IRow row, int index, int strlength) { string result = ""; if (typeof(string) == typeof(T)) { ICell cell = row.GetCell(index); if (cell != null) { if (cell.IsMergedCell) { result = cell.StringCellValue.ToString(); } else if (strlength == 0) { result = cell.ToString(); } else if (strlength > 0 && cell.ToString().Length < strlength) { result = cell.ToString(); } else { result = "ERROROVERTOP"; } } } else if (typeof(int) == typeof(T)) { ICell cell = row.GetCell(index); if (cell != null) { if (IsInteger(cell.ToString())) { result = cell.ToString(); } } } else if (typeof(DateTime) == typeof(T)) { ICell cell = row.GetCell(index); if (cell != null) { if (IsDatetTime(cell.ToString())) { result = cell.ToString(); } } } return result; } private int GetStateByName(string name) { int result = -1; switch (name) { case "未办结": case "以主动对接,建立工作关系": case "召开专项协调会": case "组织现场踏勘": case "正在处理": case "正在商有关单位": result = 0; break; case "已办结": case "已办结并反馈": result = 1; break; case "现行政策不能办理": result = 2; break; } return result; } private string GetNodeStateByName(string name) { string NodeState = ""; string[] nodename = name.Split(','); for (int i = 0; i < nodename.Length; i++) { switch (nodename[i].Trim()) { case "以主动对接,建立工作关系": NodeState += "0,"; break; case "召开专项协调会": NodeState += "1,"; break; case "组织现场踏勘": NodeState += "2,"; break; case "正在处理": NodeState += "3,"; break; case "正在商有关单位": NodeState += "4,"; break; case "已办结": NodeState += "5,"; break; case "已办结并反馈": NodeState += "6,"; break; } } return NodeState.Length > 1 ? NodeState.Substring(0, NodeState.Length - 1) : NodeState; } /// /// </summary> /// <param name="connectionString">目标连接字符</param> /// <param name="TableName">目标表</param> /// <param name="dt">源数据</param> private void SqlBulkCopyByDatatable(string connectionString, string TableName, DataTable dt) { using (SqlConnection conn = new SqlConnection(connectionString)) { using (SqlBulkCopy sqlbulkcopy = new SqlBulkCopy(connectionString, SqlBulkCopyOptions.UseInternalTransaction)) { try { sqlbulkcopy.DestinationTableName = TableName; sqlbulkcopy.BulkCopyTimeout = 120; sqlbulkcopy.BatchSize = 600; for (int i = 0; i < dt.Columns.Count; i++) { sqlbulkcopy.ColumnMappings.Add(dt.Columns[i].ColumnName, dt.Columns[i].ColumnName); } sqlbulkcopy.WriteToServer(dt); } catch (System.Exception ex) { throw ex; } } } } /// <summary> /// 验证整数 /// </summary> /// <param name="input">待验证的字符串</param> /// <returns>是否匹配</returns> public static bool IsInteger(string input) { bool foundMatch = false; try { foundMatch = Regex.IsMatch(input, @"-?\d+$"); } catch (ArgumentException ex) { // Syntax error in the regular expression } return foundMatch; } /// <summary> /// 验证日期 yyyy-MM-dd /// </summary> /// <param name="input"></param> /// <returns></returns> public static bool IsDatetTime(string input) { bool foundMatch = false; try { foundMatch = Regex.IsMatch(input, "(19|20)[0-9]{2}[- /.](0?[1-9]|1[012])[- /.](0?[1-9]|[12][0-9]|3[01])"); } catch (ArgumentException ex) { // Syntax error in the regular expression } return foundMatch; } public string ImportData(string fileName) { try { ExcelToDataTable(fileName); int count = dt_ItemInfo.Rows.Count; if (count > 0) { SqlBulkCopyByDatatable(DapperHelper.connectionString, "DS_FW_ItemInfo", dt_ItemInfo); return "成功导入:" + count.ToString() + "条数据!\r\n" + (WaringMsg != null ? WaringMsg.ToString() : ""); } else { return WaringMsg != null ? WaringMsg.ToString() : "NO"; } } catch (Exception) { } return WaringMsg != null ? WaringMsg.ToString() : "NO"; } public string IsMatch(string inputstr, string regexstr) { if (Regex.IsMatch(inputstr, regexstr)) { return inputstr; } return ""; } }
相关文章推荐
- HTML学习笔记——CSS初涉
- lamp编译安装--在一台机子上实验
- spring下载地址
- PAT (Basic Level) Practise (中文)1023. 组个最小数 (20)C语言
- Android管理篇
- 关于 overridePendingTransition()使用
- X32和X64平台下不同数据类型对应的字节数
- Longest Common Prefix
- 组合模式
- ExtJS学习-------Ext正确Dom操作:Ext.get Ext.fly Ext.getDom
- android == 和 equals
- 文件上传1
- keytool 生成证书
- PAT (Basic Level) Practise (中文)1021. 个位数统计 (15) C语言
- Intent的简介以及属性的详解
- Activity用法详解
- 胡翌霖:比特币多重签名技术的应用场景
- mysql定期备份脚本
- 浅析CSS——元素重叠及position定位的z-index顺序
- paip.自适应网页设计 同 响应 与设计的原理的差and实践总结