Monthly Archives: September 2013

在VBA中调用Word的SaveAs出现文件许可权错误的解决案例

首先,需求是这样的:要处理的一堆word文档,有的文件名只有一串数字,很难理解,而文件正文的第一行基本上都是文章的主旨,所以需要将文件名改名为其内容的第一行,使其文档属性一目了然。 当然还是选择最简单的VBA,毕竟处理Word还是它的强项。 读取Doc文件第一行内容的代码如下: (注意,这段代码只是为了示例,实际操作还有很多分支和例外情况) 但是结果执行到SaveAs的时候,报错了。 错误代码为5487,错误消息为“由于文件许可权错误,Word 无法完成保存操作。” 开始考虑是文件权限的问题,但是有的文件是没问题的,能保存。 又考虑是否是文件名有特殊字符?发现很简单的汉字也不能保存,应该也不是特殊字符的问题。 调试的时候发现,显示貌似有问题,如图: 如上图所示,字符串的最后面貌似有个空格,但是双击进入编辑模式,又看不到空格了。 而且,用len看到的字符串长度也有问题,见附图,自己数数怎么都是7个,怎么len返回8呢,一定有什么不可见字符,而这个也应该不是空格,那能考虑的也就是回车之类的了。 所以,加入下面代码后,再看看得到的title值是什么。 从而确定造成文件保存失败的罪魁祸首就是这个回车符了。 –完–

Posted in Tech Tagged with: , , , , , ,

在VBA中调用其它程序并等待程序执行结束

这两天在用Excel写一个小工具,就是把给定文件夹下的所有文件里的压缩文件解压,并根据文件名做一定规则的文件删除。 之所以选择Excel,因为这个东西必须在Windows下使用,考虑到Excel的普遍性,而且还可以方便的添加Form来做简单的界面,就选择了它。不过最根本的原因是上次用VS开发Native的Windows程序还是2005年的事情吧。 解压程序开始的时候用的是rar.exe,即标准winrar提供的命令行工具,最后发现.zip的文件不能解压缩(也许是我没找到正确的参数),反正是对rar再也没有爱了。 后来换到7zip,强烈推荐,开源,免费,文件体积小,速度快。 解压是通过Shell函数调用7z.exe,然后就进行类似Dir的操作。 问题是,测试几次后发现每次程序执行的结果都不一样。 多线程?不应该啊,VBA没那么机灵和强大吧。 而且每次断点的时候,结果都趋于正常。 想来想去最后考虑是不是Shell的问题,网上一查果然,这厮调用后立即返回一个PID,后面的VBA代码会立即执行。。。 所以,为了正确使用Shell,必须等它执行结束后才能进行自己程序后面的处理。 网上搜了下发现一篇好文,至少在我测试的XP+Office2004和Windows Server2008+Office2011上没啥问题。 具体方法就是在头部加入API声明: 然后在需要执行其它命令的地方像下面这样写: –end–

Posted in Tech Tagged with: , , , , , , , ,

OS X下安装RabbitMQ

RabbitMQ是用Erlang写的OpenSource的消息队列(Message Queue)软件,并且有付费的商业版支持。 所谓消息,在类似JMS等现代系统里,尝尝作为一种异步操作的机制,来实现快速的轻量的信息交换。其最简单的模式就是发布-订阅( Publish/Subscribe)。 RabbitMQ的主页在http://www.rabbitmq.com/ 。 1. 安装 RabbitMQ是用Erlang编写的,所以需要先安装Erlang,如果有的话跳过这步即可(我是跳过了,系统已有)。 # brew install erlang 确保系统有Erlang环境后,即可使用brew安装RabbitMQ了,安装很简单,只需如下即可: # brew update # brew install rabbitmq 安装后需要将/usr/local/sbin添加到$PATH里去,我的环境下编辑~/.profile就行了。 具体的官方操作文档在这里: http://www.rabbitmq.com/install-homebrew.html 2. 一些简单常用的命令 2.1. rabbitmq-server rabbitmq-server用来启动RabbitMQ服务器进程: # rabbitmq-server -detached 如果不加上面的-datached,即非守护启动方式,启动后控制台被挂起,ctrl+c信号会发给其进程,从而可以直接kill掉进程。 2.2. rabbitmqctl rabbitmqctl 是RabbitMQ中间件的一个用来管理节点(Node)的命令行工具。它针对各个节点的实例进行各种配置和控制。 停止RabbitMQ应用并关闭节点(即同时停止rabbitmq的进程及Erlang虚拟机) # rabbitmqctl stop

Posted in Tech Tagged with: , , , , , ,

无觅相关文章插件,快速提升流量