巧用XML配置校验导入Excel的列数据格式
<?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的列数据格式的更多相关文章
- java基于xml配置的通用excel单表数据导入组件(四、DAO主处理类)
package XXXXX.manage.importexcel; import java.beans.IntrospectionException; import java.io.BufferedR ...
- java基于xml配置的通用excel单表数据导入组件(一、实际应用过程)
主要应用技术:poi + betwixt + reflect 一.实际应用过程 1.创建与目标表结构一样,表名为‘{目标表名}_import’的临时表: 2.创建用于存储导入问题数据的表:t_impo ...
- java基于xml配置的通用excel单表数据导入组件(二、xml配置文件解析加载)
1.BN_ImportExcel.java 对应xml主节点属性 package XXXXX.manage.importexcel; import java.io.Serializable; impo ...
- java基于xml配置的通用excel单表数据导入组件(五、Action处理类)
package xxxxxx.manage.importexcel; import java.io.File; import java.util.HashMap; import java.util.M ...
- java基于xml配置的通用excel单表数据导入组件(三、负责数据转换处理的类)
package xxxxxxx.manage.importexcel; import java.util.Map; import java.util.logging.Logger; import xx ...
- 关于解决读取导入excel某列数字过长的科学计数法格式
因为 客户 需要导入 虚拟商品的卡号 excel已经是文本形式的单元格格式了 但是 到后台 java代码去获取的时候 仍然是 科学计数法格式 先找到以下资料做参考:http://love-66521. ...
- C#导出和导入Excel模板功能
引用 Aspose.Cells; 基于WinForm 导入 private void btn_excel_input_Click(object sender, EventArgs e) { try ...
- 从零开始实现放置游戏(六)——实现挂机战斗(4)导入Excel数值配置
前面我们已经实现了在后台管理系统中,对配置数据的增删查改.但每次添加只能添加一条数据,实际生产中,大量数据通过手工一条一条添加不太现实.本章我们就实现通过Excel导入配置数据的功能.这里我们还是以地 ...
- JavaScript日历控件开发 C# 读取 appconfig文件配置数据库连接字符串,和配置文件 List<T>.ForEach 调用异步方法的意外 ef 增加或者更新的习惯思维 asp.net core导入excel 一个二级联动
JavaScript日历控件开发 概述 在开篇之前,先附上日历的代码地址和演示地址,代码是本文要分析的代码,演示效果是本文要实现的效果代码地址:https://github.com/aspwebc ...
随机推荐
- monkey初接触
第一次听说monkey,根本不知道是什么东西,脑海里就一个印象,很厉害的自动化测试工具,可是体验了一下,似乎不是那么回事... 一.Monkey 是什么? monkey就是SDK中附带的一个工具. 二 ...
- rubber
rubber - 必应词典 美['rʌbər]英['rʌbə(r)] n.橡胶:橡皮:黑板擦 v.涂橡胶于…:〈美俚〉同“rubberneck” 网络橡皮擦:胶皮:橡皮轮胎 变形复数:rubbers:
- AndroidDriver原理初步--Android自动化测试学习历程
章节:自动化基础篇——AndroidDriver原理初步(第六讲) 主要讲解内容及笔记: 一.AndroidDriver核心原理 对上图的解析: PC端的端口通过adb,将android版的Remot ...
- [leetcode]228. Summary Ranges区间统计
Given a sorted integer array without duplicates, return the summary of its ranges. Example 1: Input: ...
- ubuntu 操作系统的目录结构
Ubuntu 系统的目录众多,并且 Ubuntu 系统是不分 C 盘.D 盘等的,但是所有的目录都是在/目录下面的. 一./:根目录,是所有目录的绝对路径的起始点,Ubuntu 中的所有文件和目录都在 ...
- nginx accept() failed (24: Too many open files)
nginx服务器出现如下信息: [crit] 17221#0: accept4() failed (24: Too many open files) [crit] 17221#0: accept4() ...
- discuz回贴通知插件实现-页面嵌入点(钩子)
1.如何保证主题被回复时业务代码被执行. 2.获得主题,主题发布者,贴子等信息. 3.discuz发送email邮件. discuz使用嵌入点(钩子)来处理代码的执行时机. 当用户开启插件开发者模 ...
- git 一些提交等用法
从服务器上下载项目到em_cesium:git clone ssh://kjwang@code-bj.clustertech.com:29418/em-satdata em_cesium 在本地新建一 ...
- 详解html中的元老级元素:“table”
table标签历史悠久,在互联网出现的早期,web网页的排版主要是靠table表格,对web网页做出了不可磨灭的贡献,直到后来层叠样式表:CSS的发展完善,再配合空元素DIV,才有了今天绚丽多彩的网页 ...
- BZOJ1106[POI2007]立方体大作战tet - 树状数组
描述 一个叫做立方体大作战的游戏风靡整个Byteotia.这个游戏的规则是相当复杂的,所以我们只介绍他的简单规则:给定玩家一个有2n个元素的栈,元素一个叠一个地放置.这些元素拥有n个不同的编号,每个编 ...