博文

目前显示的是 四月, 2012的博文

用JS做了一个POI表头合并语句的生成器

最近的项目里面要用到POI,不得不说,这比我之前用到的PHPExcel的效率高太多了,本来是件很轻松的事情了。结果碰到的问题就是这个项目的部署限制非常多,不允许在项目目录下放置Excel模板文件,也不允许在数据库中使用BLOB字段存放模板。这样就导致需要手动的将现有的Excel文件的标头用POI语句写出来。 本来这个事情也不算是个很困难的问题,但是碰到一些特别复杂的多行标头,麻烦就来了……因为行特别多,合并单元格需要数来数去的很麻烦,这就让我萌生了想要自动化完成的想法。 还好,Excel自07版之后就是以XML文件为基础的,不再是以二进制文件为基础的了,这样就不需要借助一些第三方工具来读取二进制的配置,只需要把相关的XLSX模板转化为XML文件,然后对XML文件进行操作就好了。 演示在 这里 具体的使用方式如下: 首先先把模板文件另存为Excel 07以上的格式,即XLSX格式。 将文件的后缀名改为RAR,例如原有的为01.xlsx,变更后即为01.rar。 用WinRAR或者其他压缩工具解包。得到一个文件夹。提取其中的xl/worksheets/sheet1.xml文件。(如果有多个标签页,应该是挨个编号的) 把内容拷贝到下面的文本框中,点生成语句,就会自动生成POI语句了。 源代码如下: $().ready(function(){ $("#submit").click(function(){ if($("#input").val() == ""){ alert("请输入内容!"); return false; } //开始从XML文件中把 列抓出来 var str = $("#input").val(); str = str.replace(/^[\s\S]+ /,""); str = str.replace...

最近的工作感触,记录一下

首先就是发现自己对Jquery的理解还是皮毛啊,根本就没有发现它的精髓,一直都只是会用一些change、blur之类的事件+匿名函数的方式,但是上次遇到了动态添加元素并且绑定事件的情况下就没辙了,后来发现Jquery还有live这样的事件委派发方法。 当需要在页面上动态的添加元素,并且同时要给元素添加事件的时候,老的办法自然就是在HTML里面写上一大堆的onclik=、onchange=之类的,但是作为代码洁癖的我自然是不能这么写的,之前我采用的办法是把之前写的绑定事件再次绑定,但是这次我碰上了麻烦,因为我发现这样做了之后之前存在的同类元素的事件并没有消失,重复绑定之后造成了事件会重复执行。Live这样的事件委派方法就解决了这样的问题了。 先看看Live方法的定义: .live() 方法能对一个还没有添加进DOM的元素有效,是由于使用了事件委托:绑定在祖先元素上的事件处理函数可以对在后代上触发的事件作出回应。传递给 .live() 的事件处理函数不会绑定在元素上,而是把他作为一个特殊的事件处理函数,绑定在 DOM 树的根节点上。在我们的例子中,当点击新的元素后,会依次发生下列步骤: 生成一个click事件传递给 <div> 来处理  由于没有事件处理函数直接绑定在 <div> 上,所以事件冒泡到DOM树上 事件不断冒泡一直到DOM树的根节点,默认情况下上面绑定了这个特殊的事件处理函数。 执行由 .live() 绑定的特殊的 click 事件处理函数。 这个事件处理函数首先检测事件对象的 target 来确定是不是需要继续。这个测试是通过检测 $(event.target).closest('.clickme') 能否找到匹配的元素来实现的。 如果找到了匹配的元素,那么调用原始的事件处理函数。 由于只有在事件发生时才会在上面的第五步里做测试,因此在任何时候添加的元素都能够响应这个事件。 它的作用基本上和.bind() 的作用是完全一致的,只是似乎对部分事件的支持不足,但是在新版本中基本上也修正了。 $("p").live("click", function(){     $(this).after("<p>It Wor...