<?xml version="1.0"?>
<ColumnsSeting xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <Columns>
<Column>
<ColumnName>custCode</ColumnName>
<ColumnChinese>客户编码</ColumnChinese>
<RegContent></RegContent>
<DataType></DataType> </Column>
<Column>
<ColumnName>custName</ColumnName>
<ColumnChinese>客户名称</ColumnChinese>
<RegContent></RegContent>
<DataType></DataType> </Column>
<Column>
<ColumnName>materialCode</ColumnName>
<ColumnChinese>物料编码</ColumnChinese>
<RegContent></RegContent>
<DataType></DataType> </Column>
<Column>
<ColumnName>materialName</ColumnName>
<ColumnChinese>物料名称</ColumnChinese>
<RegContent></RegContent>
<DataType></DataType> </Column>
<Column>
<ColumnName>num</ColumnName>
<ColumnChinese>数量</ColumnChinese>
<RegContent>^(-)?(([1-9]{1}\\d*)|([0]{1}))(\\.(\\d){0,})?$</RegContent>
<DataType>数字</DataType> </Column>
<Column>
<ColumnName>unit</ColumnName>
<ColumnChinese>单位</ColumnChinese>
<RegContent></RegContent>
<DataType></DataType> </Column>
<Column>
<ColumnName>money</ColumnName>
<ColumnChinese>金额</ColumnChinese>
<RegContent>^(-)?(([1-9]{1}\\d*)|([0]{1}))(\\.(\\d){0,})?$</RegContent>
<DataType>数字</DataType> </Column>
</Columns>
</ColumnsSeting>

用于匹配Excel格式的XML配置内容

        /// <summary>
/// 根据xml字典逐个单元格比较验证DataTable数据格式
/// </summary>
/// <param name="dt">Excel表格转化为的DataTable</param>
/// <param name="xmlpath">列名和列标题、格式化正则、格式类型xml配置文件路径</param>
public static void CompareColumnFormat(DataTable dt, string xmlpath)
{
if (dt == null) return;
XmlDocument xmldoc = XmlUtility.GetXmlDocument(xmlpath);
XmlNode root = xmldoc.SelectSingleNode("ColumnsSeting");
XmlNode subNode = root.SelectSingleNode("Columns");
XmlNodeList subNodeList = subNode.ChildNodes;
for (int i = ; i < subNodeList.Count; i++)
{
string colname = XmlUtility.GetElement(subNodeList[i], "ColumnName");
string colchinese = XmlUtility.GetElement(subNodeList[i], "ColumnChinese");
string regcontent = XmlUtility.GetElement(subNodeList[i], "RegContent");
string coldatatype = XmlUtility.GetElement(subNodeList[i], "DataType"); for (int j = ; j < dt.Rows.Count; j++)
{
if (dt.Columns[i].ColumnName.Equals(colname))
{
string curval = Convert.ToString(dt.Rows[j][i]);
Regex reg = new Regex(regcontent);
if (!reg.IsMatch(curval))
{
throw new Exception(string.Format("当前表格中【{0}】的第【{1}】行数据【{2}】的格式不正确,应为【{3}】,\n请修正后继续。",
colchinese,
j + , curval, coldatatype));
}
}
}
}
}

