创建数据集时,我输入的数据非常糟糕。
背景:
特定的单元格有一些日期,字母和数字或一些随机的东西。我要提取的信息类似于" xxxxxIB"一个五位数后跟字母" IB"。但是经常这种类型的进入," IB"不在那里,还有其他各种东西。
对于这个问题:
有时日期会以各种格式显示,我想从单元格中删除。只是为了简化我的生活,对于初学者来说。
典型的单元格可以采用以下任何格式显示。 ** \中的内容是我的评论:
A1
ALM 03/09/2014 45099IB \* mm/dd/yyy format *\
ALM45099IB 03092014 \* mmddyyyy *\
ALM111-3/09/2014 \*m\dd\yyyy *\
45099IB_30914 \* mmdyy *\
45099IB-030914 \* mmddyy *\
ALM_30914 \* mddyy *\
alm5 03914
alm6 031114 \*wrong date entered *\
03092014alm_1 \* date first then other stuff *\
223LA \* No date at all *\
alm 0309214 \* writing year 2014 as 214 *\
因此,我的数据有时没有日期,有时会显示错误的日期,有时会显示正确的日期,但它可能是多种格式之一,并且可以与其他数据进行所有可想象的组合。
我的数据有一个日期列,所以我知道将要出现的日期(除非他们输入了错误的日期)。现在我已经写了八个不同的SUBSTITUTE命令来用空格替换某些格式的日期。
=SUBSTITUTE(A2,TEXT(B2,"mm/dd/yyyy"),"")
当数据输入过程错误地输入日期或奇怪地写入日期时,它显然不起作用。有一种聪明的方法可以让excel读取所有类似日期的对象并删除它们吗?
链接到完整数据:Here
答案 0 :(得分:1)
我创建了一个可以处理大部分数据的小提琴:
<强> http://jsfiddle.net/w97hw10y/5/ 强>
(在Chrome中测试过。)
这是用JavaScript和jQuery编写的。这是来源:
$('body').text($('body').text().trim());
var data= $('body').text().split('\n');
for(var i = 0 ; i < data.length ; i++) {
var d= data[i].split(/[ \-_]/g);
for(var j = 0 ; j < d.length ; j++) {
var val= d[j];
if($.isNumeric(val)) {
if(val.length===8) {
val= val.substr(0,2)+'/'+val.substr(2,2)+'/'+val.substr(4);
}
else if(val.length===6) {
val= val.substr(0,2)+'/'+val.substr(2,2)+'/20'+val.substr(4);
}
else if(val.length===5) {
val= val.substr(0,1)+'/'+val.substr(1,2)+'/20'+val.substr(3);
var dt= new Date(val);
if(dt.toString()==='Invalid Date') {
val= d[j];
val= val.substr(0,2)+'/'+val.substr(2,1)+'/20'+val.substr(3);
var dt= new Date(val);
if(dt.toString()==='Invalid Date') continue;
}
}
else continue;
}
var dt= new Date(val);
if(dt.toString()!=='Invalid Date') {
data[i]= data[i].replace(d[j],'') + '<td> '+dt.toLocaleDateString();
}
}
}
$('body').html('<table><tr><td>'+data.join('<tr><td>')+'</table>');