JAVA实现EXCEL公式专题(七)——统计函数

统计函数主要实现的是较为复杂的统计函数如countif、sumif、frequency,也是,直接上代码

/**
 *  项目名称:
 *  文件说明:
 *  主要特点:文件说明:EXCEL函数类型:统计函数
 *  简单的函数如sum,average等等就不实现了
 *  版本号:1.0
 *  制作人:刘晨曦
 *  创建时间:2013-12-3
 **/
package EXCEL;

import games.MathTools;

import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
import javax.script.ScriptException;

/**
 * @author lcx
 *
 */
public class CountFunctions {

	/**
	 * 统计满足条件的个数
	 * @param range
	 * @param criteria
	 * @return
	 */
	public static int sumif(int[][] range,String criteria)
	{
		ScriptEngineManager man=new ScriptEngineManager();
		ScriptEngine engine=man.getEngineByName("javascript");
		int sum=0;
		for(int i=0;i<range.length;i++)
			for(int j=0;j<range[0].length;j++)
			{
				try {
					Boolean b=(Boolean) engine.eval(range[i][j]+criteria);
					if(b)
						sum+=range[i][j];
				} catch (ScriptException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
		return sum;
	}

	/**
	 * 统计满足条件的个数
	 * @param range
	 * @param criteria
	 * @return
	 */
	public static int  countif(int[][] range,String criteria)
	{
		ScriptEngineManager man=new ScriptEngineManager();
		ScriptEngine engine=man.getEngineByName("javascript");
		int count=0;
		for(int i=0;i<range.length;i++)
			for(int j=0;j<range[0].length;j++)
			{
				try {
					Boolean b=(Boolean) engine.eval(range[i][j]+criteria);
					if(b)
						count++;
				} catch (ScriptException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
		return count;
	}

	public static void sort()
	{
		System.out.println("给array和tags排序");
	}

	/**
	 * 为简化处理,在这里边需保证输入的是升序排列的数组
	 * @param array
	 * @param tags
	 * @return
	 */
	public static int[] frequency(int [] array,int[] tags)
	{
		sort();//排序,在这里就不实现了
		if(array==null||tags==null||array.length==0||array.length==0)
			throw new IllegalArgumentException("数组为空");
		int[] res=new int[tags.length+1];
		int count=0;

		for(int i=0;i<array.length;i++)
		{
			if(count>=tags.length)
				break;
			if(array[i]<=tags[count])
				res[count]+=1;
			else
			{
				i--;
				count++;
			}
		}
		//剩余的
		int sum=0;
		for(int i=0;i<res.length-1;i++)
			sum+=res[i];
		res[res.length-1]=array.length-sum;
		return res;
	}

	public static void main(String[] args) {

		/*******************测试数组相关*****************************/
		int [][]a={{1,2},{3,4},{5,6}};
		//		countif(a,"<=2");
		//		System.out.println(rank(3,a,true));
		System.out.println(sumif(a,"<=2"));

		int[] b={15,25,35,45,55,65,75,85,95};
		MathTools.printArray(frequency(b,new int[]{10,90}));
	}
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-11-05 18:41:02

JAVA实现EXCEL公式专题(七)——统计函数的相关文章

JAVA实现EXCEL公式专题(六)——查找引用函数

查找引用函数主要有match.lookup.vlookup.hlookup这4种,这几个常用的方法也就不解释啦,直接上干货: /** * 项目名称: * 文件说明: * 主要特点: EXCEL公式类型:查找公式 * 版本号:1.0 * 制作人:刘晨曦 * 创建时间:2013-12-3 **/ package EXCEL; import java.util.Calendar; import java.util.Date; /** * @author lcx * */ public class Se

JAVA实现EXCEL公式专题(四)——字符串函数

直接上代码: /** * 项目名称: * 文件说明: ExCEL公式类型:字符串公式 * 主要特点: * 版本:1.0 * 制作人:刘晨曦 * 创建时间:2013-12-3 **/ package EXCEL; /** * @author lcx * */ public class StringFunctions { public static String right(String str,int len) { if(len>str.length()) throw new IllegalArg

JAVA实现EXCEL公式专题(一)——EXCEL公式分类与解析步骤

1)EXCEL公式分类 a. 数值: 从极端情况来说,数值也是一种最简单的公式如 A1=1; b. 简单函数:简单函数指的是参数只能是数值的函数,如公式A3(简单函数)=sum(A1:A2),,A1=1,A2=3; c. 复杂函数:复杂函数指的是参数中也存在函数的,如A4(复杂函数)=avg(A3,A1): d. 表达式:指的是四则运算表达式,如A5=(A4+A1)/A3; 在鄙人现有知识范围内,EXCEL公式函数不外乎以上四种情况. 2)EXCEL公式解析--递归 那上面最复杂的d类中的四则运

java处理excel的一点实践积累

作者:佟亮    日期:2008-11-06 1   文档说明 目的:编写本文档主要的目的是与大家分享下如何用java处理excel,文档中的代码一部分来自<企业项目管理系统V2.0>的源码,一部分copy网上的. 背景:使用Windows操作系统的同事对Excel(电子表格)一定不会陌生,但是要使用Java语言来操纵Excel文件并不是一件容易的事.在Web应用日益盛行的今天,通过Web来操作Excel文件的需求越来越强烈. 2   需求 本部分与技术无关,没兴趣的同事可以跳过直接看下一章.

java操作Excel

一.POI简介 Jakarta POI 是apache的子项目,目标是处理ole2对象.它提供了一组操纵Windows文档的Java API 目前比较成熟的是HSSF接口,处理MS Excel(97-2002)对象.它不象我们仅仅是用csv生成的没有格式的可以由Excel转换的东西,而是真正的Excel对象,你可以控制一些属性如sheet,cell等等. 二.HSSF概况 HSSF 是Horrible SpreadSheet Format的缩写,也即“讨厌的电子表格格式”.也许HSSF的名字有点

Java 操作 Excel

这次的任务是实现数据的导入/导出功能,就是用Java操作Excel,上网找了一下,就Java来说用Apache的POI库的比较多,功能也相对比较强大.其他Excel开发库: http://www.oschina.net/project/tag/258/excel-tools Apache POI 下载地址: http://poi.apache.org/download.html 废话不多说,直接给几个例子就了解怎么用了. Excel 2003 (xls后缀) 1 import java.io.F

Java读写Excel之POI超入门(转)

Apache POI 是用Java编写的免费开源的跨平台的 Java API,Apache POI提供API给Java程式对Microsoft Office格式档案读和写的功能.Apache POI 是创建和维护操作各种符合Office Open XML(OOXML)标准和微软的OLE 2复合文档格式(OLE2)的Java API.用它可以使用Java读取和创建,修改MS Excel文件.而且,还可以使用Java读取和创建MS Word和MSPowerPoint文件.Apache POI 提供J

java jxl excel 导入导出的 总结(建立超链接,以及目录sheet的索引)

最近项目要一个批量导出功能,而且要生成一个单独的sheet页,最后后面所有sheet的索引,并且可以点击进入连接.网上搜索了一下,找到一个方法,同时把相关的excel导入导出操作记录一下!以便以后使用! 简单先写一下目录的建立的主要代码,测试用的 List ls = new ArrayList();//报表名称列表  ls.add("BB_BB03");  ls.add("BB_BB05");  ls.add("BB_BB06"); try { 

java实现excel的导入导出(poi详解)[转]

java实现excel的导入导出(poi详解) 博客分类: java技术 excel导出poijava 经过两天的研究,现在对excel导出有点心得了.我们使用的excel导出的jar包是poi这个阿帕奇公司的一个项目,后来被扩充了.是比较好用的excel导出工具. 下面来认识一下这个它吧. 我们知道要创建一张excel你得知道excel由什么组成,比如说sheet也就是一个工作表格,例如一行,一个单元格,单元格格式,单元格内容格式…这些都对应着poi里面的一个类. 一个excel表格: HSS