1 .NPOI 版本2.1

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[]; //需求部门
string sqlbaseinfo = "select Id,unitName Name from dbo.DS_DW_BaseIfo ";
DataTable dtBaseInfo = Ruihua.Common.DapperHelper.Query(sqlbaseinfo).Tables[]; //承办单位
string sqlSugDoUnit = "select ArchitectureId Id, Caption Name From dbo.Architecture";
DataTable dtSugDoUnit = Ruihua.Common.DapperHelper.Query(sqlSugDoUnit).Tables[]; //领导
string sqlleader = "select Id,username Name From usr_user ";
DataTable dtLeader = Ruihua.Common.DapperHelper.Query(sqlleader).Tables[]; bool flag = false;
string currindex = "";
try
{
fs = new FileStream(fileName, FileMode.Open, FileAccess.Read);
HSSFWorkbook workbook = new HSSFWorkbook(fs); for (int i = ; i < ; i++)
{
sheet = workbook.GetSheetAt(i); System.Collections.IEnumerator rows = sheet.GetRowEnumerator();
string scouretext = (i == ? "市外联办研提事项" : i == ? "区领导走访征询事项" : "中央单位来函事项");
var scoureDr = dtDictionary.AsEnumerable().Where(w => w.Field<string>("Name") == scouretext).FirstOrDefault();
string scoureId = scoureDr != null ? scoureDr["Id"].ToString() : "";
int year = ;
int index = ;
while (rows.MoveNext())
{
IRow row = (HSSFRow)rows.Current;
currindex = GetValue<string>(row, , );
if (currindex == "") continue;
if (index == )
{
string name = GetValue<string>(row, index, );
if (name != "") year = Convert.ToInt32(name.Substring(, ));
}
string waringinfo = "";
if (index >= )
{ string guid = Guid.NewGuid().ToString(); #region 需求单位 1 string unitname = Regex.Replace(GetValue<string>(row, , ), @"\s", ""); string needunitId = "";
bool isneedunit = false;
for (int n = ; n < dtBaseInfo.Rows.Count; n++)
{
bool falg = false;
for (int j = ; j < unitname.Length; j++)
{
string result = IsMatch(dtBaseInfo.Rows[n]["Name"].ToString(), unitname[j].ToString());
if (result == "")
{
break;
}
else
{
falg = true;
}
if (unitname.Length - == j && falg)
{
//这里只需要一条数据 就跳出循环
isneedunit = true;
needunitId = dtBaseInfo.Rows[n]["Id"].ToString();
break; }
if (isneedunit) break;
} } if (needunitId == "")
{
waringinfo += "[需求单位匹配失败]";
}
#endregion #region 事项类型
//事项类型(有多个类型) 3 、 string itemtypename = GetValue<string>(row, , ).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() == )
{
waringinfo += "[事项类型匹配失败多个类型用、分割]";
}
else
{
foreach (var item in itemTypeDr)
{
itemTypeId += item != null ? item["Id"].ToString() + "," : "";
}
itemTypeId = itemTypeId.Substring(, itemTypeId.Length - );
}
}
else
{
waringinfo += "[事项类型匹配失败多个类型用、分割]";
}
#endregion //承办单位 7
var itemSugDoUnit = dtSugDoUnit.AsEnumerable().Where(w => w.Field<string>("Name") == GetValue<string>(row, , )).FirstOrDefault();
string sugDoUnitId = "";
if (itemSugDoUnit != null)
{
sugDoUnitId = itemSugDoUnit["Id"].ToString();
}
//else{
// waringinfo += "[承办单位匹配失败]";
//}
string SugDoUnitName = GetValue<string>(row, , );
if (SugDoUnitName == "" && sugDoUnitId == "")
{
waringinfo += "[承办单位不能为空]";
}
//主管区领导 6
var itemLeader = dtLeader.AsEnumerable().Where(w => w.Field<string>("Name") == GetValue<string>(row, , )).FirstOrDefault();
string leaderId = "";
if (itemLeader != null)
{
leaderId = itemLeader["Id"].ToString();
}
else
{
waringinfo += "[主管区领导匹配失败]";
}
string ItemName = GetValue<string>(row, , );
if (ItemName == "ERROROVERTOP")
{
waringinfo += "[事项名称字符超出]";
}
string ItemInfo = GetValue<string>(row, , );
if (ItemInfo == "ERROROVERTOP")
{
waringinfo += "[需求事项字符超出]";
}
int State = GetStateByName(GetValue<string>(row, , ).Trim());
if (State == -)
{
waringinfo += "[办理状态匹配失败]";
}
string LinkMan = GetValue<string>(row, , );
if (LinkMan == "ERROROVERTOP")
{
waringinfo += "[中央单位联系人字符超出]";
}
string OperateSpeed = GetValue<string>(row, , );
if (OperateSpeed == "ERROROVERTOP")
{
waringinfo += "[办理结果(进展情况)字符超出]";
}
//string cc = MergedRegionValue(sheet, index,5);
string Approval = MergedRegionValue(sheet, index, );
if (Approval == "ERROROVERTOP")
{
waringinfo += "[领导批示字符超出]";
}
string LinkTel = GetValue<string>(row, , );
if (LinkTel == "ERROROVERTOP")
{
waringinfo += "[联系电话字符超出]";
}
string SugDoUnitMan = GetValue<string>(row, , );
if (SugDoUnitMan == "ERROROVERTOP")
{
waringinfo += "[承办单位联系人字符超出]";
}
string SugDoUnitTel = GetValue<string>(row, , );
if (SugDoUnitTel == "ERROROVERTOP")
{
waringinfo += "[联系电话字符超出]";
}
string Remark = GetValue<string>(row, , );
if (Remark == "ERROROVERTOP")
{
waringinfo += "[备注字符超出]";
}
if (waringinfo != "")
{
string sheetname = (i == ? "研提事项" : i == ? "走访(来访)事项" : "来函事项");
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,
, ,
DateTime.Now,
, ParentDeptCode,
OperateSpeed,
Approval, year,
LinkTel,
SugDoUnitMan,
SugDoUnitTel,
GetNodeStateByName(GetValue<string>(row, , )),
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 = ; 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 == )
{
result = cell.ToString();
}
else if (strlength > && 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 = -;
switch (name)
{
case "未办结":
case "以主动对接,建立工作关系":
case "召开专项协调会":
case "组织现场踏勘":
case "正在处理":
case "正在商有关单位":
result = ;
break;
case "已办结":
case "已办结并反馈":
result = ;
break;
case "现行政策不能办理":
result = ;
break;
}
return result;
} private string GetNodeStateByName(string name)
{
string NodeState = ""; string[] nodename = name.Split(',');
for (int i = ; 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 > ? NodeState.Substring(, NodeState.Length - ) : 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 = ;
sqlbulkcopy.BatchSize = ;
for (int i = ; 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 > )
{
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 "";
}
}

NPOI 1.1的更多相关文章

  1. .NET Core 首例 Office 开源跨平台组件(NPOI Core)

    前言 最近项目中,需要使用到 Excel 导出,找了一圈发现没有适用于 .NET Core的,不依赖Office和操作系统限制的 Office 组件,于是萌生了把 NPOI 适配并移植到 .NET C ...

  2. 免费高效实用的.NET操作Excel组件NPOI(.NET组件介绍之六)

    很多的软件项目几乎都包含着对文档的操作,前面已经介绍过两款操作文档的组件,现在介绍一款文档操作的组件NPOI. NPOI可以生成没有安装在您的服务器上的Microsoft Office套件的Excel ...

  3. C#通过NPOI操作Excel

    参考页面: http://www.yuanjiaocheng.net/webapi/create-crud-api-1-post.html http://www.yuanjiaocheng.net/w ...

  4. 基于NPOI的Excel数据导入

    从Excel导入数据最令人头疼的是数据格式的兼容性,特别是日期类型的兼容性.为了能够无脑导入日期,折腾了一天的NPOI.在经过测试确实可以导入任意格式的合法日期后,写下这篇小文,与大家共享.完整代码请 ...

  5. NPOI导出Excel

    using System;using System.Collections.Generic;using System.Linq;using System.Text;#region NPOIusing ...

  6. 通过NPOI操作Excel

    最近在做的一个项目中需要生成Excel,通过学习使用NPOI实现了相关需求,写了一个简便操作的类,记录如下: public class NPOIHelperForExcel { #region exc ...

  7. .Net开源Excel、Word操作组件-NPOI、EPPlus、DocX

    一.NPOI 简介: NPOI is the .NET version of POI Java project. With NPOI, you can read/write Office 2003/2 ...

  8. 转载 NPOI Excel 单元格背景颜色对照表

    NPOI Excel 单元格颜色对照表,在引用了 NPOI.dll 后可通过 ICellStyle 接口的 FillForegroundColor 属性实现 Excel 单元格的背景色设置,FillP ...

  9. 转载 NPOI.dll 用法。单元格,样式,字体,颜色,行高,宽度。读写excel

    我用的版本是1.25的.每个版本用法有一点不同 using System; using System.Collections.Generic; using System.ComponentModel; ...

  10. NPOI操作EXCEL(六)——矩阵类表头EXCEL模板的解析

    哈哈~~~很高兴还活着.总算加班加点的把最后一类EXCEL模板的解析做完了... 前面几篇文章介绍了博主最近项目中对于复杂excel表头的解析,写得不好,感谢园友们的支持~~~ 今天再简单讲诉一下另一 ...

随机推荐

  1. Node中的模块系统

    加载require var 自定义变量名称 = require('模块') 两个作用: 执行被加载模块的代码 得到被加载模块中的exports导出接口对象 导出exports node中是模块作用域, ...

  2. Entity Framework 学习记录

    msdn  :https://msdn.microsoft.com/zh-cn/data/ee712907.aspx code first 入门: https://msdn.microsoft.com ...

  3. 解决Spring Boot Configuration Annotation Processor not found in classpath

    问题截图: 解决方式: 在pom.xml文件中添加这些依赖 <dependency> <groupId>org.springframework.boot</groupId ...

  4. 三剑客之一------>awk

    awk :  一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大.简单来说awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再 ...

  5. 基于知识图谱的APT组织追踪治理

    高级持续性威胁(APT)正日益成为针对政府和企业重要资产的不可忽视的网络空间重大威胁.由于APT攻击往往具有明确的攻击意图,并且其攻击手段具备极高的隐蔽性和潜伏性,传统的网络检测手段通常无法有效对其进 ...

  6. iOS开发CoreData的多表关联

    1.多表关联 多表关联,对SQL 数据库的操作,在一张表的数据中可以引用另外一张表里的数据.通过 Entity 实体中的 Relationships 来实现,比起传统的 SQL 数据库来,更加简单. ...

  7. 转:Linux 文件IO理解

    源地址http://blog.csdn.net/lonelyrains/article/details/6604851 linux文件IO操作有两套大类的操作方式:不带缓存的文件IO操作,带缓存的文件 ...

  8. mysql内建命令快速手记 — 让手指跟上思考的速度(一)

    在微信公众号上看到一篇文章说的很好,意思是说,大牛在尝试各种方案的时候可能并没有超神的预测和筛选能力 只是你通常测试一种情况时,大神已经测试了好几种方案了,讲的是"为什么大多数程序员不喜欢写 ...

  9. Synchronized理解及用法

    加锁: 1.同步实例方法,锁是当前实例对象 2.同步类方法,锁的是当前类对象 3.同步代码块,锁是括号里面的对象 原理: JVM内置锁通过synchronized使用,通过内部对象Monitor(监视 ...

  10. Pandas对于CSV的简单操作

    Pandas对于CSV的简单操作 最近在研究pandas对于csv文件的读取以及一些操作,网上的信息比较乱,写篇博客记录一下,毕竟自己写的才是最适合自己的用法. 首先我们应该都知道,pandas是一个 ...