none
javascript计算excel中的公式问题 RRS feed

  • 问题

  • 通过javascript打开excel,并填充相关数据,但当采用javascript给单元格设置公式时,在excel不能正常计算:需要单击公式栏后才能计算出结果,这怎么解决?

    javascript设置excel单元格公式后,需要能够自动计算,具体设置代码如下:
    obj.xlsheet.Cells(excelRowIndex,i).Formula = exp;
    说明:
    obj:为excel对象
    exp:为公式表达式

    打开的excel中,仍然为公式,而没有计算出结果。


    喻敏华
    2009年6月1日 11:17

答案

  • 你设置单元格的格式为数字就可以了,下面是一个完整的例子,在window Server 203+IE8+Office 2007下测试通过。
    <script>
    var i,j; 
       try { 
         var xls    = new ActiveXObject ( "Excel.Application" ); 
        } 
       catch(e) { 
            alert( "要打印该表,您必须安装Excel电子表格软件,同时浏览器须使用“ActiveX 控件”,您的浏览器须允许执行控件。 请点击【帮助】了解浏览器设置方法!"); 
        } 
    
    	xls.visible =true;  //设置excel为可见 	
    	var xlBook = xls.Workbooks.Add; 
    	var xlsheet = xlBook.Worksheets(1); 	
    	xlsheet.Range(xlsheet.Cells(1,1),xlsheet.Cells(1,7)).mergecells=true; 
    	xlsheet.Range(xlsheet.Cells(1,1),xlsheet.Cells(1,7)).value="发卡记录"; 	
    	xlsheet.Rows(1).RowHeight = 25; 	
    	xlsheet.Rows(1).Font.Size=14; 	
    	xlsheet.Rows(1).Font.Name="黑体";     	
    	xlsheet.Columns("A:D").ColumnWidth =18; 	
    
    	xlsheet.Cells(2,1).Value="卡号"; 
    	xlsheet.Cells(2,2).Value="密码"; 
    	xlsheet.Cells(2,3).Value="计费方式"; 
    	xlsheet.Cells(2,4).Value="有效天数"; 
    	xlsheet.Cells(2,5).Value="金额"; 
    	xlsheet.Cells(2,6).Value="所属服务项目"; 
    	xlsheet.Cells(2,7).Value="计算公式的结果"; 
    
    	for(i=3;i<11;i++){ 
    		for (j=1;j<7;j++){ 
    		xlsheet.Cells(i,j).Value=i*j; 
    		} 
    	}
    	
    	for(i=3;i<11;i++){ 
    		xlsheet.Cells(i,7).Formula ="=SUM(A" + i + ":F" + i + ")"; 
    	}
    	
    	xlsheet.Columns.AutoFit; 
    	xlsheet.Range( xlsheet.Cells(1,1),xlsheet.Cells(rowNum+1,7)).HorizontalAlignment =-4108;//居中 
    	xlsheet.Range( xlsheet.Cells(1,1),xlsheet.Cells(1,7)).VerticalAlignment =-4108; 
    	xlsheet.Range( xlsheet.Cells(2,1),xlsheet.Cells(rowNum+1,7)).Font.Size=10; 
    	
    	xlsheet.Range( xlsheet.Cells(2,1),xlsheet.Cells(rowNum+1,7)).Borders(3).Weight = 2; //设置左边距 
    	xlsheet.Range( xlsheet.Cells(2,1),xlsheet.Cells(rowNum+1,7)).Borders(4).Weight = 2;//设置右边距 
    	xlsheet.Range( xlsheet.Cells(2,1),xlsheet.Cells(rowNum+1,7)).Borders(1).Weight = 2;//设置顶边距 
    	xlsheet.Range( xlsheet.Cells(2,1),xlsheet.Cells(rowNum+1,7)).Borders(2).Weight = 2;//设置底边距 
    	xls.UserControl = true;  //很重要,不能省略,不然会出问题 意思是excel交由用户控制 
    	xls=null; 
    	xlBook=null; 
    	xlsheet=null; 
    </script>


    【孟子E章】
    2009年6月2日 1:01
    版主

