第1个回答 2010-12-23
太难了 ,你可以先做身份证输入验证,这样就不会那样麻烦了,确保了输入的身份证号都是对的,否则通不过,通过验证后你要导入导出都很轻松
JS验证代码无偿给你
function checkIdcard(idcard){
var area=
var idcard,Y,JYM;
var S,M;
var idcard_array = new Array();
idcard_array = idcard.split("");
//地区检验
if(area[parseInt(idcard.substr(0,2))]==null) return 4;
//身份号码位数及格式检验
switch(idcard.length){
case 15:
if ( (parseInt(idcard.substr(6,2))+1900) % 4 == 0 || ((parseInt(idcard.substr(6,2))+1900) % 100 == 0 && (parseInt(idcard.substr(6,2))+1900) % 4 == 0 )){
ereg=/^[1-9][0-9][0-9]((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|[1-2][0-9]))[0-9]$/;//测试出生日期的合法性
} else {
ereg=/^[1-9][0-9][0-9]((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|1[0-9]|2[0-8]))[0-9]$/;//测试出生日期的合法性
}
if(ereg.test(idcard)) return 0;
else return 2;
break;
case 18:
//18位身份号码检测
//出生日期的合法性检查
//闰年月日:((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|[1-2][0-9]))
//平年月日:((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|1[0-9]|2[0-8]))
if ( parseInt(idcard.substr(6,4)) % 4 == 0 || (parseInt(idcard.substr(6,4)) % 100 == 0 && parseInt(idcard.substr(6,4))%4 == 0 )){
ereg=/^[1-9][0-9]19[0-9]((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|[1-2][0-9]))[0-9][0-9Xx]$/;//闰年出生日期的合法性正则表达式
} else {
ereg=/^[1-9][0-9]19[0-9]((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|1[0-9]|2[0-8]))[0-9][0-9Xx]$/;//平年出生日期的合法性正则表达式
}
if(ereg.test(idcard)){//测试出生日期的合法性
//计算校验位
S = (parseInt(idcard_array[0]) + parseInt(idcard_array[10])) * 7
+ (parseInt(idcard_array[1]) + parseInt(idcard_array[11])) * 9
+ (parseInt(idcard_array[2]) + parseInt(idcard_array[12])) * 10
+ (parseInt(idcard_array[3]) + parseInt(idcard_array[13])) * 5
+ (parseInt(idcard_array[4]) + parseInt(idcard_array[14])) * 8
+ (parseInt(idcard_array[5]) + parseInt(idcard_array[15])) * 4
+ (parseInt(idcard_array[6]) + parseInt(idcard_array[16])) * 2
+ parseInt(idcard_array[7]) * 1
+ parseInt(idcard_array[8]) * 6
+ parseInt(idcard_array[9]) * 3 ;
Y = S % 11;
M = "F";
JYM = "10X98765432";
M = JYM.substr(Y,1);//判断校验位
if(M == idcard_array[17]) return 0; //检测ID的校验位
else return 3;
}
else return 2;
break;
default:
return 1;
break;
}
}
function CheckForm()
{
var Errors=new Array(
"验证通过!",
"身份证号码位数不对!",
"身份证号码出生日期超出范围或含有非法字符!",
"身份证号码校验错误!",
"身份证地区非法!"
);
var result=checkIdcard(document.getElementById("txt_sfzmhm").value);
if(result!=0)
{
alert(Errors[result]);
document.getElementById("txt_sfzmhm").focus();
return false;
}
alert("输入正确!");
return true;
}
//================================================
//地区选择
function RemoveAllOption(obj)
{
var len = obj.length-1;
for(var i=len; i>=0; i--)
{
obj.options.remove(i);
}
}
function AddEmptyOption(obj)
{
obj.options.add(new Option("",""));
}
function FirstChangeOption1(ele,first,second,field)
{
RemoveAllOption(second);
second.options.add(new Option(first.options[first.selectedIndex].text,""));
var TempOptionStr;
var SkillCode = field.value;
var currentValue = first.value;
if (currentValue.length >= 2){
var arrValue = SkillCode.split(";");
for (var i=0;i<arrValue.length;i++){
var arrOneValue = arrValue[i].split(",");
if (currentValue.substr(0,2) == arrOneValue[0].substr(0,2)) { //查找到合适的项目
if( arrOneValue[0].length >2 && arrOneValue[0] != currentValue)
{
TempOptionStr= ' '+arrOneValue[1];
second.options.add(new Option(TempOptionStr,arrOneValue[0]));
}
}
}
}
if (second.options.length <= 1) {
second.style.display='none'; document.getElementById(ele).value = first.value ;
}
else second.style.display=''; }
function FirstChangeOption2(ele,first,second,third,field)
{
RemoveAllOption(second);
second.options.add(new Option(first.options[first.selectedIndex].text,"")); RemoveAllOption(third);
AddEmptyOption(third);
var TempOptionStr;
var SkillCode = field.value;
var currentValue = first.value;
if (currentValue.length >= 2){
var arrValue = SkillCode.split(";");
for (var i=0;i<arrValue.length;i++){
var arrOneValue = arrValue[i].split(",");
if (currentValue.substr(0,2) == arrOneValue[0].substr(0,2)) { //查找到合适的项目
var IsZero = true;
var ssub = arrOneValue[0].substr(4);
for(var j=0; j<ssub.length;j++)
{
if(ssub.substring(j,j+1) != "0")
{
IsZero = false;
break;
}
}
if(IsZero && arrOneValue[0]!=currentValue)
{
TempOptionStr= ' '+arrOneValue[1];
second.options.add(new Option(TempOptionStr,arrOneValue[0]));
}
}
}
}
document.getElementById(ele).value = first.value;
if (second.options.length <= 1) second.style.display='none'; else second.style.display='';
if (third.options.length <= 1) third.style.display='none'; else third.style.display=''; }
function SecondChangeOption(ele,second,third,field)
{
RemoveAllOption(third);
third.options.add(new Option(second.options[second.selectedIndex].text.replace(' ',''),""));
var TempOptionStr;
var SkillCode = field.value;
var currentValue = second.value;
if (currentValue.length!=0){
var arrValue = SkillCode.split(";");
for (var i=0;i<arrValue.length;i++){
var arrOneValue = arrValue[i].split(",");
if (arrOneValue[0].length>4 && arrOneValue[0] != currentValue && currentValue.substring(0,4) == arrOneValue[0].substr(0,4)) { //查找到合适的项目
TempOptionStr= ' '+arrOneValue[1];
third.options.add(new Option(TempOptionStr,arrOneValue[0]));
}
}
}
document.getElementById(ele).value = second.value;
if (third.options.length <= 1) third.style.display='none'; else third.style.display=''; }
function ThirdChangeOption(ele,third)
{
document.getElementById(ele).value = third.value ;
}
-------------------------------------------------------------------
比如有EXcel中有一条数据的身份证号码不对,则该条数据都不导入,把该条数据提出来,让他显示在GridView中.
-------------------------------------------------------------------
楼主的做法很不科学,也很难实现
第2个回答 2010-12-23
给你个思路吧。
1. 将excel文件上传到服务端,通过fileupload控件。
2. 读取上传后的excel文件,代码如下
string strConn;
strConn = "Provider=Microsoft.Jet.OLEDB.4.0;" +
"Data Source=C:\\exceltest.xls;" +
"Extended Properties=Excel 8.0;";
OleDbDataAdapter myCommand = new OleDbDataAdapter("SELECT * FROM [Sheet1$]",strConn);
DataSet myDataSet = new DataSet();
myCommand.Fill(myDataSet, "ExcelInfo");
gvTest.DataSource = myDataSet.Tables["ExcelInfo"].DefaultView;
gvTest.DataBind();
3. 至于如何写到数据库,很简单了吧,myDataSet.Tables["ExcelInfo"] 就是DataTable
,里面字段顺序决取于你excel中的列顺序,按照实际列顺序构造insert into语句,通过循环,可以将excel中的多行数据插入到数据库了。
自己多练习,加油!