??xml version="1.0" encoding="utf-8" standalone="yes"?>亚洲精品无码人妻无码,日本亚洲成高清一区二区三区,久久乐国产综合亚洲精品http://www.tkk7.com/amplifier/zh-cnFri, 09 May 2025 21:59:13 GMTFri, 09 May 2025 21:59:13 GMT60q个BlogJava来冷清了http://www.tkk7.com/amplifier/archive/2018/08/18/433338.htmlamp@javaamp@javaSat, 18 Aug 2018 14:14:00 GMThttp://www.tkk7.com/amplifier/archive/2018/08/18/433338.htmlhttp://www.tkk7.com/amplifier/comments/433338.htmlhttp://www.tkk7.com/amplifier/archive/2018/08/18/433338.html#Feedback0http://www.tkk7.com/amplifier/comments/commentRss/433338.htmlhttp://www.tkk7.com/amplifier/services/trackbacks/433338.html前段旉发现QBlogjava的登录页面居然没有验证码了,囄昄错误Q无法登录,预感q个地方要凉Q只好到处找替代Q但没找到好用的博客Qgithub是一个选项Q但g不是很适合做博客?br />现在l于又可以登录了Q不q首居然只剩一文章,我以为数据都没了Q登录发现还是有的,不过太让Z攑ֿ了?img src ="http://www.tkk7.com/amplifier/aggbug/433338.html" width = "1" height = "1" />