全部回复

  • 你设置单元格的格式为数字就可以了,下面是一个完整的例子,在window Server 203+IE8+Office 2007下测试通过。
    <script>
    var i,j; 
       try { 
         var xls    = new ActiveXObject ( "Excel.Application" ); 
        } 
       catch(e) { 
            alert( "要打印该表,您必须安装Excel电子表格软件,同时浏览器须使用“ActiveX 控件”,您的浏览器须允许执行控件。 请点击【帮助】了解浏览器设置方法!"); 
        } 
    
    	xls.visible =true;  //设置excel为可见 	
    	var xlBook = xls.Workbooks.Add; 
    	var xlsheet = xlBook.Worksheets(1); 	
    	xlsheet.Range(xlsheet.Cells(1,1),xlsheet.Cells(1,7)).mergecells=true; 
    	xlsheet.Range(xlsheet.Cells(1,1),xlsheet.Cells(1,7)).value="发卡记录"; 	
    	xlsheet.Rows(1).RowHeight = 25; 	
    	xlsheet.Rows(1).Font.Size=14; 	
    	xlsheet.Rows(1).Font.Name="黑体";     	
    	xlsheet.Columns("A:D").ColumnWidth =18; 	
    
    	xlsheet.Cells(2,1).Value="卡号"; 
    	xlsheet.Cells(2,2).Value="密码"; 
    	xlsheet.Cells(2,3).Value="计费方式"; 
    	xlsheet.Cells(2,4).Value="有效天数"; 
    	xlsheet.Cells(2,5).Value="金额"; 
    	xlsheet.Cells(2,6).Value="所属服务项目"; 
    	xlsheet.Cells(2,7).Value="计算公式的结果"; 
    
    	for(i=3;i<11;i++){ 
    		for (j=1;j<7;j++){ 
    		xlsheet.Cells(i,j).Value=i*j; 
    		} 
    	}
    	
    	for(i=3;i<11;i++){ 
    		xlsheet.Cells(i,7).Formula ="=SUM(A" + i + ":F" + i + ")"; 
    	}
    	
    	xlsheet.Columns.AutoFit; 
    	xlsheet.Range( xlsheet.Cells(1,1),xlsheet.Cells(rowNum+1,7)).HorizontalAlignment =-4108;//居中 
    	xlsheet.Range( xlsheet.Cells(1,1),xlsheet.Cells(1,7)).VerticalAlignment =-4108; 
    	xlsheet.Range( xlsheet.Cells(2,1),xlsheet.Cells(rowNum+1,7)).Font.Size=10; 
    	
    	xlsheet.Range( xlsheet.Cells(2,1),xlsheet.Cells(rowNum+1,7)).Borders(3).Weight = 2; //设置左边距 
    	xlsheet.Range( xlsheet.Cells(2,1),xlsheet.Cells(rowNum+1,7)).Borders(4).Weight = 2;//设置右边距 
    	xlsheet.Range( xlsheet.Cells(2,1),xlsheet.Cells(rowNum+1,7)).Borders(1).Weight = 2;//设置顶边距 
    	xlsheet.Range( xlsheet.Cells(2,1),xlsheet.Cells(rowNum+1,7)).Borders(2).Weight = 2;//设置底边距 
    	xls.UserControl = true;  //很重要,不能省略,不然会出问题 意思是excel交由用户控制 
    	xls=null; 
    	xlBook=null; 
    	xlsheet=null; 
    </script>


    【孟子E章】
    2009年6月2日 1:01
    版主
  • 谢谢,我把格式设置错误了。
    已经解决。
    喻敏华
    • 已标记为答案 喻敏华 2009年6月21日 10:31
    • 取消答案标记 喻敏华 2009年6月21日 10:31
    2009年6月21日 10:31