Javascript与Excel(转)

 

Javascript与Excel

标签: Excel Javascript 2009-10-14 17:05

    昨天(2009-4-16)晚上,同事让我帮忙调一个网页前台程序。仔细研究了一下,他访问的大致方式是建立一个对象Excel.Application,然后通过固定行移动列读到读不出数据为止进行列计数,固定列移动行读到读不出数据为止进行行计数。
    执行循环前的相关初始化与声明如下:
var xlsApp= new ActiveXObject ( "Excel.Application" );
var xlsRow,xlsColumn;//Excel工作表行列计数
var column=1;//循环变量
var row=1; //循环变量
var limits=65535;//用于测试防止死循环
var data;//存储单元格数据
var xlsFileName = filename;//filename是作为参数传递
var xlsWorkbook = xlsApp.Workbooks.Open(xlsFileName );//工作簿
    当采用xlsWorkbook.ActiveSheet.Cells(行,列)时,没有数据的单元格会提示undefined,使用typeof进行类型判定弹出object。使用判断条件xlsWorkbook.ActiveSheet.Cells(行,列)==”undefined”判断无效。
    仔细琢磨,xlsWorkbook.ActiveSheet.Cells(行,列)其实是一个单元格对象,虽然在有数据时强制转换有效,可以有字符串、数字等等数据类型的出现。查阅JS手册,研读undefined。
Undefined 数据类型
如下情况使返回 undefined 值:对象属性不存在;声明了变量但从未赋值。
注意不能通过与 undefined 做比较来测试一个变量是否存在,虽然可以检查它的类型是否为“undefined”。在以下的代码范例中,假设程序员想测试是否已经声明变量 x :
// 这种方法不起作用
if (x == undefined)     // 作某些操作
// 这个方法同样不起作用- 必须检查
// 字符串 "undefined"
if (typeof(x) == undefined)// 作某些操作
// 这个方法有效
if (typeof(x) == "undefined")   // 作某些操作
考虑将 undefined 值与null做比较。
someObject.prop == null;
如下情况时,比较的结果为 true,
如果属性 someObject.prop 包含 null 值,
如果属性 someObject.prop 不存在。
要检查一个对象属性是否存在,可以使用新的 in 运算符:
if ("prop" in someObject)
// someObject 有属性 'prop'

    但我们用类型判断出来的全是object而不再是undefined。之后曾经尝试数据转换均无效。后来使用了对象的value属性,然后判断是否为null。测试成功了。
//判断有多少列
      for(xlsColumn = 0,row=1; ; ){     
            data=xlsWorkbook.ActiveSheet.Cells(row,xlsColumn+1).value;
            if (data==null)        break;
            xlsColumn++;           
            if(xlsColumn>=limits) break;
           }
    //判断有多少行
    for(column = 1,xlsRow=0; ; ){
           data=xlsWorkbook.ActiveSheet.Cells(xlsRow+1,column).value;
            if (data==null)    break;
            xlsRow++;
            if(xlsRow>=limits) break;
           }
       alert("Row:"+xlsRow.toString()+" Column:"+xlsColumn.toString());
       xlsWorkbook.close();
       xlsWorkbook =null;
       xlsApp.Application.Quit();
       xlsApp =null;
如此一来,看起来完成任务了,其实细细一想,如果最大的行数不在第一列或者最大的列数不在第一行,计算出来的结果可能并不准确。另外如果数据中间有单元格内容为空,也会断开掉。正确的方法是使用Excel对象自身的功能选取有效数据区域再计算出大小。
alert("VBA Row "+ xlsWorkbook.ActiveSheet.UsedRange.Rows.Count.toString()+" Column:"+ xlsWorkbook.ActiveSheet.UsedRange.Columns.Count.toString());
行数:xlsWorkbook.ActiveSheet.UsedRange.Rows.Count
列数:xlsWorkbook.ActiveSheet.UsedRange.Columns.Count

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值