您的位置:首页 > 其它

NPOI 1.1

2015-07-21 14:32 375 查看
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[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 "";
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: