• 用 Javascript 批量查找 Excel 中的文字

    比 Excel 的查找有下述优点:

    • 批量查找整个目录
    • 可以找到图形和文本框中的文字
    • 采用正则表达式查找,可以实现复杂的查找条件

    缺点是比较慢。

    // 设定值:分别是要查找的目录和查找条件
    var searchPath = "D:/temp";
    var searchPattern = /事業/i;
    
    // 正则表达式参考:
    //http://msdn.microsoft.com/en-us/library/1400241x(VS.85).aspx
    //http://msdn.microsoft.com/zh-cn/library/28hw3sce(VS.80).aspx
    
    var msoAutoShape = 1
    var msoGroup = 6
    
    var xlApp = WScript.CreateObject("Excel.Application");
    xlApp.Visible = true;
    xlApp.Interactive = true;
    var logBook = xlApp.Workbooks.Add(); // For Output
    var logSheet = logBook.Sheets(1);
    var logLine = 2;
    var outSheet = logBook.Sheets(2);
    var outLine = 2;
    
    var allFiles = new Array();
    var fso = new ActiveXObject("Scripting.FileSystemObject");
    
    GetFileList(searchPath, allFiles);
    
    var i;
    for (i = 0; i < allFiles.length; i++) {
      logSheet.Cells(logLine + i + 1, "B").Value = allFiles[i].name;
      logSheet.Cells(logLine + i + 1, "B").NoteText (allFiles[i].path);
    }
    
    for (i = 0; i < allFiles.length; i++) {
      xlApp.StatusBar = (i + 1) + '/' + allFiles.length + ': ' + allFiles[i].name;
      ProcessFile(allFiles[i], i);
    }
    
    xlApp.StatusBar = 'done.';
    
    function GetFileList(folderspec, arr) {
      var f = fso.GetFolder(folderspec);
      var fc = new Enumerator(f.SubFolders);
      for (; !fc.atEnd(); fc.moveNext())
        GetFileList(fc.item(), arr);
      fc = new Enumerator(f.Files);
      for (; !fc.atEnd(); fc.moveNext()) {
        var fo = fc.item();
        if (fo.Name.match(/.xls$/i))
          arr.push(fo);
      }
    }
    
    function ProcessFile(fo, lineNo) {
      crtLogLine = logLine + lineNo;
      logSheet.Cells(crtLogLine, "A").Value = "WORKING...";
    
      xlBook = xlApp.Workbooks.Open(fo.path, false, true);
    
      outSheet.Cells(outLine, "A").Value = fo.Name;
      var j;
      for (j = 1; j <= xlBook.Sheets.Count; j++) {
        outSheet.Cells(outLine, "B").Value = xlBook.Sheets(j).Name;
        SearchCells(xlBook.Sheets(j));
        SearchShapes(new Enumerator(xlBook.Sheets(j).Shapes));
    
      }
      xlBook.Close(false);
    
      logSheet.Cells(crtLogLine, "A").Value = "DONE";
    
    }
    
    function SearchCells(sht) {
      var i, j, ur;
      ur = sht.UsedRange;
      sht.Activate();
      for (j = 1; j <= ur.Rows.Count; j++) {
        sht.Cells(j, 1).Select();
        for (i = 1; i <= ur.Columns.Count; i++)  {
          if (sht.Cells(j, i).Value)
            if ((sht.Cells(j, i).Value + "").match(searchPattern)) {
              outSheet.Cells(outLine, "C").Value = sht.Cells(j, i).Address;
              outSheet.Cells(outLine, "D").Value = sht.Cells(j, i).Value;
              outLine++;
          }
        }
      }
    } 
    
    
    function SearchShapes(en) {
      for (; !en.atEnd(); en.moveNext()) {
        var shp = en.item();
        switch(shp.Type) {
        case msoGroup:
          SearchShapes(new Enumerator(shp.GroupItems));
          break;
        case msoAutoShape:
          if (shp.TextFrame.Characters().Text) 
            if (shp.TextFrame.Characters().Text.match(searchPattern)) {
              outSheet.Cells(outLine, "C").Value = shp.Name;
              outSheet.Cells(outLine, "D").Value = shp.TextFrame.Characters().Text;
              outLine++;
          }
          break;
        default:
          break;
        }
      }
      
    }
    // 对付控件工具栏上的 TextBox:
    // sheet.Shapes("TextBox1").DrawingObject.object.Text
    

    用法:把这个文件存为.js文件,修改好参数之后直接双击即可。
    查找的结果保存在新建的 Excel 文件的 Sheet2 里。
    等的不耐烦的时候可以直接关掉 Excel, 它会自行报错退出。

  • 摩托罗拉的摄像头和 Windows 7 合不来

    我有一部摩托罗拉的 ROKR E6,一只用它插在 USB 口上当摄像头用,还能顺便给它充电。
    这个设计还是很实用的,出门就可以少带一样东西。(我买笔记本的时候还没流行内置摄像头)
    自从升级到 Windows 7 之后它就不能用了。我还以为是我的手机坏了。
    插上之后能正常识别为 Motorola USB camera。就是没法用,图像一直是黑的,也不肯充电。
    重启手机,重启电脑。折腾很久都无济于事。

    经过一番调查发现,原来 ROKA 的摄像头驱动从 Vista 开始就不灵了。
    是换手机呢,还是换回XP?这是一个问题……
    暂时先凑合用 VMWare 装个 Skype 专用系统,幸亏 VMWare 里的 XP 还是那么好用。

    参阅(英文):

  • 赤手空拳看 nfo

    适用于 Windows,没有乱码。

    cmd /k chcp 437 & more %1 & pause
    
  • Chrome 的两个缺点

    慢慢习惯使用 Google Chrome 作为默认浏览器了。特别喜欢下载东西时的那个动画效果 (我看东西只看表面 :P)。这段时间发现其两个缺点,或者说设计得不够人性化的地方:

    1. 全屏幕的时候看不到 Tab。这个及其不爽,只能用 Ctrl+Tab 抹黑切换。不如 Firefox 和 IE8。(Safari就不用说的,人家根本就没有全屏模式。不知道笔记本的屏幕小啊……)

    简单的一句 “Exit full screen (F11)”  有点太把人当傻瓜了。

    chrome-2

    2.  Tab 的关闭按钮的位置不合理。当 Tab 比较多的时候,很容易不小心按到。这一点也是笔记本特有的吧,现如今的台式机鼠标多半都应该较精确了。

    Firefox、Safari 全是这样的。我印象中Maxthon好像是把关闭放在右上角的,开始我还很不习惯,现在明白这样设计的好处了。

    IE8 有点不同: 只有当前的Tab才有关闭按钮。当然,这样又有另外一个缺点:每关闭一个其他窗口,都得按两次鼠标。有得必有失呵。
    chrome-1

  • X40 成功升级至 Windows 7 build 7106

    7106除显卡驱动外全部可以通过 Windows Update 得到。

    显卡驱动的安装过程依然不顺利,但结果是完美的,见左图。

    1. 开始直接装 6.14.10.3722 版的驱动,重启后得到两个黄感叹号的设备。
    2. 强制升级成 945。重启,依然是黄感叹号。
    3. 再装成 855 ,连续重新启动两次。完美了。

    驱动的地址参考 Intel 855 (82852/82855) 的 Windows 7 驱动

  • 在 Windows 7 中安装 SEP

    2009年4月11日更新:SEP 11.0.4014.26 在 Windows 7 build 7077 中可以正常安装,不需要下述步骤了。

    ———-

    如何在 Windows 7 中安装 Symantec Endpoint Protection 11 MR4:

    1.  运行SEP client 目录里的 LUSETUP.EXE

    2.  点 Yes 开始安装 LiveUpdate (此窗口可能会弹在其他窗口后面)

    3.  <等它装好>

    4.  点 OK (此窗口也可能会弹在其他窗口后面)

    5.  重启机器

    6.  登录

    7.  双击 SEP client 目录里的 setup.exe

    8.  按照安装向导的指示进行安装

    9.  让它自动运行 LiveUpdate (选择让他运行,或者选典型安装)

    10. 重启

    据称适用于 build 7000 的 x32 版和 x64 版。我还没亲身尝试,因为正在下载更新的 SEP。早怎么没找到这篇文章呢……

    英文原文:

    http://www.symantec.com/connect/forums/windows-7-beta-and-sep-11-mr4

  • Intel 855 (82852/82855) 的 Windows 7 驱动

    2009/4/12 更新:完美了。但我却不知道是为什么……

    dxdiag3722

    我不得不承认Windows比我想象的还要奇妙。本来是打算尝试一下 universe666 提供的 3762,结果奇迹发生了:

    我第一次重启,驱动回滚到了不知道我啥时候装的一个3722版本,但是是带黄感叹号的。
    再重启,完美了,甚至连 AGP Texture Acceleration都是 Enabled 状态了。可以看到显存的大小误显示为7M,目前还没发现这有啥不良影响。
    再重启,还是完美的状态。
    而在这三次启动之间我啥也没做。

    Windows 7 真是个神奇的东东……

    3722 的来源很可能是下面的 JACK 网友留的地址。不知道怎么下载的朋友请留言,我 email 发给你。(你的email地址只有我才能看到,不会公开)

    想来3722和3762应该都能用的,所不同的是3722是能打开AGP贴图加速。据说个别游戏需要这个才能流畅,我是没碰到过。Windows 就是重启重启再重启……

    我还悟出来一点:原来 Intel 所谓“改进”驱动只是想把老显卡越折腾越差,让你买新的,太坏了!

    2009/4/11 更新:突然发现竟然能够顺畅播放 720P了。似乎是在分辨率设定那里按过一次确定之后就好了。在dxdiag里面能够看到视频加速已经是生效的状态。

    dxdiag

    2009/4/10 更新: “蝶影恋花”网友提到 6.14.10.3762(14.1.0.3762) 这个版本 可以用,结果验证结果如下:

    在X40 (855GM)上能安装,安装后要求重新启动,重新启动之后它又安装,装完了又建议重新启动,如此循环不止……

    如果不重新启动的话,效果基本和下面的办法一样,只是不能休眠或睡眠。优点是比下面的办法简单的多。

    —————–

    上了很多论坛,看了很多文章,经过了无数次蓝屏和重启的尝试,我的 Thinkpad X40 的 855芯片的驱动终于有了一点点进展。

    先说结果:

    1. 没有黄感叹号
    2. 能够正常修改分辨率
    3. 能够休眠,睡眠
    4. 能够顺畅全屏幕播放Divx、rmvb、720P高清。

    为啥说是“半”解决:

    1. 你不能关机或重新启动:重新启动之后就会回滚到标准SVGA驱动。(再重复后面的步骤应该还可以,麻烦……)
    2. 还不能流畅播放 720P 电影。本来在Windows XP 下面是能够正常播放的

    windows7-82855

    看见了吧?

    “The drivers for this device will be uninstalled when the machine is restarted. Any changes you make to this device will not be preserved.”

    Intel 真黑呀,就是明确不支持 Windows 7。非得逼咱升级。有种你倒是推出一款 X40能升级的芯片呀……

    系统评分的 Graphics 也从 1 升成了 1.9。

    windows7-score-new

    最大分辨率也不再只是 1024×768。

    resolutions-all

    如果你还是有兴趣的话,下面是实现的步骤:

    1. 下载官方的最新 815 的 XP 驱动,解压缩备用。不是最新的想必也可以,只要别装那个会蓝屏的版本(就是那个从 Vista 里导出的版本)。
    2. 不管你原来装了啥驱动,都把两个显卡驱动强装成系统自带的965或者 945的驱动。
    3. 重新启动之后她们自然都是黄感叹号。“Update Driver Software…”,指定第一步解开的驱动力的Win2000目录。
    4. 装好不要重新启动!好了,这就是上图看到的最佳状态。
    5. 最好不要打开Intel 的那个设置画面,不然它似乎会出问题。目前看到的坏处是分辨率最高只能上到 1024×768了。但是我无意中盖上屏幕之后再打开,它又恢复了。
  • 实战 X40 升级 SSD(顺便加内存升 Windows 7)

    昨天是 SSD 硬盘送货的日子。指定上午9点到12点。本来以为9点就会到的,没想到等啊等,等到11点半,肚子都饿了才来到。好大一个箱子。里面装满的慢慢的泡沫塑料。日本这边的包装真是没得说。硬盘,显卡先捞出来,然后捞了半天才捞到内存条。先上硬盘的图:

    PhotoFast G-Monster-1.8"IDEPhotoFast G-Monster-1.8"IDE

    注意到这里标的是 3.3V,而不是 3.3V 或 5V ,和台湾标的不一样。我特意写信问了日本的 PhotoFast,回信告诉我就是3.3V的,“如果你用了5V的电源我们可能不会提供保修”。这个问题以后再调查。

    PhotoFast G-Monster-1.8"IDE

    先打开后盖,把内存条换上去。这个过程很顺利。下面的照片上面是新的 1G 现代条,下面是以前的 512M BUFFALO(看上去也是现代的颗粒)。

    现代1G 和 BUFFALO 512M 对比图现代1G 和 BUFFALO 512M 对比图(背面)

    装好内存以后,开机验证,没问题。加上板载的256M,变成了1.25G内存。

    下面开始搞硬盘。先让新旧2代硬盘来几个合影。

    PhotoFast 64G 和 HITACHI 40G的合影(正面)PhotoFast 64G 和 HITACHI 40G的合影(背面)

    再来两张单身照。

    PhotoFast G-MONSTER 1.8“ 64G IDE

    我对 PhotoFast G-MONSTER 1.8“ 64G IDE 的评价:就是山寨嘛……

    除了整片有张图片之外,整个就跟软盘似的,连个说明都没有。

    外包装盒倒还像是那么回事儿。

    闲话少说,开装。我很认真的把原来的硬盘从盒子里拆下来,把这个黑漆漆的家伙装进去,然后开始往X40里面塞。结果塞了半天塞不进去,汗……

    warrenwang 说的果然没错:“SSD直接插入X40 即可,不要再把原來HD的機架插上,不然不會WORK。” 把两个硬盘比了一下,针的位置不太一样,大概有一两毫米的差距。遂把盒子拆掉,直接插进去,结果更汗:开机之后硬盘灯常亮,看不到这块盘…… 赶紧拔出来。插进去容易拔出来难,在2个螺丝刀的帮助下终于拔了出来。难道是跳线不对?再次抱怨这个山寨货,也不说条线是怎么跳的。看了看我原配的硬盘上面是直接没有跳线帽的,于是把跳线帽拔掉,再插进去。结果仍然是硬盘灯常亮。肚子咕咕叫了,给PhotoFast 和代理店写信,做饭吃先。

    叠叠乐

    代理店很快回信了,他们认为很可能是盘是坏的,让我寄给他们看看。我打算收拾东西亲自去他们店里跑一趟,出门之前我又突然想起来,既然它的针有偏差,我摸黑插进去的时候会不会插歪掉呢,抱着试试看的心情,我开始把我的机器大卸八块了:

    p1000062

    硬盘就插在左下角这个地方,这下插准了。

    p1000061

    谢天谢地,总算能找到它了。

    p1000057

    在盖上盖子之前,还有一个惊喜的发现:怪不得我的喇叭最近一直不响,原来是上次那个粗心的维修点给我少插了一个插头!

    p1000065

    盒盖,上螺丝,丢了一个螺丝钉,丢了就丢了吧。

    上电,没反应,汗…… 拆掉键盘,检查了一遍,没看到那个螺丝钉,把飞线的位置调整了一下,重新盖上,上螺丝。谢天谢地,终于启动了。接下来装 Windows 7。

    (出差没带光驱,手头能启动的只有这个安装 Windows 7 的移动硬盘了。)

    一切都好,就是显卡没有驱动程序。先测试一下硬盘。

    CrystalDiskMark,左侧为原装的日立40G。右侧为新的PhotoFast 64G:

    newc

    HD Tune基准测试:(下面的 XP 风格为原装的日立40G,下同)

    newc-1oldc-1

    对照,这是一个5400转的3.5吋USB外置硬盘:

    usb-1

    文件基准测试:

    newc-2

    oldc-2

    随机存取:

    newc-3

    oldc-3

    测试完毕,下面开始搞 Intel 82855 的 Windows 7 驱动,暂时以失败告终,所以只是想简单知道答案的就不用看下去了。我一共试了4个版本:

    6.14.10.3722: 这个不记得是从哪儿弄来的,有人说成功了,我这装了没反应。

    6.14.10.4497: 这个是从Intel 官方网站下载的最新版本。装了之后看似正常,重启之后安装,最后形成两个带黄感叹号的设备。然后就进入了安装-重启-安装-重启的死循环。强装 915的驱动也无效。

    6.14.10.4656:  这个是 水际天成 网友提供的。jerrycrystal 也推荐过这个版本。

    然而我装这个之后直接蓝屏。按两位说的办法反复尝试,都是以失败告终。

    6.14.10.4764: 这个是从Intel 官方网站下载的915GM最新版本。里面没有855的驱动,直接强装 915。这个是最“成功”的一个:黄感叹号没了,只是画面变成了640X480@16色(不是16位高彩,是16种颜色,我自上大学以来就没见过这样的)。怎么折腾他都坚持这个分辨率。

    到这里已经不早了,睡觉。喇叭也响了,硬盘的啪啦啪啦声也彻底没了,听着优雅的轻音乐,欣然入眠。

    今天早上开始想办法装 XP 试试看。下载 tm12345789 提供的 U 盘 DOS 启动工具。用我的 SanDisk U3盘成功启动,安装,然后装的XP拒绝启动。我以为是Windows 7 破坏了启动分区,于是再进 Windows 7 的PE,

    bootsect /nt52 C: /mbr

    修复很成功,但它依然不肯启动。到这时候,已经是今天中午了,我还得靠这机器和家里联系呢,遂装回Windows 7。现在就是这个状态:
    干什么都很爽,只是由于没有显卡驱动不能看视频。以前用XP的时候是能顺利看 720P的,现在连DIVX也没法看,一愣一愣的。暂时不能看电影也好,这样才有时间写blog (不然依我的懒劲,您就看不到这一篇了),听音乐看书。

    补张图,该盘在Windows 7 里面的评分达到了恐怖的 5.9:

    windows7-score

  • Synergy: 用一套鼠标键盘操作多台电脑

    Synergy 是一款能够让使用者仅用一套键盘鼠标,就同时操控多部计算机的免费工具软件。使用者能够在包括 Windows 、 Linux 、 Mac OS 等不同的系统上安装它,并且在设定好主从关系后,就能够透过一组键盘鼠标来进行多部计算机的操控。
    这样子的操控方式,对于拥有笔记型计算机的人来说尤其方便,你能够将笔记型计算机与家中的桌上型计算机设定好主从关系,如此一来,就能够利用笔记型计算机来操控两部计算机,不需要额外的切换装置的帮忙,就能够方便地完成许多工作。
    使用者在使用 Synergy 时要特别注意的是,必须要仔细设置主从关系的切换设定,如此才能够顺利地透过鼠标光标的移动来切换目前所使用的计算机,不至于因为鼠标光标一移到新计算机,就无法切换为原计算机的窘境。

    http://synergy2.sourceforge.net/

    似乎还没有中文主页,值得翻译推广。

  • 今天cumt.edu.cn的DNS咋了?

    CUMT.edu.cn 的域名解析不了了。nslookup的结果:

    > set q=ns

    > cumt.edu.cn
    Server:  ns-kg011.ocn.ad.jp
    Address:  211.129.14.134

    DNS request timed out.
    timeout was 2 seconds.
    DNS request timed out.
    timeout was 2 seconds.
    *** Request to ns-kg011.ocn.ad.jp timed-out
    > sjtu.edu.cn
    Server:  ns-kg011.ocn.ad.jp
    Address:  211.129.14.134

    Non-authoritative answer:
    sjtu.edu.cn     nameserver = dns.sjtu.edu.cn
    sjtu.edu.cn     nameserver = apple.sjtu.edu.cn

    apple.sjtu.edu.cn       internet address = 202.120.2.100
    dns.sjtu.edu.cn internet address = 202.120.2.101

    难道是欺负我在日本?