您现在的位置:首页 --> JavaScript --> 使用JS做文档处理
使用JS做文档处理
浏览:2057次 出处信息
最近应友人邀请, 要帮忙写个文档处理脚本, 考虑到如果使用PHP或者Perl需要在友人的机器上,搭建一个运行环境,比较复杂, 使用起来也不友好, 本着以人为本的信念, 决定采用hta实现.
其实, 在Windows平台上, js可以调用很多Windows提供的ActivexObject, 在这个意义上来说, 用js写HTA时, js已经不再是传统意义上的Web客户端脚本了, 它已经有些类似于VB了.
本文就使用js来实现文档处理, 和使用js编写ActiveX做一个简单介绍.
言归正传, 友人的需求是: 把一个文件夹下的所有文件内容都读出来, 并且每个文件做为一个Excel的Sheet, 写入一个固定Excel中.
难点 : 1. 读取文件 我们知道, js本身并没有读写文件的API。 2. 写入Excel 写入Excel,并且有多个Sheet是个难点。
解决方案: 1. 采用FileSystemObject ActiveX Object 来实现文件读取,文件夹遍历 2. 采用Excel Application ActiveX Object 来实现写Excel
采用FSO遍历文件夹:
以下是代码片段: var path = ’C:\\folder\\’; var fso = new ActiveXObject("Scripting.FileSystemObject"); //创建一个FSO实例 var dir = fso.GetFolder(path); var fc = new Enumerator(dir.files); //构建可枚举实例 var file = {}; for(; !fc.atEnd(); fc.moveNext()) { file = fc.item(); //包含文件名 alert(file); } |
写Excel:
以下是代码片段: // var files 包含了所有要文件路径的数组, 由上面的逻辑提供 var fso = new ActiveXObject("Scripting.FileSystemObject"); try { var excelApp = new ActiveXObject("Excel.Application"); } catch (e) { alert("请确保您安装了 MS-EXCEL "); return; } var excelBook = excelApp.Workbooks.Add(); var excelSheet; var current = 1; for ( var file in files ) { excelBook.Worksheets.Add(); excelSheet = excelBook.WorkSheets(current++); excelSheet.name = file; //命名sheet //开始读取文件 var fh = fso.OpenTextFile(file, 1/*reading*/); var content = ’’; while ( !fh.AtEndOfStream ) { content += fh.ReadLine(); } fh.close() excelSheet.Cells(1, 1).Value = content + ’\t’; //写入 } excelApp.ActiveWorkbook.SaveAs("C:\\TEST.XLS"); //保存Excel文件 excelSheet.Application.Quit(); |
用js来实现, 觉得最爽的就是调用ActiveX Obj, 完全不用我考虑太多~~ , 爽~
附录, 转载一个有趣的文章:
WSC脚本部件技术:利用Javascript编写ActiveX控件
一个简单的例子:
将如下代码另存为.wsc文件,并右键“注册”(卸载时右键“不注册”)。
以下是代码片段: <Component> <registration ProgId=hello.world /> <public> <property name=testStr /> <method name=add> <parameter name=x /> <parameter name=y /> </method> </public> <script> var testStr="默认值"; function add(x, y) { return x+" + "+y+" = "+(x+y); } </script> </Component> |
然后可以通过new ActiveXObject(”hello.world”)的方法来调用该控件。
例如:(另存为.js后双击运行。)
以下是代码片段: var com=new ActiveXObject("hello.world"); WSH.Echo(com.testStr); WSH.Echo(com.add(84,25)); |
这样就可以将javascript代码嵌入到其他编程语言中。
另外,不注册也可以调用该控件,例如:(另存为.js后双击运行。)
以下是代码片段: var com=GetObject("script:http://www.zope.org/Members/Rimifon/ZopeTest/Sample.wsc"); WSH.Echo(com.testStr); WSH.Echo(com.add(84,25)); |
注意的是,JS的GetObject方法因为安全限制,在IE下可能是不能运行的。
另外 还可以使用
以下是代码片段: regsvr32 http://www.zope.org/Members/Rimifon/ZopeTest/Sample.wsc |
指令对远程脚本部件进行本地注册,也可以使用:
以下是代码片段: regsvr32 http://www.zope.org/Members/Rimifon/ZopeTest/Sample.wsc /u |
进行卸载
建议继续学习:
QQ技术交流群:445447336,欢迎加入!
扫一扫订阅我的微信号:IT技术博客大学习
扫一扫订阅我的微信号:IT技术博客大学习
<< 前一篇:分享一个JQUERY颜色选择插件
后一篇:JS文件装载器(Eve Js Loader) >>
文章信息
- 作者:雪候鸟 来源: 风雪之隅
- 标签: 文档
- 发布时间:2009-10-29 13:56:14
建议继续学习
近3天十大热文
- [46] 界面设计速成
- [40] 视觉调整-设计师 vs. 逻辑
- [40] Oracle MTS模式下 进程地址与会话信
- [38] IOS安全–浅谈关于IOS加固的几种方法
- [37] android 开发入门
- [36] 如何拿下简短的域名
- [36] 程序员技术练级攻略
- [35] 【社会化设计】自我(self)部分――欢迎区
- [35] 图书馆的世界纪录
- [32] 读书笔记-壹百度:百度十年千倍的29条法则