技术头条 - 一个快速在微博传播文章的方式     搜索本站
您现在的位置首页 --> JavaScript --> 使用JS做文档处理

使用JS做文档处理

浏览:2056次  出处信息

最近应友人邀请, 要帮忙写个文档处理脚本, 考虑到如果使用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

进行卸载

建议继续学习:

  1. 程序员如何写出一份好的文档?    (阅读:2509)
  2. 如何写一份交互说明文档    (阅读:2410)
  3. 如何写设计类文章    (阅读:1778)
QQ技术交流群:445447336,欢迎加入!
扫一扫订阅我的微信号:IT技术博客大学习
© 2009 - 2024 by blogread.cn 微博:@IT技术博客大学习

京ICP备15002552号-1