amp@java 2018-08-18 22:14 发表评论
]]>
USB鼠标不能用引发的Windows 10折腾之旅http://www.tkk7.com/amplifier/archive/2017/11/19/432905.htmlamp@javaamp@javaSun, 19 Nov 2017 04:43:00 GMThttp://www.tkk7.com/amplifier/archive/2017/11/19/432905.htmlhttp://www.tkk7.com/amplifier/comments/432905.htmlhttp://www.tkk7.com/amplifier/archive/2017/11/19/432905.html#Feedback0http://www.tkk7.com/amplifier/comments/commentRss/432905.htmlhttp://www.tkk7.com/amplifier/services/trackbacks/432905.htmlZq一步证实硬件没问题Q找了个安装pȝ的U盘,插进d动,能够正常使用鼠标Q于是目标就聚焦在找回驱动上?br />开始折腾:
1、首先是扑֮斚w动啊Q我q电脑是老机QAMD7pdLQ找了半天,q个L驱动q没有包含USB控制器,因ؓUSB控制器都是Windows自带的驱动,下蝲了一个南桥驱动,安装后ƈ没有效果Q?br />2、Windows自带的驱动原来都是放在C:\Windows\System32\DriverStore\FileRepository下,USB控制器相关的驱动Q就在usbport.inf_amd64_xxxxxxxxxx文g多wQxxxxxxxxx是一?6q制数字Q悲催的是,安装q个驱动时要不提C找不到指定文gQ要不说W三方INF没有{֐Q?br />3、自己折腾搞不定Q找个Y件吧Q第一个想到的是驱动之家官方的驱动_Q下载下来发现是个全家桶啊,什么腾讯管Ӟ金山毒霸Q浏览器首页修改一应俱全,而且没有鼠标点击Q用TAB键根本移动不到取消框Q只好默认全部安装了Q装完启动,,提示pȝ自带驱动~失Q于是回车修复,但每ơ修复完Q重新检还是那P而且没有提示USB控制器驱动安装有问题Q有些功能用键盘无法操作Q不知道是不是还有哪里可以操作一下,于是又搜了一下,如何用键盘代曉K标,居然真的扑ֈ了!
4、按WIN键,输入讄Q回车,打开讄主页Q?br />
Ud“L使用”Q进d左边选择“鼠标”Q在双启用“使用数字键盘在屏幕上移动鼠?#8221;Q按I格键开养IQ最好把三个开关都打开Q如果没有启用CTRL键加速功能,鼠标Ud非常慢:

好了Q现在可以用键盘移动鼠标了Q?br />5、l回到驱动精灵,再次修复Q还是不行啊Q这个东襉K了带来一堆垃圾,什么作用都没有Q于是把它带来的垃圾以及它自己卸载了?br />6、似?60也有一个驱动大师,于是׃载了一个,q个倒是很纯z,但是功能太弱Q完全没发现问题Q?br />7、刚才搜?#8220;安装驱动 找不到指定的文g”Ӟ发现一个论坛提Cq个Q是驱动人生的论坛,好像q有解决ҎQ但要注册才能下载,N驱动人生可以解决Q于是就下蝲了一个驱动h生,安装的时候还是附带全家桶Q不q现在可以用键盘Ud鼠标取消了,只安装了驱动人生自己Q跟刚才两个软g不同的是Q它提示USB外设驱动没有安装Q于是点修复Q结果反反复复出现等待光标,是无法完成Q?br />8、之前又搜烦刎ͼ驱动安装的日志在C:\Windows\INF\setupapi.dev.log文g里,于是打开q个文gQ发现Driver package failed signature verification. Error = 0xE000022FQ驱动程序签名有问题Q所以不能安装成功;
9、Windows10有个高启动选项是禁用强刉动签名,如何q入高启动选项呢?以前是按F8Q现在不行了Q要在设|里面,更新和安全,恢复Q高U启动,立即重启Q然后设|疑难解{,高启动Q再重启Q就可以q入高启动菜单Q按7q入止强制驱动{֐模式Q重启后再用驱动人生修复Q果然成功了Q?br />10、打开驱动人生下蝲目录QDTLFolder\DriversDownLoadQ发现它下蝲了USB驱动目录是USB_10.0.10240.16384_WHQL_107049Q里面文件如下:

除了W一个xml文g是程序自q的外Q其他都是USB驱动用到的文Ӟ点右键发现那几个sys文gQ除了usbohci.sys和usbuhci.sys外,其他都有数字{֐Q而usbuhci.sys我这里没用到Q问题就出在usbohci.sys上:


11、难道是驱动人生替换了未{֐的文Ӟ图谋不轨Qؓ了验证一下,我又下蝲了一个Windows10安装光盘Q版本是当前使用?703版)Q?div>cn_windows_10_multiple_editions_version_1703_updated_march_2017_x64_dvd_10194190.iso
12、怎么提取安装光盘中的内置驱动Q找了一下,原来Windows的安装盘从VISTAP不再使用XP以前的I386目录和Drivers.cab文g存放驱动Q而是打包在一个Install.wim镜像文g中,要找到驱动文Ӟ必须用工h取,q个工具是Imagex.exeQ微软自己做的命令行工具Q但是我的电脑上没有Q于是下载了一?4位的Q放在C盘根目录Q通过如下命o卛_提取Q?/div>
c:\IMAGEX_x64 /mount f:\sources\install.wim 5 i:\1703
其中F盘是在iso文g上点右键Q打开方式?#8220;Windows资源理?#8221;打开后虚拟出来的盘符Q其实就相当于系l自带的虚拟光驱QI盘是盘Q用来存放挂载的镜像文gQ?是选择挂蝲哪一个版本的WindowsQ多合一版)Q如果不知道要挂哪个Q把q个数字Ҏ100Q会昄xml文g内容Qƈ提示找不到这个烦引号Q从xml文g内容p扑ֈ各版本的信息Q然后再重新挂蝲正确的即可。这个挂载其实是个解压羃q程Q时间很长,提取完之后就跟安装好了Windows一P目录都列好了?/div>
今天又发现另一个图形化的工PDism++Q比q个操作更简单。Dism是PowerShell内置的命令,也是与镜像有养I也能挂蝲提取Q但用了一下似乎提C权限有问题QDism++是国内开源爱好者自己开发的囑Ş化工P与Dism没有关系?/div>
13、好了,原版的Windows已经准备好,q入Windows\System32\DriverStore\FileRepository目录Q搜索usbohci.sysQ在usbport.inf_amd64_8e5f608c0111283d目录下,点右键一看,也是没签名的Q?/div>
q不是坑爹吗Q你自己带的东西都没{֐Q然后又不给用!Q!Q?/div>
14、有Ҏ疑是Windows自己更新的时候修改了一些策略,D之前可以用的不能用了Qؓ了再ơ验证,又l下载了两个版本的Windows10安装光盘Q分别是早期?607和最新的1709Q找到usbohci.sysQ如下所C:
从左到右依次?607,1703,1709Q均未签名,基本可以判断是Windows自己抽风了?/div>
15、昨天晚上搞?2点多Q搞定鼠标后没有重启试Q今天早上开机,果然发现鼠标又不能用了,因ؓ我没有选择用强制{֐选项来启动,pȝ发现那个没签名的驱动Q就把它停了Q尝试卸载,l果再装也装不上Q于是只好又讄高启动Q重新禁止强制签名,q入pȝQ装上驱动,恰好q时Windows又在后台偷偷摸摸地更斎ͼ不知道更C啥,让我重启?/div>
16、重启之后,奇迹出现Q刚才明明提C没有签名强制安装的驱动Q现在居然正常启动也没问题了Q而且查看驱动详情的时候出C矛盾的一q:
外面昄数字{֐者:未经数字{֐Q里面的sys文g又显C数字签名者是Microsoft WindowsQ然而进入C:\Windows\System32\drivers目录Q找到usbohci.sysQ点右键Q却发现q没有数字签名:
好吧Q你开心就好,反正不要再禁我的鼠标p……
感谢q次蛋疼的折腾之旅,让我知道了驱动程序来自哪里,安装日志在哪里,哪个软g坑爹又没用,怎么玩安装盘Q怎么用键盘操作鼠标,怎么q入高启动界面……
我ؓ什么要知道q些Q?Q?Q?Q?Q?Q?Q?为微软的疏忽买单啊!Q!Q!
啥都不说了,它又提示我重启了Q不知道又有什么奇q会发生……


amp@java 2017-11-19 12:43 发表评论
]]>利用jmtp库读取手机文?/title><link>http://www.tkk7.com/amplifier/archive/2017/11/17/432903.html</link><dc:creator>amp@java</dc:creator><author>amp@java</author><pubDate>Fri, 17 Nov 2017 06:54:00 GMT</pubDate><guid>http://www.tkk7.com/amplifier/archive/2017/11/17/432903.html</guid><wfw:comment>http://www.tkk7.com/amplifier/comments/432903.html</wfw:comment><comments>http://www.tkk7.com/amplifier/archive/2017/11/17/432903.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/amplifier/comments/commentRss/432903.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/amplifier/services/trackbacks/432903.html</trackback:ping><description><![CDATA[ 每次换手机,把旧手机的数据迁Ud新手机就是个很麻烦的事情Q幸好最q华为的“手机克隆”APP来强大,居然能够把微信的聊天记录包括囄原封不动地迁Ud新手ZQ以前用微信自带的聊天记录{Ud能只能{UL字信息,囄视频全部丢失Q不知道现在的怎么栗手机克隆还能把SD卡的内容也{U过来,基本满了需要?br /> 但是要把手机上的东西传到电脑没那么单了Q现在已l没有了以前的大定w存储模式Q只能选择MTP模式Q这U模式其实不是一个完整的文gpȝQ有很多限制Q所以一些传l的软gd不到Q例如FastCopy是用不了的,用Windows自带的文件管理器来复Ӟ开始计时间就要等很久Q中间出了个错就前功弃Q还有通过手机上的APP讉K电脑׃n的方式,在手Z复制也可以,但是同样会莫名其妙卡死,FTP同理Q折腾了好久Q还是觉得自己动手比较好?br /> MTP协议在维基百U里解释得比较清楚:<a >https://en.wikipedia.org/wiki/Media_Transfer_Protocol</a> Q简单点说就是:<br /> 1、不是以块设备的形式讉KQ跟U盘不同;<br /> 2、只能单U程讉KQ不能同时进行多个操作,只能一个接一个;<br /> 3、控制权在设备上Q对外展C的内容p备决定;<br /> 4、默认不能直接对文gq行部分修改Q只能复制过来修改完再复制回去,但Android对协议做了扩展,能够修改部分文g内容Q?br /> 5、在Linux上有些Y件能够把它挂载ؓ文gpȝQ这样其他Y件就能像讉K普通文件系l一栯问了Q但是Windows下似乎没有?br /> <br /> 不过有h开发了一个在Windows下通过JNI实现的Java库jmtpQ项目托在Google CodeQ被墙了Q但是GitHub有hfork了一个,可以下蝲下来Q我下蝲的是<a >https://github.com/reindahl/jmtp</a><br /> 里面包含了C++的代码和Java的代码,以及两个已经~译好的dll文gQ分别用于Win32和Win64Q把其中一个dll文g攑֜工程目录下,再把Java源代码加入工E中卛_使用Q文档比较简陋,但是看test目录下的MtpTest.javaQ基本可以摸到如何用了Q这个协议比较简单,其实没什么功能,我要的只是把文g复制到电脑上?br /> ҎMtpTest.javaQ稍微修改一下,做个递归复制卛_把手Z的所有文件复制到电脑上:<br /> <div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> --><span style="color: #0000FF; ">package</span><span style="color: #000000; "> test;<br /> <br /> </span><span style="color: #0000FF; ">import</span><span style="color: #000000; "> java.io.File;<br /> </span><span style="color: #0000FF; ">import</span><span style="color: #000000; "> java.io.FileWriter;<br /> </span><span style="color: #0000FF; ">import</span><span style="color: #000000; "> java.io.IOException;<br /> </span><span style="color: #0000FF; ">import</span><span style="color: #000000; "> java.math.BigInteger;<br /> </span><span style="color: #0000FF; ">import</span><span style="color: #000000; "> java.nio.file.Files;<br /> </span><span style="color: #0000FF; ">import</span><span style="color: #000000; "> java.nio.file.Path;<br /> </span><span style="color: #0000FF; ">import</span><span style="color: #000000; "> java.nio.file.Paths;<br /> </span><span style="color: #0000FF; ">import</span><span style="color: #000000; "> java.rmi.server.SocketSecurityException;<br /> </span><span style="color: #0000FF; ">import</span><span style="color: #000000; "> java.util.ArrayList;<br /> <br /> <br /> </span><span style="color: #0000FF; ">import</span><span style="color: #000000; "> jmtp.PortableDevice;<br /> </span><span style="color: #0000FF; ">import</span><span style="color: #000000; "> jmtp.PortableDeviceFolderObject;<br /> </span><span style="color: #0000FF; ">import</span><span style="color: #000000; "> jmtp.PortableDeviceManager;<br /> </span><span style="color: #0000FF; ">import</span><span style="color: #000000; "> jmtp.PortableDeviceObject;<br /> </span><span style="color: #0000FF; ">import</span><span style="color: #000000; "> jmtp.PortableDeviceStorageObject;<br /> <br /> <br /> </span><span style="color: #0000FF; ">public</span><span style="color: #000000; "> </span><span style="color: #0000FF; ">class</span><span style="color: #000000; "> TestApp {<br /> <br />     </span><span style="color: #000000; "><br />     </span><span style="color: #0000FF; ">public</span><span style="color: #000000; "> </span><span style="color: #0000FF; ">static</span><span style="color: #000000; "> </span><span style="color: #0000FF; ">void</span><span style="color: #000000; "> main(String[] args) {<br />         </span><span style="color: #008000; ">//</span><span style="color: #008000; "> TODO Auto-generated method stub</span><span style="color: #008000; "><br /> </span><span style="color: #000000; ">        <br />         ArrayList</span><span style="color: #000000; "><</span><span style="color: #000000; ">PortableDeviceStorageObject</span><span style="color: #000000; ">></span><span style="color: #000000; "> devices </span><span style="color: #000000; ">=</span><span style="color: #000000; "> </span><span style="color: #0000FF; ">new</span><span style="color: #000000; "> ArrayList</span><span style="color: #000000; "><></span><span style="color: #000000; ">();<br /> <br />         PortableDeviceManager manager </span><span style="color: #000000; ">=</span><span style="color: #000000; "> </span><span style="color: #0000FF; ">new</span><span style="color: #000000; "> PortableDeviceManager();<br /> <br />         </span><span style="color: #0000FF; ">for</span><span style="color: #000000; "> (PortableDevice device : manager) {<br />             System.out.println(device);<br />             device.open();<br />             <br />             </span><span style="color: #008000; ">//</span><span style="color: #008000; "> Iterate over deviceObjects</span><span style="color: #008000; "><br /> </span><span style="color: #000000; ">            </span><span style="color: #0000FF; ">for</span><span style="color: #000000; "> (PortableDeviceObject object : device.getRootObjects()) {<br />                 String storageName</span><span style="color: #000000; ">=</span><span style="color: #000000; ">object.getName();<br />                 System.out.println(storageName);<br /> </span><span style="color: #000000; "><br />                 </span><span style="color: #008000; ">//</span><span style="color: #008000; "> If the object is a storage object</span><span style="color: #008000; "><br /> </span><span style="color: #000000; ">                </span><span style="color: #0000FF; ">if</span><span style="color: #000000; "> (object </span><span style="color: #0000FF; ">instanceof</span><span style="color: #000000; "> PortableDeviceStorageObject) {<br />                     PortableDeviceStorageObject storage </span><span style="color: #000000; ">=</span><span style="color: #000000; "> (PortableDeviceStorageObject) object;<br />                     System.out.println(storage.getChildObjects().length);<br />                     </span><span style="color: #0000FF; ">for</span><span style="color: #000000; "> (PortableDeviceObject child : storage.getChildObjects()) {<br />                             copyall(child,</span><span style="color: #000000; ">"</span><span style="color: #000000; ">E:\\手机备䆾\\</span><span style="color: #000000; ">"</span><span style="color: #000000; ">+</span><span style="color: #000000; ">object.getName());<br />                     }<br />                 }<br />             }<br /> <br />             device.close();<br />             System.out.println(size);<br />         }<br /> <br />   </span><span style="color: #000000; ">   <br />     }<br />     <br />     </span><span style="color: #0000FF; ">public</span><span style="color: #000000; "> </span><span style="color: #0000FF; ">static</span><span style="color: #000000; "> </span><span style="color: #0000FF; ">void</span><span style="color: #000000; "> copyall(PortableDeviceObject obj,String path) {<br /> </span><span style="color: #008000; "><br /> </span><span style="color: #000000; ">        </span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">(obj </span><span style="color: #0000FF; ">instanceof</span><span style="color: #000000; "> PortableDeviceFolderObject) {<br />            </span><span style="color: #008000; "><br /> </span><span style="color: #000000; ">            String objName</span><span style="color: #000000; ">=</span><span style="color: #000000; ">obj.getName();<br />             </span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">(objName.contains(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">:</span><span style="color: #000000; ">"</span><span style="color: #000000; ">)) {<br />                 objName</span><span style="color: #000000; ">=</span><span style="color: #000000; ">objName.replace(</span><span style="color: #000000; ">'</span><span style="color: #000000; ">:</span><span style="color: #000000; ">'</span><span style="color: #000000; ">, </span><span style="color: #000000; ">'</span><span style="color: #000000; ">Q?/span><span style="color: #000000; ">'</span><span style="color: #000000; ">);<br />             }<br />             String newPath </span><span style="color: #000000; ">=</span><span style="color: #000000; "> path</span><span style="color: #000000; ">+</span><span style="color: #000000; ">"</span><span style="color: #000000; ">\\</span><span style="color: #000000; ">"</span><span style="color: #000000; ">+</span><span style="color: #000000; ">objName;<br />             System.out.println(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">创徏文g夹:</span><span style="color: #000000; ">"</span><span style="color: #000000; ">+</span><span style="color: #000000; ">newPath);<br />             <br /> </span><span style="color: #008000; "></span><span>           </span><span> File file = new File(newPath);<br /> </span><span style="color: #008000; "></span><span>            if(!file.exists()) {<br /> </span><span style="color: #008000; "></span><span>                file.mkdirs();<br /> </span><span style="color: #008000; "></span><span>            }</span><span style="color: #008000; "><br /> </span><span style="color: #000000; ">            </span><span style="color: #0000FF; ">for</span><span style="color: #000000; ">(PortableDeviceObject subObj:((PortableDeviceFolderObject) obj).getChildObjects()) {              </span><span style="color: #000000; "><br />                 copyall(subObj,newPath);<br />             }<br />         }<br />         </span><span style="color: #0000FF; ">else</span><span style="color: #000000; "> {</span><span style="color: #000000; ">       <br />             </span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">(obj.getName().contains(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">:</span><span style="color: #000000; ">"</span><span style="color: #000000; ">))<br />                 </span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">;<br />             System.out.println(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">开始复制文件到Q?/span><span style="color: #000000; ">"</span><span style="color: #000000; ">+</span><span style="color: #000000; ">path</span><span style="color: #000000; ">+</span><span style="color: #000000; ">"</span><span style="color: #000000; ">\\</span><span style="color: #000000; ">"</span><span style="color: #000000; ">+</span><span style="color: #000000; ">obj.getName());<br />             File file </span><span style="color: #000000; ">=</span><span style="color: #000000; "> </span><span style="color: #0000FF; ">new</span><span style="color: #000000; "> File(path);<br /> </span><span>            </span><span style="color: #008000; "></span><span>obj.copy(file.toPath());</span><span style="color: #008000; "></span><span style="color: #000000;">          </span><span style="color: #000000; ">            <br />             System.out.println(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">文g复制完成Q?/span><span style="color: #000000; ">"</span><span style="color: #000000; ">);<br />         }<br />     }</span><span style="color: #000000; "><br /> }</span></div> 其中发现有点问题Q?br />1、Android讑֤文g名里是可以包含冒P:Q的Q但Windows是不可以的,所以复制到q些文g的时候会有问题,于是遇到目录名这样就把它改ؓ中文的冒PQ)Q但是遇到文件名q样׃行了Q因个库的copy函数只需要指定目标目录,不需要指定目标文件名Q所以这些文件只能放弃;<br />2、Android手机的MTP协议是由“媒体存储”q个pȝAPP控制的,有时候手Z可以看到的文Ӟ通过MTP讉K却怎么也看不到Q重启手Z不行Q应该就是这个APP没有更新数据Q需要把它的pȝ数据清除掉,{它重徏完重新访问就可以看到了,不过q个重徏旉非常长,可以查看它数据占用的I间Q刚清除之后会发现它占用的空间会不断增长Q到了不增长的时候就是重建完了,可以正常访问了Q?br />3、这个库有时候还有点bugQ有一ơ发现它d到的文g和文件夹都没有了最后一?后面的部分,所以L卡住Q重新插拔一下手机数据线又没问题了;<br />4、ؓ了避免复制了半天l果发现不完_又要重来Q最好在复制前先l计一下文件大,看看跟手Z看到的占用存储空间是不是一_对于MTP讑֤上的文gQ可以通过getSize函数得到大小Q把上面复制操作改ؓ大小累加卛_Q速度比复制快一些,不过׃文件太多,也不会快很多?br /><br />把手机里的文件复制到电脑后,通过一些简单的分析Q发现有很多其实是垃圾来的,也可以ؓ手机I间清理提供参考,因ؓ在电脑上分析h比在手机上方便一些。例如一些视频APP的缓存,居然过1GQ占用了宝贵的内部存储空_之前一直都没发玎ͼ通过电脑里的按文件大搜索才发现?img src ="http://www.tkk7.com/amplifier/aggbug/432903.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/amplifier/" target="_blank">amp@java</a> 2017-11-17 14:54 <a href="http://www.tkk7.com/amplifier/archive/2017/11/17/432903.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>MP3d在老速腾上显CZ文的ImgBurn讄http://www.tkk7.com/amplifier/archive/2017/02/10/432296.htmlamp@javaamp@javaFri, 10 Feb 2017 01:17:00 GMThttp://www.tkk7.com/amplifier/archive/2017/02/10/432296.htmlhttp://www.tkk7.com/amplifier/comments/432296.htmlhttp://www.tkk7.com/amplifier/archive/2017/02/10/432296.html#Feedback0http://www.tkk7.com/amplifier/comments/commentRss/432296.htmlhttp://www.tkk7.com/amplifier/services/trackbacks/432296.html于是把原来那张可以正常昄中文的碟拿来研究一下,发现它的ID3标签只是ID3v1Q而后来重新写入的ID3是ID3v2.3Q两个都可以正常昄中文Q说明ID3信息是正常的Q文件名q不是q个问题?br />但是不知道用什么Y件来昄光盘的文件系l,只能一ơ次摸烦?br />q好有一张CD-RW可以反复试?br />ImgBurn默认是用ISO9660+UDFQ而ISO 9660则用最老的ISO 9660文gpȝQ也是1988版本Q文件名默认是不支持中文的,不知道是不是q个原因Q于是就把文件系l改为ISO 9660+JolietQ如下图Q?br />
q且把ISO 9660标准改ؓ1999Q?br />
可能是因为字W编码那里改ZASCIIQ所以就好了?br />后来又尝试只使用UDF文gpȝQ结果认不出?br />


所以,目前能够使用中文的环境其实就是:
ImgBurn使用ISO 9660 1999标准Q?br />ID3使用v1或v2.3都可以?/strong>


amp@java 2017-02-10 09:17 发表评论
]]>
用httpclient和正则表辑ּ完成一些无聊的重复性Q?/title><link>http://www.tkk7.com/amplifier/archive/2016/01/12/429014.html</link><dc:creator>amp@java</dc:creator><author>amp@java</author><pubDate>Tue, 12 Jan 2016 07:54:00 GMT</pubDate><guid>http://www.tkk7.com/amplifier/archive/2016/01/12/429014.html</guid><wfw:comment>http://www.tkk7.com/amplifier/comments/429014.html</wfw:comment><comments>http://www.tkk7.com/amplifier/archive/2016/01/12/429014.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.tkk7.com/amplifier/comments/commentRss/429014.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/amplifier/services/trackbacks/429014.html</trackback:ping><description><![CDATA[最q新部v了一个信息系l,厂家居然没有升ҎQ所有数据都要重新输入,包括用户、角色等都要重新配置Q真是操蛋。要是一个个录入直是日狗了,q些用户在其他信息系l早已存在,但是每个都复制粘贴提交一遍也不是办法Q于是就想用E序自动完成q些操作。步骤如下:<br />1、从其他信息pȝ的数据库导出用户信息Q也可以直接从其他信息系l的界面把所有用户信息复制下来放在一个文本文仉Q反正就是准备好数据源;<br />2、在需要录入用户信息的pȝ中,用h工操作的方式dpȝQƈ录入一个用P同时用Wireshark抓包Q查看整个过E要提交一些什么样的表单数据;<br />3、在E序中用httpclient提交同样的数据,完成dQƈ从第1步的数据源中d用户信息Q然后@环提交录入用h需的数据,完成用户的录入;<br />4、新pȝ没有默认的用戯Ԍ是需要一个个修改的,是根据用LID来确定当前修改的用户Qƈ且提交一个角色ID来进行设定,因此需要首先获取用LIDQ然后根据该ID来提交角色IDQ而用户ID是通过用户列表面获取到的Q因此还需要通过正则表达式来获取所有用LIDQ然后@环提交角色IDQ完成角色设定?br /><br />׃不少旉才搞定,有几个地斚w要注意:<br />1、如果表单数据不包含中文Q直接把表单的Name和Value加在HttpPost的URL?后面卛_Q不需要专门徏立NameValuePairQ如下所C:<br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #000000; ">HttpPost httppost </span><span style="color: #000000; ">=</span><span style="color: #000000; "> </span><span style="color: #0000FF; ">new</span><span style="color: #000000; "> HttpPost(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">http://1.1.1.1/test/adduser?userid=abc&username=efg</span><span style="color: #000000; ">"</span><span style="color: #000000; ">);<br />httpclient.execute(httppost);</span></div><br />但是Q如果表单数据包含中文,例如姓名Q用q种方式提交的表单数据会出现qQ即佉K过URLEncoderq行~码后再发也不行Q必d立NameValuePairQ再加到HttpPost的Entity里面Q如下所C:<br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #000000; ">HttpPost httppost </span><span style="color: #000000; ">=</span><span style="color: #000000; "> </span><span style="color: #0000FF; ">new</span><span style="color: #000000; "> HttpPost(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">http://1.1.1.1/test/adduser?userid=abc</span><span style="color: #000000; ">"</span><span style="color: #000000; ">);<br />List</span><span style="color: #000000; "><</span><span style="color: #000000; ">NameValuePair</span><span style="color: #000000; ">></span><span style="color: #000000; "> nvps </span><span style="color: #000000; ">=</span><span style="color: #000000; "> </span><span style="color: #0000FF; ">new</span><span style="color: #000000; "> ArrayList</span><span style="color: #000000; "><</span><span style="color: #000000; ">NameValuePair</span><span style="color: #000000; ">></span><span style="color: #000000; ">();<br />nvps.add(</span><span style="color: #0000FF; ">new</span><span style="color: #000000; "> BasicNameValuePair(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">username</span><span style="color: #000000; ">"</span><span style="color: #000000; ">,</span><span style="color: #000000; ">"</span><span style="color: #000000; ">张三</span><span style="color: #000000; ">"</span><span style="color: #000000; ">));<br />httppost.setEntity(</span><span style="color: #0000FF; ">new</span><span style="color: #000000; "> UrlEncodedFormEntity(nvps, HTTP.UTF_8));<br />httpclient.execute(httppost);</span></div><br />2、用于网内Ҏ扄正则表达式的使用方式一般ؓQ?br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #000000; ">Pattern p </span><span style="color: #000000; ">=</span><span style="color: #000000; "> Pattern.compile(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">.*?abc(whattoget)123.*?");</span><span style="color: #000000; "><br /></span><span style="color: #000000; ">Matcher m </span><span style="color: #000000; ">=</span><span style="color: #000000; "> p.matcher(line);<br /></span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">(m.matches()){<br />     String whattoget </span><span style="color: #000000; ">=</span><span style="color: #000000; "> m.group(</span><span style="color: #000000; ">1</span><span style="color: #000000; ">);<br />}</span></div><div><span style="color: #000000; "></span><div><span style="color: #000000; ">"</span><span style="color: #000000; ">.*?abc(whattoget)123.*?"</span><span style="color: #000000; ">是一个正则表辑ּQ如果用于匹配一行的时候,׃要查扄内容是在行中_所以前后需要加?*?Q表C前后可以是L字符Q也可以什么都没有Q而表辑ּ中间?whattoget)pCZ个groupQ编号ؓ1Q编号ؓ0的group是整个匹配的字符Ԍ扑ֈ之后提取group(1)卛_得到惌的内宏V?br />试正则表达式是一很ȝ的工作,不过有个很好的Y件可以完成此工作QRegexBuddyQ支持各U语a的正则表辑ּ的调试?br />学习正则表达式的宝典是《Mastering Regular Expression》?br /></span></div></div><img src ="http://www.tkk7.com/amplifier/aggbug/429014.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/amplifier/" target="_blank">amp@java</a> 2016-01-12 15:54 <a href="http://www.tkk7.com/amplifier/archive/2016/01/12/429014.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>驱动E序安装提示“拒l访问”的其中一U情늚解决Ҏhttp://www.tkk7.com/amplifier/archive/2015/04/02/424070.htmlamp@javaamp@javaThu, 02 Apr 2015 09:04:00 GMThttp://www.tkk7.com/amplifier/archive/2015/04/02/424070.htmlhttp://www.tkk7.com/amplifier/comments/424070.htmlhttp://www.tkk7.com/amplifier/archive/2015/04/02/424070.html#Feedback0http://www.tkk7.com/amplifier/comments/commentRss/424070.htmlhttp://www.tkk7.com/amplifier/services/trackbacks/424070.htmlq好q电脑还有传l的PS/2口,而且插上p识别Q否则连Windows都进不去Q因为按Ctrl+Alt+Del没反应?br />q去之后提示安装USB键盘驱动Q到最后一步提C安装失败,原因是拒l访问?br />上网搜了一下,安装驱动拒绝讉K的其中一个原因是注册表有个键的权限设|有问题Q改q来卛_Q但是我打开注册表,q那个键都没扑ֈQ不是这个原因?br />不过从这个解x案中也知道了驱动安装的日志是在Windows目录下的setupapi.log文g里面Q于是打开那个文gQ发现每ơ安装都有两个拒l访问的错误Q但q没有说是注册表拒绝讉KQ在拒绝讉K之前Q还提到一个叫MlCoInst.dll的文件没有签名?br />上网搜MlCoInst.dllQ没有找CQ何结果,在System32目录下找到它Q看属性,果然没有{֐Q是个三无文Ӟ不知道ؓ什么每ơ安装驱动都要调用它?br />日志里面q提C“共同安装E序”Q似乎和CoInst有点兌Q于是又查了一下,原来安装驱动的时候可以通过调用“共同安装E序”来实现某些目的,例如修改驱动E序的签名状态,ƺ骗操作pȝQ这样就可以只安装一ơ驱动即可,不用每次插入都安装一ơ?br />于是试把MlCoInst.dll删除Q提C删除失败?br />在注册表里面搜烦MlCoInst.dllQ把所有找到的键值都删除Q再ơ插拔键盘,利安装完毕Q删除MlCoInst.dllQ也成功了,果然是它的问题?br />
q个应该是某个USB讑֤的驱动引q来的,而且修改了usb.infQ每ơ安装Q何USB讑֤都要调用它,但它可能与Windows的签名机制有冲突Q所以导致安装失败,真是坑爹Q?img src ="http://www.tkk7.com/amplifier/aggbug/424070.html" width = "1" height = "1" />

amp@java 2015-04-02 17:04 发表评论
]]>
如何让线E暂停,又能随时唤醒Q?/title><link>http://www.tkk7.com/amplifier/archive/2015/03/10/423348.html</link><dc:creator>amp@java</dc:creator><author>amp@java</author><pubDate>Tue, 10 Mar 2015 08:52:00 GMT</pubDate><guid>http://www.tkk7.com/amplifier/archive/2015/03/10/423348.html</guid><wfw:comment>http://www.tkk7.com/amplifier/comments/423348.html</wfw:comment><comments>http://www.tkk7.com/amplifier/archive/2015/03/10/423348.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.tkk7.com/amplifier/comments/commentRss/423348.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/amplifier/services/trackbacks/423348.html</trackback:ping><description><![CDATA[做GUIE序的时候,通常有个后台工作U程在努力工作,但是中间又需要一些暂停,而关闭程序的时候,必须立即l束那个U程Q退出程序,也有的时候需要停止后台线E,但不关闭E序。例如,做一个目录监控程序,发现目录中有文g的时候,执行一定的操作Q执行完之后没有文g了,p暂停一下,q几U或几分钟再ơ检,q时候就要对U程q行暂停操作Q如果在暂停的时候,用户要关闭程序,必马上停止线E,如果用户需要暂停检,按下某个按钮后,需要让U程马上停止Q但再次按下某个按钮Q线E又必须马上开始?br /> <br /> 以前我都是通过停止标记和用Thread.sleep(time)来完成的Q后台线E的每次循环都要查停止标讎ͼ如果发现停止标记已设定,׃再@环,退出线E,在线E内部,如果需要暂停,执行Thread.sleep(time)。通过把线E的setDaemon(true)ҎQ还可以让线E作为后台线E,当图形界面关闭后Q线E也自动退出?br /> <br /> 但是Q这U方式有个问题,如果我需要在囑Ş界面上点L钮来停止U程Q但q不退出程序,而点L钮的时候线E正处于sleep状态,对它没有Q何办法,只能让它醒过来再操作Q如果sleep的时间比较长Q例?分钟Q那么点L钮之后,用户最多要{?分钟才能把线E停下来?span style="text-decoration: line-through;">当然QThread对象有个interruptҎQ但是已l被标记期,一般不使用了?/span><span style="color: red;">感谢评论?/span><a style="color: red;" id="AjaxHolder_Comments_CommentList_ctl00_NameLink" target="_blank">watchzerg</a><span style="color: red;"></span><span style="color: red;">的提醒,Thread的interrupt()q没有标Cؓq期Q可以按照他的说法来操作Q更为简单?/span><br style="color: red;" /> <br /> 怎么让线E能暂停Q又能随时叫醒呢Q原来Java里最原始的对象Objectp带此功能?br /> <br /> 每个Object都有wait(time)和notify()ҎQ前者就是让拥有该Obejct的线E处于暂停状态,后者则让线E马上唤醒,通过q两个方法,p够满上q的所有要求?br /> <br /> 首先Q徏立一个同步对象:<br /> Object syncObj = new Object();<br /> <br /> 然后在线E中需要暂停的地方Q调用该对象的wait(time)ҎQ?br /> <div>synchronized (syncObj) {<br />        syncObj.wait(60*1000);<br /> }<br /> <br /> 在图形界面的按钮监听事g中,对该对象执行notify()ҎQ?br />         button_1.addSelectionListener(new SelectionAdapter() {<br />             @Override<br />             public void widgetSelected(SelectionEvent e) {<br /> <br />                 thread.setStop(true); <div>                synchronized (syncObj) {<br />                         syncObj.notify();<br />                  }<br />                 //Z{待U程退出,q可以加上以下语句:<br />                 thread.join();</div> <br />             }<br />         });<br /> <br /> </div><img src ="http://www.tkk7.com/amplifier/aggbug/423348.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/amplifier/" target="_blank">amp@java</a> 2015-03-10 16:52 <a href="http://www.tkk7.com/amplifier/archive/2015/03/10/423348.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Eclipse导出的可执行JAR文g启动非常?/title><link>http://www.tkk7.com/amplifier/archive/2015/03/10/423344.html</link><dc:creator>amp@java</dc:creator><author>amp@java</author><pubDate>Tue, 10 Mar 2015 07:07:00 GMT</pubDate><guid>http://www.tkk7.com/amplifier/archive/2015/03/10/423344.html</guid><wfw:comment>http://www.tkk7.com/amplifier/comments/423344.html</wfw:comment><comments>http://www.tkk7.com/amplifier/archive/2015/03/10/423344.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/amplifier/comments/commentRss/423344.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/amplifier/services/trackbacks/423344.html</trackback:ping><description><![CDATA[Eclipse有个功能是把整个项目打包成一个可执行的Jar文gQ里面包含了所有项目引用了的库Q如果电脑上安装了JREQ直接双d可以启动Q看h很方便,如下图所C:<br /><img alt="" src="http://www.tkk7.com/images/blogjava_net/amplifier/导出1.JPG" height="547" width="626" /><br />可以选择把所有类库打包进去,也就是Jar里面q包含一堆JarQ?br /><img alt="" src="http://www.tkk7.com/images/blogjava_net/amplifier/导出2.JPG" height="110" width="450" /><br />q可以生成ant脚本Q?br /><img alt="" src="http://www.tkk7.com/images/blogjava_net/amplifier/ant.JPG" height="50" width="141" /><br /><br />生成的jar文gQ可以直接通过java -jar xx.jar启动Q简单快捗?br /><br /><br />然而,q样导出来的可执行jarQ启动速度却非常慢Q这跟包的大有兟뀂有个项目导出来的包?0MBQ结果启动需要近一分钟Q在性能差的电脑上,甚至要几分钟Q就是你执行完命令后Q没有Q何界面显C,但是查看d理器发现javaq程的CPU占用率在动Q说明正在努力启动,q了一D|间之后界面突然显C出来,直让人崩溃。可是在Eclipse里面q行Q却是一点就开?br /><br />我开始尝试羃导出的包。但是Eclipse的导出对话框q没有提供需要打包哪些库的选项Q都是默认把所有库都打包进去,但是它可以生成ant脚本Q可以通过~辑ant脚本的方式来减少不必要的库。经q多ơ尝试,l于?0MB的包~成?7MBQ启动速度快了一些,但是依然需要半分钟以上?br /><br />后来觉得Q能不能不打包直接运行呢Q于是把导出来的包用压羃软g解压Q再把里面包含的jar包l解压,最后得C堆没有压~的class文gQ再通过指定classpath的方式,直接q行E序入口classQ发现启动速度和在Eclipse里面一P一点就开?br /><br />打包的好处是部v单,只需要一个文Ӟ但带来的~点实在不能忍,打散的方式部|v来稍微难一点,但是启动速度够快Q对普通用h_q个才是最重要的?br /><br />当然Q还有一U方式是像Eclipse那样Q启动时昄一个图片,底下一个进度条昄启动q度Q不q这样也加大了工作量Q而且每次都要{那q度条,实际上也很烦?img src ="http://www.tkk7.com/amplifier/aggbug/423344.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/amplifier/" target="_blank">amp@java</a> 2015-03-10 15:07 <a href="http://www.tkk7.com/amplifier/archive/2015/03/10/423344.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>用JavaVC替换JMFq接摄像?/title><link>http://www.tkk7.com/amplifier/archive/2015/02/15/422936.html</link><dc:creator>amp@java</dc:creator><author>amp@java</author><pubDate>Sun, 15 Feb 2015 03:41:00 GMT</pubDate><guid>http://www.tkk7.com/amplifier/archive/2015/02/15/422936.html</guid><wfw:comment>http://www.tkk7.com/amplifier/comments/422936.html</wfw:comment><comments>http://www.tkk7.com/amplifier/archive/2015/02/15/422936.html#Feedback</comments><slash:comments>7</slash:comments><wfw:commentRss>http://www.tkk7.com/amplifier/comments/commentRss/422936.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/amplifier/services/trackbacks/422936.html</trackback:ping><description><![CDATA[     摘要: JMF太老了Q各U问题得不到解决QOracle也没再升U过Q如果能扑ֈC西,最好能把它扔掉。最qOpenCV比较火,q有人用Java装了OpenCVQ成立了JavaCV目Q通过攚wVideoInputq个ZC语言的项目,能够用Java来调用摄像头QJMF可以扔掉了。如果想试Q非常简单,把那些编译好的jar文g攑օBuild Path卛_Q如果是在Windows X86环境下,则只需要把?..  <a href='http://www.tkk7.com/amplifier/archive/2015/02/15/422936.html'>阅读全文</a><img src ="http://www.tkk7.com/amplifier/aggbug/422936.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/amplifier/" target="_blank">amp@java</a> 2015-02-15 11:41 <a href="http://www.tkk7.com/amplifier/archive/2015/02/15/422936.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>【{】EXCEL VLOOKUP用法http://www.tkk7.com/amplifier/archive/2014/12/16/421440.htmlamp@javaamp@javaTue, 16 Dec 2014 01:10:00 GMThttp://www.tkk7.com/amplifier/archive/2014/12/16/421440.htmlhttp://www.tkk7.com/amplifier/comments/421440.htmlhttp://www.tkk7.com/amplifier/archive/2014/12/16/421440.html#Feedback0http://www.tkk7.com/amplifier/comments/commentRss/421440.htmlhttp://www.tkk7.com/amplifier/services/trackbacks/421440.html

其实我觉得用javal合SQL来做同样的事情更单,但是EXCEL的好处是不用~程Q虽焉面有好多陷阱Q但是掌握之后能够熟l运用还是比每次都编个程序更单。VLOOKUP函数的用比较复杂,搞了好久都不明白Q终于找C下面q篇文章Q解决了很多问题?/p>

以下是{载文章,原来的出处不知道是哪里,应该是来?div>http://www.excelpx.com

但具体的地址不详?br />



VLOOKUP函数是Excel中几个最重函C一Qؓ了方便大家学习,兰色qL牚w对VLOOKUP函数的用和扩展应用Q进行一ơ全面综合的说明。本文ؓ入门部分

     一、入门

      VLOOKUP是一个查扑և敎ͼl定一个查扄目标Q它p从指定的查找区域中查找返回想要查扑ֈ的倹{它的基本语法ؓQ?/p>

      VLOOKUPQ?span style="color:#ee0000">查找目标Q?span style="color:#259625">查找范围Q?span style="color:#3e18d7">q回值的列数Q?span style="color:#4e4418">_OR模糊查找)

下面以一个实例来介绍一下这四个参数的?/p>

     ?Q如下图所C,要求Ҏ表二中的姓名Q查扑֧名所对应的年龄?nbsp; 

   公式QB13 =VLOOKUP(A13,$B$2:$D$8,3,0)  

   参数说明Q?/p>

       1 查找目标Q就是你指定的查扄内容或单元格引用。本例中表二A列的姓名是查找目标。我们要Ҏ表二?#8220;姓名”在表一中A列进行查找?/p>

        公式QB13 =VLOOKUP(A13,$B$2:$D$8,3,0)   

       2 查找范围Q?span style="color:#000000">VLOOKUP(A13,$B$2:$D$8,3,0) Q?/span>Q?指定了查扄标,如果没有说从哪里查找QEXCEL肯定会很为难。所以下一步我们就要指定从哪个范围中进行查找。VLOOKUP的这W二个参数可以从一?单元格区域中查找Q也可以从一个常量数l或内存数组中查找。本例中要从表一中进行查找,那么范围我们要怎么指定呢?q里也是极易出错的地斏V大家一定要?意,l定的第二个参数查找范围要符合以下条件才不会出错Q?/p>

        A 查找目标一定要在该区域的第一列。本例中查找表二的姓名,那么姓名所对应的表一的姓名列Q那么表一的姓名列Q列Q一定要是查扑֌域的W一列。象本例中,l定的区域要从第二列开始,?B$2:$D$8Q而不能是$A$2:$D$8。因为查扄“姓名”不在$A$2:$D$8区域的第一列?/p>

        B 该区域中一定要包含要返回值所在的列,本例中要q回的值是q龄。年龄列Q表一的D列)一定要包括在这个范围内Q即Q?B$2:$D$8Q如果写?B$2:$C$8是错的?/p>

       3 q回值的列数Q?span style="color:#000000">B13 =VLOOKUP(A13,$B$2:$D$8,3,0)Q?/span>q是VLOOKUPW?个参数。它是一个整数倹{它怎么得来的呢。它?#8220;q回?#8221;在第二个参数l定的区域中的列数。本例中我们要返回的?#8220;q龄”Q它是第二个参数查找范围$B$2:$D$8的第3列。这里一定要注意Q列C是在工作表中的列敎ͼ不是W?列)Q而是在查找范围区域的W几列。如果本例中要是查找姓名所对应的性别Q第3个参数的值应该设|ؓ多少呢。答案是2。因为性别?B$2:$D$8的第2列中?/span>

       4 _OR模糊查找Q?span style="color:#000000">VLOOKUP(A13,$B$2:$D$8,3,0)  Q,最后一个参数是军_函数_和模p查扄关键。精即完全一P模糊卛_含的意思。第4个参数如果指定值是0或FALSEpC精查找,而gؓ1 或TRUE时则表示模糊。这里兰色提醒大家切记切讎ͼ在用VLOOKUP时千万不要把q个参数l漏掉了Q如果缺这个参数默为gؓ模糊查找Q我们就无法_查找到结果了?/span>  

      好了Q关于VLOOKUP函数的入门应用p到这里,VLOOKUP函数可不只是q么单的查找Q我们讲的还只是1/10的用法。其他的没法在一文章中说明。敬h?#8220;VLOOKUP的用方?q阶?#8221;吧?/p>

 

上一讲咱们学习了VLOOKUP的基本用法和CZQ本讲将介绍VLOOKUP在用中的一些小技巧?/p>

Excel函数速成教程全系?包括VLOOKUP函数,IF函数,offset函数,sumif函数{?6个函敎ͼ预计6月初全部录制完成Q现已在淘宝开始预订(8折优?Q地址Q?a style="color:#b32bd5; text-decoration:underline">http://item.taobao.com/item.htm?id=17500884347

一、VLOOKUP多行查找时复制公式的问题

    VLOOKUP函数的第三个参数是查找返回值所在的列数Q如果我们需要查找返回多列时Q这个列数值需要一个个的更改,比如q回W?列的Q参数设|ؓ2Q如 果需要返回第3列的Q就需要把值改?。。。如果有十几列会很麻烦的。那么能不能让第3个参数自动变呢?向后复制时自动变?Q?Q?Q?。。?nbsp;  

    在EXCEL中有一个函数COLUMNQ它可以q回指定单元格的列数Q比?/p>

         =COLUMNSQA1Q?q回?

         =COLUMNSQB1Q?q回?

   而单元格引用复制时会自动发生变化Q即A1随公式向叛_制时会变成B1QC1QD1。。这h们用COLUMN函数可以{换成数字1Q?Q?Q?。。?nbsp;

    例:下例中需要同时查找性别Q年龄,w高Q体重?/p>

   

     公式Q?VLOOKUP($A13,$B$2:$F$8,COLUMN(B1),0)

  公式说明Q这里就是用COLUMNQB1Q{化成可以自动递增的数字?/p>

二、VLOOKUP查找出现错误值的问题?/span>

    1、如何避免出现错误倹{?/span>

     EXCEL2003 在VLOOKUP查找不到Q就#N/A的错误|我们可以利用错误处理函数把错误D{换成0或空倹{?/p>

      卻I=IF(ISERROR(VLOOKUPQ参数略Q?,"",VLOOKUPQ参数略Q?/p>

     EXCEL2007QEXCEL2010中提供了一个新函数IFERRORQ处理v来比EXCEL2003单多了?/p>

     IFERRORQVLOOKUPQ)Q?") 

    2、VLOOKUP函数查找时出现错误值的几个原因

      A、实在是没有所要查扑ֈ的?/p>

      B、查扄字符串或被查扄字符中含有空格或看不见的I字W,验证Ҏ是用=号对比一下,如果l果是FALSEQ就表示两个单元格看上去相同Q其实结果不同?/p>

      C、参数设|错误。VLOOKUP的最后一个参数没有设|成1或者是没有讄掉。第二个参数数据源区域,查找的g是区域的W一列,或者需要反回的字段不在区域里,参数讄在入门讲里已注明Q请参阅?/p>

     D、数值格式不同,如果查找值是文本Q被查找的是数字cdQ就会查找不到。解x法是把查扄转换成文本或数|转换Ҏ如下Q?/p>

     文本转换成数|*1?-?1

     数D{抱成文本Q?amp;""  

     VLOOKUP函数的初U篇p到这里了Q咱们下一讲将介绍VLOOKUP的模p查找有、反向查扄?/p>

 

 在学习了VLOOKUP的入门和初񔽋后Q本文将带将大家学习VLOOKUP的进阶篇QVLOOKUP的模p查找?/p>

    一、字W的模糊查找    

        在A列我们知道如何查扑֞号ؓ“AAA”的品所对应的B列h|卻I

    =VLOOKUPQC1,A:B,2,0)

       如果我们需要查扑֌?#8220;AAA”的品名U怎么表示呢?如下图表中所C?/p>

     公式=VLOOKUP("*"&A10&"*",A2:B6,2,0)  

    公式说明QVLOOKUP的第一个参数允怋用通配W?#8220;*”来表C包含的意思,?攑֜字符的两边,?*" & 字符 & "*"?/p>

   二、数字的区间查找

      数字的区间查扑֍l定多个区间Q指定一个数可以查扑և它在哪个区间q返回这个区间所对应的倹{?/p>

    在VLOOKUP入门中我们提CVLOOKUP的第4个参敎ͼ如果?或FALSE是精查找,如果?或TRUE或省略则为模p查找,那么实现区间查找正是W?个参数的模糊查找应用?/p>

    首先我们需要了解一下VLOOKUP函数模糊查找的两个重要规则:

    1?span style="color:#0831d6">引用的数字区?span style="color:#d60808">一定要从小到大排序。杂q数字是无法准查扑ֈ的。如下面A列符合模p查扄前题QB列则不符?/span>?/span> 

    

    2?span style="color:#000000">模糊查找的原理是Q?span style="color:#de3910">l一定个敎ͼ它会扑ֈ和它最接近Q但比它的那个?/span>。详见下图说明?/p>

    

   最后看一个实例: 

    例:如下图所C,要求Ҏ上面的提成比率表Q在提成表计表中计每个销售额的提成比率和提成额?/p>

    

   公式Q?VLOOKUP(A11,$A$3:$B$7,2)

   公式说明Q?/span>

    1、上q公式省略了VLOOKUP最后一个参敎ͼ相当于把W四个参数设|成1或TRUE。这表示VLOOKUP要进行数字的区间查找?/p>

    2、图中公式中在查?000时返回比率表0所对应的比?%Q原因是0?0000?000最接近Q但VLOOKUP只选比查找值小的那一个,所以公式会q回0所对应的比?%?/p>

 

 前言Q前面我们分别学习了VLOOKUP函数的入门、初U和q阶。今天我们学习VLOOKUP函数的高U应用部?VLOOKUP函数的数l应用。(本文由兰色惛_创,转蝲h明{?a title="excel_英培训" target="_self" style="color:#b32bd5; text-decoration:underline">excel_英培训Q?/p>

 一、VLOOKUP的反向查找?/strong>

    一般情况下QVLOOKUP函数只能从左向右查找。但如果需要从叛_x找,则需要把区域q行“乑֝大挪U?#8221;Q把列的位置用数l互换一下?/p>

    ?Q要求在如下图所C中的姓名反查工号?/p>

     

    公式Q?VLOOKUP(A9,IF({1,0},B2:B5,A2:A5),2,0)

    公式剖析Q?/p>

        1、这里其实不是VLOOKUP可以实现从右臛_的查找,而是利用IF函数的数l效应把两列换位重新l合后,再按正常的从左至x找?/p>

        2、IFQ{1,0},B2:B5,A2:A5)q是本公式中最重要的组成部分。在EXCEL函数中用数l时Q前提时该函数的参数支持数组Q,q回的结 果也会是一个数l。这??不是实际意义上的数字Q而是1相关于TRUEQ?相当于FALSEQ当?Ӟ它会q回IF的第二个参数QB列)Qؓ0时返 回第二个参数QA列)。根据数l运返回数l,所以用IF后的l果q回一个数l(非单元格区域Q:{"张一","A001";"??,"A002";"杨五","A003";"孙二","A004"}

 二、VLOOKUP函数的多条g查找?/strong>

      VLOOKUP函数需要借用数组才能实现多条件查找?/p>

     ?Q要求根据部门和姓名查找C列的加班旉?/p>

     分析Q我们可以g用例1的思\Q我们的努力方向不是让VLOOKUP本n实现多条件查找,而是惛_法重构一个数l。多个条件我们可以用&q接在一P同样两列我们也可以连接成一列数据,然后用IF函数q行l合?/p>

    公式Q{=VLOOKUP(A9&B9,IF({1,0},A2:A5&B2:B5,C2:C5),2,0)}

    公式剖析Q?/p>

       1、A9&B9 把两个条件连接在一赗把他们做ؓ一个整体进行查找?/p>

       2、A2:A5&B2:B5Q和条gq接相对应,把部分和姓名列也q接在一P作ؓ一个待查找的整体?/p>

       3、IF({1,0},A2:A5&B2:B5,C2:C5) 用IFQ{1Q?}把连接后的两列与C列数据合q成一个两列的内存数组。按F9后可以查看的l果为:

       {"销售张一",1;"销售n?,5;"Z杨五",3;"销售n?,6}

       4、完成了数组的重构后Q接下来是VLOOKUP的基本查扑֊能了Q另外公式中含有多个数据与多个数据运?A2:A5&B2:B5),Q所以必M数组形式输入Q即按ctrl+shift后按ENTERl束输入?/p>

     三、VLOOKUP函数的批量查找?/strong>

     VLOOKUP一般情况下只能查找一个,那么多项该怎么查找呢?

     ? 要求把如图表中所有张一的消贚w额全列出?/p>

     分析Q经q前面的学习Q我们也有这样一个思\Q我们在实现复杂的查找时Q努力的方向是怎么重构一个查扑ֆ容和查找的区域。要惛_现多Ҏ找,我们可以Ҏ扄内容q行~号Q第一个出现的是后面连?Q第二个出现的连?。。?/p>

     公式Q{=VLOOKUP(B$9&ROW(A1),IF({1,0},$B$2:$B$6&COUNTIF(INDIRECT("b2:b"&ROW($2:$6)),B$9),$C$2:$C$6),2,)}

     公式剖析Q?/p>

        1、B$9&ROW(A1) q接序号Q公式向下复制时会变成B$9q接1Q?Q?

        2、给所有的张一q行~号。要想生成编P需要生成一个不断扩充的区域QINDIRECT("b2:b"&ROW($2:$6))Q然后在q个逐行扩充的区域内l计“张一”的个敎ͼ在连接上$B$2:$B$6后就可以Ҏ有的张一q行~号了?/p>

       3、IFQ{1Q?}把编号后的B列和Cl重构成一个两列数l?/p>

     通过以上的讲解,我们需要知道,VLOOKUP函数的基本用法是固定的,要实现高U查找,需要借助其他函数来重构查扑ֆ容和查找数组?/p>

     xVLOOKUP函数从入门到高的四VLOOKUP函数使用教程全部l束了,VLOOKUP函数在数l运中q有着其他应用Q但只是配角了,所以本pd不再介绍。由于笔者水qx限,不免有错漏之处,请大家多多指炏V?/p>



amp@java 2014-12-16 09:10 发表评论
]]> վ֩ģ壺 þþžAVѾƷ| ëƬƬѹۿ| һ| ˳޾Ʒ| ɫɫۺվ| AVרAV԰| ˾Ʒһѿ| ޾ƷƵ| Ļ߿˶Ƭ| һ| Ļѹۿ| ݺɫۺϳ| Ƶѹۿ| ޾Ʒ˿þ| www.999ƷƵۿ| ޱavӲʵ| ˳Ƶ | Ƶ߹ۿ| ۺϾþþþþĻ޹ۺһ| Ƶ߹ۿ| 츾ëXXXX| ߹ۿ鶹91Ʒ| youjizz| ȫѹɫһ| | þþƷ77777| ҹƷѹۿ| sss߹ۿѸ| ɫ| Ƶһ| aëƬȫƵ18| õӰ߹ۿ| ɬɬɬƵ߹ۿ | ޾ƷĻ鶹| 999þþѾƷ| ˳վ߹ۿ| ޾ƷƬ߹ۿ| AëƬ| ޳AVƬWWW| AVƬɫ߹ۿ| պƵһ|