巧用XML配置校验导入Excel的列数据格式的更多相关文章

  1. java基于xml配置的通用excel单表数据导入组件(四、DAO主处理类)

    package XXXXX.manage.importexcel; import java.beans.IntrospectionException; import java.io.BufferedR ...

  2. java基于xml配置的通用excel单表数据导入组件(一、实际应用过程)

    主要应用技术:poi + betwixt + reflect 一.实际应用过程 1.创建与目标表结构一样,表名为‘{目标表名}_import’的临时表: 2.创建用于存储导入问题数据的表:t_impo ...

  3. java基于xml配置的通用excel单表数据导入组件(二、xml配置文件解析加载)

    1.BN_ImportExcel.java 对应xml主节点属性 package XXXXX.manage.importexcel; import java.io.Serializable; impo ...

  4. java基于xml配置的通用excel单表数据导入组件(五、Action处理类)

    package xxxxxx.manage.importexcel; import java.io.File; import java.util.HashMap; import java.util.M ...

  5. java基于xml配置的通用excel单表数据导入组件(三、负责数据转换处理的类)

    package xxxxxxx.manage.importexcel; import java.util.Map; import java.util.logging.Logger; import xx ...

  6. 关于解决读取导入excel某列数字过长的科学计数法格式

    因为 客户 需要导入 虚拟商品的卡号 excel已经是文本形式的单元格格式了 但是 到后台 java代码去获取的时候 仍然是 科学计数法格式 先找到以下资料做参考:http://love-66521. ...

  7. C#导出和导入Excel模板功能

    引用  Aspose.Cells; 基于WinForm 导入 private void btn_excel_input_Click(object sender, EventArgs e) { try ...

  8. 从零开始实现放置游戏(六)——实现挂机战斗(4)导入Excel数值配置

    前面我们已经实现了在后台管理系统中,对配置数据的增删查改.但每次添加只能添加一条数据,实际生产中,大量数据通过手工一条一条添加不太现实.本章我们就实现通过Excel导入配置数据的功能.这里我们还是以地 ...

  9. JavaScript日历控件开发 C# 读取 appconfig文件配置数据库连接字符串,和配置文件 List<T>.ForEach 调用异步方法的意外 ef 增加或者更新的习惯思维 asp.net core导入excel 一个二级联动

    JavaScript日历控件开发   概述 在开篇之前,先附上日历的代码地址和演示地址,代码是本文要分析的代码,演示效果是本文要实现的效果代码地址:https://github.com/aspwebc ...

随机推荐

  1. GridView自定义分页样式(上一页,下一页,到第几页)

    今天要为网站做一个文章列表,发现GridView的分页样式很难看,于是结合网上的例子,自己做了一个.不是很美观,不过还是很实用的,先看下效果吧,如图(1). 图(1)GridView分页效果 自定义G ...

  2. runloop - 介绍

    1. 简介 没有的话 有的话

  3. No handlers could be found for logger “apscheduler.executors.default”?

    Call logging.basicConfig() before instantiating the scheduler. That lets you see what the real probl ...

  4. Oracle LOOP循环控制语句

    在PL/SQL中可以使用LOOP语句对数据进行循环处理,利用该语句可以循环执行指定的语句序列.常用的LOOP循环语句包含3种形式:基本的LOOP.WHILE...LOOP和FOR...LOOP. LO ...

  5. DNA甲基化研究概述

    DNA甲基化研究概述 生信技能树 已关注 2018.01.23 11:43 字数 993 阅读 183评论 0喜欢 1 DNA甲基化(DNA methylation)是最早被研究的重要表观遗传修饰之一 ...

  6. UI设计初学者如何避免走弯路?

    对于初学UI设计的人而言,可能对UI具体是做什么,或者自己是否能顺利转行胜任这样的岗位存在一定的顾虑,今天我们就来重点说说UI是做什么的,以及想学UI到底要如何避免走弯路,快速的学成. 问题一:UI设 ...

  7. laravel创建控制器

    一.创建 php artisan make:controller Admin/IndexController 二.目录 app/Http/Controllers/ 控制器存储目录 [ C控制器 ]

  8. MySql 几个小技巧

    分页查看: 在 mysql 环境下,执行命令: pager more,之后的结果分屏了. 简明扼要地查看表结构: describe table_name

  9. Vue2.0 keep-alive 组件的最佳实践

    1.基本用法 vue2.0提供了一个keep-alive组件用来缓存组件,避免多次加载相应的组件,减少性能消耗 <keep-alive> <component> <!-- ...

  10. Telnet 安装

    Telnet 安装 一.Telnet 安装 (1) 登录目标主机检测 telnet 服务是否正常 [root@localhost ~]# telnet localhost -bash: telnet: ...