以文本方式查看主题

-  易表在线答疑  (http://egrid2000.com/dvbbs/index.asp)
--  用户社区  (http://egrid2000.com/dvbbs/list.asp?boardid=2)
----  [求助]希望能帮忙设计一个更简单的专利申请号的校验方法  (http://egrid2000.com/dvbbs/dispbbs.asp?boardid=2&id=1437)

--  作者:5kong
--  发布时间:2012/1/29 23:06:00
--  [求助]希望能帮忙设计一个更简单的专利申请号的校验方法
[这个贴子最后由5kong在 2012/01/29 11:21pm 第 2 次编辑]

希望能帮忙设计一个更简单的专利申请号的校验方法
背景说明和问题都写在附件里了
期待某位版主的协助
先谢谢啦!egd文件下载
--  作者:dancedy
--  发布时间:2012/1/30 10:04:00
--  
egd文件下载
--  作者:5kong
--  发布时间:2012/1/30 11:10:00
--  
嚯嚯,这么快就有回复了,谢谢dancedy !

试用了一下,很好用,正在学习中!

再次感谢!


--  作者:5kong
--  发布时间:2012/1/30 13:33:00
--  
[这个贴子最后由5kong在 2012/01/30 01:36pm 第 3 次编辑]

还有问题需要请教。

现在发现,如果将倒数第2位的小数点输入错误,因公式未涉及,导致仍被认为正确(请见表8中红色标注的内容)。

样本中的自动格式的公式:
If(Len([申请号]) = 14,If(Right([申请号],1) = "." Or Right([申请号],1) = "x",1,If(Right([申请号],1) = Text([%A%]),2,1)),1)

我参照上述公式,试图加入对倒数第2位数字的校验,编写了下面两个公式,分别应用于表8-1和表8-2中:

表8-1
If(Len([申请号]) = 14,If(Right([申请号],1) = "." Or Right([申请号],1) = "x",1,If(Right([申请号],1) = Text([%A%]),If(Right([申请号],2) = ".",2,1),1)),1)

表8-2
If(Len([申请号]) = 14 And Right([申请号],2) = ".",If(Right([申请号],1) = "." Or Right([申请号],1) = "x",1,If(Right([申请号],1) = Text([%A%]),2,1)),1)

但运行结果令人沮丧,所有的申请号均显示黄色背景,提示申请号输入错误。
请指教,这两个公式出了什么问题,应该如何编写公式才能将上述要求补充进原公式中?

谢谢!!

egd文件下载


--  作者:dancedy
--  发布时间:2012/1/30 15:06:00
--  

参考
egd文件下载


--  作者:5kong
--  发布时间:2012/1/30 16:33:00
--  
输入掩码+自定义变量+自动格式

应该是最简洁的解决方案了吧

再次感谢!


--  作者:wjq1072
--  发布时间:2012/2/1 20:34:00
--  
这样试试?
egd文件下载
--  作者:5kong
--  发布时间:2012/2/1 20:57:00
--  
谢谢 wjq1072 先!

试过了
单个输入时的确好用,可以提示错在哪里;
但如果批量导入遇到数个错误的话,
得首先点击好几个确认键,然后就不知道哪个是错误码了
如果能标识出来,会更容易识别


--  作者:wjq1072
--  发布时间:2012/2/1 22:01:00
--  
egd文件下载
--  作者:5kong
--  发布时间:2012/2/1 22:33:00
--  
学习中,十分感谢!

此前的样本中,dancedy 定义了一个变量,以便运用于自动格式的公式中;
这样的好处是,可以避免使用中转列,这在多种数据并列的情况下比较适用;
因为中转列即便隐藏了,也会出现在记录窗口中。

想请教一下,在设计公式时,如果希望保持运行速度,应尽量避免哪一类做法?

此前在制作通讯录时,在行预处理中使用了EvalFor(GridName,"序号","VisibleRow")
但这样一来,仅仅3000行数据就导致每点击一次鼠标都要等待2-3秒才能显示
(使用的是core i3 2.27G 处理器,应该不算老吧)