`
zqb666kkk
  • 浏览: 733542 次
  • 性别: Icon_minigender_1
  • 来自: 宁波
社区版块
存档分类
最新评论

java按照每周分组 改进版

    博客分类:
  • java
 
阅读更多
之前是按照 先把数据按月分组 然后再按周分组 这样有个问题就是 会导致像6月30号这种数据 应该是 跟7月1号 7月2号等分在一组的 但是 按照上次的算法 会被分开 显然这样似乎有点不太好理解

所以这次不做按月分组 直接 利用java里 判断今天是当前年中第几周来做每周分组

package com.test;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.sql.Timestamp;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Collections;
import java.util.Date;
import java.util.HashMap;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.Set;

import net.sf.json.JSONObject;
import ztxx.cl.entity.AreaCopperInfos;
import ztxx.common.util.ExcelUtil;
import ztxx.common.util.StringUtils;
import ztxx.common.util.ExcelUtil.GroupBy;

public class POIexceltest {

	/**
	 * @param args
	 * @throws IOException
	 */
	public static void main(String[] args) throws IOException {
		// TODO Auto-generated method stub

		Map<Integer, JSONObject> content = new LinkedHashMap<Integer, JSONObject>();
		File file = new File("d:/test/630有问题.xlsx");
		FileInputStream fi = new FileInputStream(file);
		if (file.getName().toLowerCase().endsWith("xls")) {
			content = ExcelUtil.readExcelContent(fi, 1);
		} else if (file.getName().toLowerCase().endsWith("xlsx")) {
			content = ExcelUtil.read2007Excels(fi, 1);
		}
		List<AreaCopperInfos> listTsts = new ArrayList<AreaCopperInfos>();
		for (Map.Entry<Integer, JSONObject> entry : content.entrySet()) {
			AreaCopperInfos aci = new AreaCopperInfos();
			aci.setAudit(1);
			if (StringUtils.stringIsNull(entry.getValue().get("品名")).equals("")) {
				continue;
			}
			aci.setChange(Double.valueOf(StringUtils.stringIsNull(entry
					.getValue().get("涨跌"))));
			aci.setCommodity(StringUtils.stringIsNull(entry.getValue()
					.get("品名")));

			aci.setFold(Double.valueOf(StringUtils.stringIsNull(entry
					.getValue().get("均价"))));

			aci.setInfTypeId(11);
			aci.setMaterial(StringUtils
					.stringIsNull(entry.getValue().get("材质")));
			// System.out.println("材质:"+StringUtils.stringIsNull(entry.getValue().get(
			// "材质")));
			aci.setMaximumprice(Double.valueOf(StringUtils.stringIsNull(entry
					.getValue().get("最高价"))));
			aci.setMinimumtprice(Double.valueOf(StringUtils.stringIsNull(entry
					.getValue().get("最低价"))));
			aci.setOg(StringUtils.stringIsNull(entry.getValue().get("产地/牌号")));
			String fbsj = StringUtils
					.stringIsNull(entry.getValue().get("发布日期"));
			// System.out.println("发布日期:"+fbsj);
			String dateString = fbsj;
			Date date = null;
			try {
				SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
				date = sdf.parse(dateString);
			} catch (ParseException e) {
				System.out.println(e.getMessage());
			}
			// System.out.println("星期code:"+getWeekOfDate(date));

			Timestamp ts = new Timestamp(System.currentTimeMillis());
			String tsStr = fbsj + " 00:00:00";
			try {
				ts = Timestamp.valueOf(tsStr);
			} catch (Exception e) {
				e.printStackTrace();
			}
			aci.setReleaseDate(ts);
			aci
					.setRemarks(StringUtils.stringIsNull(entry.getValue().get(
							"备注")));
			aci.setUnit(StringUtils.stringIsNull(entry.getValue().get("单位")));

			listTsts.add(aci);
		}

		System.out.println("导入完成:" + listTsts.size());
		List<AreaCopperInfos> listTstsNew = new ArrayList<AreaCopperInfos>();
		// 去除重复发布日期
		listTstsNew = removeDuplicate(listTsts);
		System.out.println("去除重复发布日期后的list元素数量:" + listTstsNew.size());

		// 按照升序排
		sortClass sort = new sortClass();
		Collections.sort(listTstsNew, sort);

		for (int i = 0; i < listTstsNew.size(); i++) {
			AreaCopperInfos temp = (AreaCopperInfos) listTstsNew.get(i);
			// System.out.println("品名:" + temp.getCommodity() + ",发布日期:"
			// + temp.getReleaseDate());
		}
//		final SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
//		Map<String, List<AreaCopperInfos>> mapMonth = new HashMap<String, List<AreaCopperInfos>>();
//		mapMonth = ExcelUtil.group(listTstsNew, new GroupBy<String>() {
//			@Override
//			public String groupby(Object obj) {
//				AreaCopperInfos d = (AreaCopperInfos) obj;
//				String fbstr = sdf.format(d.getReleaseDate());
//				String fbstrArray[] = fbstr.split("-", -1);
//				String yue = fbstrArray[0] + fbstrArray[1];
//				return yue; // 分组依据为发布时间
//			}
//		});
//
//		System.out.println("按年月分组完成" + mapMonth.size());

//		Set<String> key = null;
//		if (null != mapMonth) {
//			key = mapMonth.keySet();
//		}
		// Set<Long> key = map.keySet();
		//if (null != key) {
			//for (Iterator it = key.iterator(); it.hasNext();) { // 组循环
				//String s = (String) it.next();
				//List<AreaCopperInfos> laci = mapMonth.get(s); // 抽出每组里的地区铜价集合数据

				Map<Integer, List<AreaCopperInfos>> mapWeek = new HashMap<Integer, List<AreaCopperInfos>>(); // 按照每周分组
				mapWeek = ExcelUtil.group(listTstsNew, new GroupBy<Integer>() {
					@Override
					public Integer groupby(Object obj) {
						AreaCopperInfos d = (AreaCopperInfos) obj;

//						SimpleDateFormat sdf = new SimpleDateFormat(
//								"yyyy-MM-dd");
						//String str = sdf.format(d.getReleaseDate());
						Integer weekValue = ExcelUtil.getWeekOfYear(d.getReleaseDate());	//一年当中的第几周
						return weekValue; // 分组依据为发布时间
					}
				});

				//System.out.println("按照每周分组完成,该月一共有几周:" + mapWeek.size());
				System.out.println("该年有几周:" + ExcelUtil.getMaxWeekNumOfYear(2014));

				Set<Integer> keyWeek = null;
				if (null != mapWeek) {
					keyWeek = mapWeek.keySet();
				}

				for (Iterator itWeek = keyWeek.iterator(); itWeek.hasNext();) { // 循环每组里的星期
					Integer zhou = (Integer) itWeek.next();
					List<AreaCopperInfos> laciWeek = mapWeek.get(zhou);
					Map<String, AreaCopperInfos> maplistsa = new
					LinkedHashMap<String, AreaCopperInfos>();
					LinkedList<Map<String, AreaCopperInfos>> allWeek = new LinkedList<Map<String, AreaCopperInfos>>();
					for (int k = 0; k < laciWeek.size(); k++) {

						System.out.println("周里面的铜信息:"
								+ laciWeek.get(k).getCommodity() + ":"
								+ laciWeek.get(k).getReleaseDate()
								+ getWeek(laciWeek.get(k).getReleaseDate()));
						maplistsa.put(getWeek(laciWeek.get(k).getReleaseDate()), laciWeek.get(k));

					}
					
					if(laciWeek.size()<5&&laciWeek.size()>=1){	//做填充
						System.out.println("填充后:");
						Map<String, AreaCopperInfos> map = new LinkedHashMap<String, AreaCopperInfos>();

							map.put("星期一", maplistsa.get("星期一"));
							map.put("星期二", maplistsa.get("星期二"));
							map.put("星期三", maplistsa.get("星期三"));
							map.put("星期四", maplistsa.get("星期四"));
							map.put("星期五", maplistsa.get("星期五"));
							allWeek.add(map);

							for(int i=0;i<allWeek.size();i++){
								if(null!=allWeek.get(i).get("星期一")){
									if(null!=allWeek.get(i).get("星期一").getCommodity()){
										System.out.println("周里面的铜信息:"
												+ allWeek.get(i).get("星期一").getCommodity()
												+ ":"
												+ allWeek.get(i).get("星期一").getReleaseDate()
												+ getWeek(allWeek.get(i).get("星期一")
														.getReleaseDate()));
									}
								}else{
									System.out.println("周里面的铜信息:"+"空的");
								}
								if(null!=allWeek.get(i).get("星期二")){
									if(null!=allWeek.get(i).get("星期二").getCommodity()){
										System.out.println("周里面的铜信息:"
												+ allWeek.get(i).get("星期二").getCommodity()
												+ ":"
												+ allWeek.get(i).get("星期二").getReleaseDate()
												+ getWeek(allWeek.get(i).get("星期二")
														.getReleaseDate()));
									}
								}else{
									System.out.println("周里面的铜信息:"+"空的");
								}
								if(null!=allWeek.get(i).get("星期三")){
									if(null!=allWeek.get(i).get("星期三").getCommodity()){
										System.out.println("周里面的铜信息:"
												+ allWeek.get(i).get("星期三").getCommodity()
												+ ":"
												+ allWeek.get(i).get("星期三").getReleaseDate()
												+ getWeek(allWeek.get(i).get("星期三")
														.getReleaseDate()));
									}
								}else{
									System.out.println("周里面的铜信息:"+"空的");
								}
								if(null!=allWeek.get(i).get("星期四")){
									if(null!=allWeek.get(i).get("星期四").getCommodity()){
										System.out.println("周里面的铜信息:"
												+ allWeek.get(i).get("星期四").getCommodity()
												+ ":"
												+ allWeek.get(i).get("星期四").getReleaseDate()
												+ getWeek(allWeek.get(i).get("星期四")
														.getReleaseDate()));
									}
								}else{
									System.out.println("周里面的铜信息:"+"空的");
								}
								if(null!=allWeek.get(i).get("星期五")){
									if(null!=allWeek.get(i).get("星期五").getCommodity()){
										System.out.println("周里面的铜信息:"
												+ allWeek.get(i).get("星期五").getCommodity()
												+ ":"
												+ allWeek.get(i).get("星期五").getReleaseDate()
												+ getWeek(allWeek.get(i).get("星期五")
														.getReleaseDate()));
									}
								}else{
									System.out.println("周里面的铜信息:"+"空的");
								}
							}
							
						
					}
					System.out.println("第" + zhou + "周");
				}
			//}
		//}
	}

	public static List<AreaCopperInfos> removeDuplicate(
			List<AreaCopperInfos> list) {
		for (int i = 0; i < list.size() - 1; i++) {
			for (int j = list.size() - 1; j > i; j--) {
				if (list.get(j).getReleaseDate().equals(
						list.get(i).getReleaseDate())) {
					list.remove(j);
				}
			}
		}
		return list;
	}

	public static int getWeek(String str) {
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
		Date date = null;
		try {
			date = sdf.parse(str);
		} catch (ParseException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		Calendar calendar = Calendar.getInstance();
		calendar.setTime(date);
		// 第几周
		int week = calendar.get(Calendar.WEEK_OF_MONTH);
		// 第几天,从周日开始
		int day = calendar.get(Calendar.DAY_OF_WEEK);
		return week;
	}

	/**
	 * 根据日期获得星期
	 * 
	 * @param date
	 * @return
	 */
	public static String getWeekOfDate(Date date) {
		String[] weekDaysName = { "星期日", "星期一", "星期二", "星期三", "星期四", "星期五",
				"星期六" };
		String[] weekDaysCode = { "0", "1", "2", "3", "4", "5", "6" };
		Calendar calendar = Calendar.getInstance();
		calendar.setTime(date);
		int intWeek = calendar.get(Calendar.DAY_OF_WEEK) - 1;
		return weekDaysCode[intWeek];
	}

	// 根据日期取得星期几
	public static String getWeek(Date date) {
		String[] weeks = { "星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六" };
		Calendar cal = Calendar.getInstance();
		cal.setTime(date);
		int week_index = cal.get(Calendar.DAY_OF_WEEK) - 1;
		if (week_index < 0) {
			week_index = 0;
		}
		return weeks[week_index];
	}

	/**
	 * 判断两个日期是否为同一周
	 * 
	 * @param date1
	 * @param date2
	 * @return
	 */
	public static boolean isSameDate(String date1, String date2) {
		SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
		Date d1 = null;
		Date d2 = null;
		try {
			d1 = format.parse(date1);
			d2 = format.parse(date2);
		} catch (Exception e) {
			e.printStackTrace();
		}
		Calendar cal1 = Calendar.getInstance();
		Calendar cal2 = Calendar.getInstance();
		cal1.setTime(d1);
		cal2.setTime(d2);
		int subYear = cal1.get(Calendar.YEAR) - cal2.get(Calendar.YEAR);
		// subYear==0,说明是同一年
		if (subYear == 0) {
			if (cal1.get(Calendar.WEEK_OF_YEAR) == cal2
					.get(Calendar.WEEK_OF_YEAR))
				return true;
		}
		// 例子:cal1是"2005-1-1",cal2是"2004-12-25"
		// java对"2004-12-25"处理成第52周
		// "2004-12-26"它处理成了第1周,和"2005-1-1"相同了
		// 大家可以查一下自己的日历
		// 处理的比较好
		// 说明:java的一月用"0"标识,那么12月用"11"
		else if (subYear == 1 && cal2.get(Calendar.MONTH) == 11) {
			if (cal1.get(Calendar.WEEK_OF_YEAR) == cal2
					.get(Calendar.WEEK_OF_YEAR))
				return true;

		}
		// 例子:cal1是"2004-12-31",cal2是"2005-1-1"
		else if (subYear == -1 && cal1.get(Calendar.MONTH) == 11) {
			if (cal1.get(Calendar.WEEK_OF_YEAR) == cal2
					.get(Calendar.WEEK_OF_YEAR))
				return true;

		}
		return false;
	}


}



excel工具类:

package ztxx.common.util;

import java.io.BufferedOutputStream;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.sql.Timestamp;
import java.text.DecimalFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Collection;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.HashMap;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.Set;

import net.sf.json.JSONObject;

import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFDataFormat;
import org.apache.poi.hssf.usermodel.HSSFDateUtil;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.poifs.filesystem.POIFSFileSystem;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.CellStyle;
import org.apache.poi.xssf.usermodel.XSSFCell;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

import ztxx.cl.entity.AreaCopperInfos;

public class ExcelUtil {
	private static POIFSFileSystem fs;
	private static HSSFWorkbook wb;
	private static HSSFSheet sheet;
	private static HSSFRow row;
	private static FileInputStream input;
	private static String[] excleTitle;

	public static boolean isNum(String str) {
		return str.matches("^[-+]?(([0-9]+)([.]([0-9]+))?|([.]([0-9]+))?)$");
	}

	/**
	 * 根据文件路径读取Excel数据内容 返回map
	 * 
	 * @param excelPath
	 * @return
	 */
	public static Map<Integer, JSONObject> readExcelContent(String excelPath) {
		Map<Integer, JSONObject> contentJson = new LinkedHashMap<Integer, JSONObject>();
		String excelStr = "";// excel 内容
		try {
			input = new FileInputStream(new File(excelPath));

			fs = new POIFSFileSystem(input);
			wb = new HSSFWorkbook(fs);
			sheet = wb.getSheetAt(0);
			int rowNum = sheet.getLastRowNum(); // 得到总行数
			row = sheet.getRow(0);// 得到标题的内容对象。
			int colNum = row.getPhysicalNumberOfCells();// 得到每行的列数。

			excleTitle = new String[colNum];
			for (int i = 0; i < colNum; i++) {

				excleTitle[i] = getStringCellValue(row.getCell((short) i));
			}

			// 正文内容应该从第二行开始,第一行为表头的标题
			for (int i = 1; i <= rowNum; i++) {

				row = sheet.getRow(i);
				int j = 0;

				while (j < colNum) {
					String v = "";
					if (j + 1 == colNum) {
						String vs = getStringCellValue(row.getCell((short) j))
								.trim();
						if (vs.indexOf(".") > -1) {
							if (isNum(vs)) { // 是否是数字

								if (vs.endsWith("0")) {

									v = vs.substring(0, vs.indexOf("."));
								}

							} else {
								v = vs.trim();
							}

						} else {
							v = vs.trim();
						}
						excelStr += v;
					} else {

						String vs = getStringCellValue(row.getCell((short) j))
								.trim()
								+ "&";
						if (vs.indexOf(".") > -1) {
							if (isNum(vs)) { // 是否是数字
								if (vs.endsWith("0")) { // 处理用poi读取excel整数后面加.0的格式化
									v = vs.substring(0, vs.indexOf("."));
								}

							} else {
								v = vs.trim();
							}

						} else {
							v = vs.trim();
						}
						excelStr += v;
					}

					j++;

				}
				String excelstrArray[] = excelStr.split("&", -1); // 每行数据

				Map<String, String> params = new LinkedHashMap<String, String>();
				for (int k = 0; k < excelstrArray.length; k++) {
					params.put(excleTitle[k], excelstrArray[k]);
				}
				JSONObject jsonObject = JSONObject.fromObject(params);
				contentJson.put(i, jsonObject);

				// content.put(i, excelStr);

				excelStr = "";
			}

		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			try {
				if (input != null) {
					input.close();
				}
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
		return contentJson;
	}

	/**
	 * 根据文件流读取Excel数据内容 返回map 2003
	 * 
	 * @param input
	 * @param count从第几行开始读
	 * @return
	 */
	public static Map<Integer, JSONObject> readExcelContent(InputStream input,
			int count) {// 读取Excel数据内容
		Map<Integer, JSONObject> contentJson = new LinkedHashMap<Integer, JSONObject>();
		String excelStr = "";// excel 内容
		try {

			fs = new POIFSFileSystem(input);
			wb = new HSSFWorkbook(fs);
			sheet = wb.getSheetAt(0);
			int rowNum = sheet.getLastRowNum(); // 得到总行数
			row = sheet.getRow(0);// 得到标题的内容对象。
			int colNum = row.getPhysicalNumberOfCells();// 得到每行的列数。

			excleTitle = new String[colNum];
			for (int i = 0; i < colNum; i++) {

				excleTitle[i] = getStringCellValue(row.getCell(i));
			}

			// 正文内容应该从第二行开始,第一行为表头的标题
			for (int i = count; i <= rowNum; i++) {

				row = sheet.getRow(i);
				int j = 0;

				while (j < colNum) {
					String v = "";
					if (j + 1 == colNum) {
						String vs = getStringCellValue(row.getCell(j)).trim();
						if (vs.indexOf(".") > -1) {
							if (isNum(vs)) { // 是否是数字

								if (vs.endsWith("0")) {

									v = vs.substring(0, vs.indexOf("."));
								}

							} else {
								v = vs.trim();
							}

						} else {
							v = vs.trim();
						}
						excelStr += v;
					} else {

						String vs = getStringCellValue(row.getCell(j)).trim()
								+ "&";
						if (vs.indexOf(".") > -1) {
							if (isNum(vs)) { // 是否是数字
								if (vs.endsWith("0")) { // 处理用poi读取excel整数后面加.0的格式化
									v = vs.substring(0, vs.indexOf("."));
								}

							} else {
								v = vs.trim();
							}

						} else {
							v = vs.trim();
						}
						excelStr += v;
					}

					j++;

				}
				String excelstrArray[] = excelStr.split("&", -1); // 每行数据

				Map<String, String> params = new LinkedHashMap<String, String>();
				for (int k = 0; k < excelstrArray.length; k++) {
					params.put(excleTitle[k], excelstrArray[k]);
				}
				JSONObject jsonObject = JSONObject.fromObject(params);
				contentJson.put(i, jsonObject);

				// content.put(i, excelStr);

				excelStr = "";
			}

		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			try {
				if (input != null) {
					input.close();
				}
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
		return contentJson;
	}

	/**
	 * 读取Office 2007 excel
	 * 
	 * @param input
	 * @param count
	 *            从第几行开始读
	 * @return
	 * @throws IOException
	 */
	public static Map<Integer, JSONObject> read2007Excels(InputStream input,
			int count) throws IOException {
		Map<Integer, JSONObject> contentJson = new LinkedHashMap<Integer, JSONObject>();
		// 构造 XSSFWorkbook 对象,strPath 传入文件路径
		XSSFWorkbook xwb = new XSSFWorkbook(input);
		// 读取第一章表格内容
		XSSFSheet sheet = xwb.getSheetAt(0);

		XSSFRow row = null;
		XSSFCell cell = null;

		XSSFRow headerrow = sheet.getRow(0); // 表头 得到标题的内容对象
		int colNum = headerrow.getPhysicalNumberOfCells();// 得到每行的列数。
		excleTitle = new String[colNum];
		for (int i = 0; i < colNum; i++) {

			excleTitle[i] = getStringCellValue(headerrow.getCell((short) i));
		}

		// System.out.println(sheet.getPhysicalNumberOfRows());
		// 循环内容项 不循环标题 所以+1
		for (int i = sheet.getFirstRowNum() + count; i <= sheet
				.getPhysicalNumberOfRows(); i++) {
			row = sheet.getRow(i);
			if (row == null) {
				continue;
			}
			List<String> linked = new LinkedList<String>();
			for (int j = row.getFirstCellNum(); j < row.getLastCellNum(); j++) {
				Object value = null;
				cell = row.getCell(j);
				if (null != cell) {
					value = getStringCellValue(cell);
				}

				linked.add(StringUtils.stringIsNull(value));
			}
			Map<String, String> params = new LinkedHashMap<String, String>();
			for (int j = 0; j < linked.size(); j++) {
				params.put(excleTitle[j], linked.get(j));
			}
			JSONObject jsonObject = JSONObject.fromObject(params);
			contentJson.put(i, jsonObject);
		}

		return contentJson;
	}

	/**
	 * 根据(字节串(或叫字节数组)变成输入流的形式)读取Excel数据内容 返回map
	 * 
	 * @param input
	 * @return
	 */
	public static Map<Integer, JSONObject> readExcelContent(
			ByteArrayInputStream input) {// 读取Excel数据内容
		// Map<Integer, String> content = new HashMap<Integer, String>();
		Map<Integer, JSONObject> contentJson = new LinkedHashMap<Integer, JSONObject>();
		String excelStr = "";// excel 内容
		try {

			// ByteArrayInputStream is = new ByteArrayInputStream( new
			// byte[1000]);

			fs = new POIFSFileSystem(input);
			wb = new HSSFWorkbook(fs);
			sheet = wb.getSheetAt(0);
			int rowNum = sheet.getLastRowNum(); // 得到总行数
			row = sheet.getRow(0);// 得到标题的内容对象。
			int colNum = row.getPhysicalNumberOfCells();// 得到每行的列数。

			excleTitle = new String[colNum];
			for (int i = 0; i < colNum; i++) {

				excleTitle[i] = getStringCellValue(row.getCell((short) i));
			}

			// 正文内容应该从第二行开始,第一行为表头的标题
			for (int i = 1; i <= rowNum; i++) {

				row = sheet.getRow(i);
				int j = 0;

				while (j < colNum) {
					String v = "";
					if (j + 1 == colNum) {
						String vs = getStringCellValue(row.getCell((short) j))
								.trim();
						if (vs.indexOf(".") > -1) {
							if (isNum(vs)) { // 是否是数字

								if (vs.endsWith("0")) {

									v = vs.substring(0, vs.indexOf("."));
								}

							} else {
								v = vs.trim();
							}

						} else {
							v = vs.trim();
						}
						excelStr += v;
					} else {

						String vs = getStringCellValue(row.getCell((short) j))
								.trim()
								+ "&";
						if (vs.indexOf(".") > -1) {
							if (isNum(vs)) { // 是否是数字
								if (vs.endsWith("0")) { // 处理用poi读取excel整数后面加.0的格式化
									v = vs.substring(0, vs.indexOf("."));
								}

							} else {
								v = vs.trim();
							}

						} else {
							v = vs.trim();
						}
						excelStr += v;
					}

					j++;

				}
				String excelstrArray[] = excelStr.split("&", -1); // 每行数据

				Map<String, String> params = new LinkedHashMap<String, String>();
				for (int k = 0; k < excelstrArray.length; k++) {
					params.put(excleTitle[k], excelstrArray[k]);
				}
				JSONObject jsonObject = JSONObject.fromObject(params);
				contentJson.put(i, jsonObject);

				// content.put(i, excelStr);

				excelStr = "";
			}

		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			try {
				if (input != null) {
					input.close();
				}
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
		return contentJson;
	}

	/**
	 * 获取单元格数据内容为字符串类型的数据97-2003
	 * 
	 * @param cell
	 * @return
	 */
	private static String getStringCellValue(HSSFCell cell) {
		String strCell = "";
		if (cell != null) {
			switch (cell.getCellType()) {
			case HSSFCell.CELL_TYPE_STRING:
				strCell = cell.getStringCellValue();
				break;
			case HSSFCell.CELL_TYPE_NUMERIC:
				// strCell = String.valueOf(cell.getNumericCellValue());
				if (HSSFDateUtil.isCellDateFormatted(cell)) {// 处理日期格式、时间格式
					SimpleDateFormat sdf = null;
					if (cell.getCellStyle().getDataFormat() == HSSFDataFormat
							.getBuiltinFormat("h:mm")) {
						sdf = new SimpleDateFormat("HH:mm");
					} else {// 日期
						sdf = new SimpleDateFormat("yyyy-MM-dd");
					}
					Date date = cell.getDateCellValue();
					strCell = sdf.format(date);
				} else if (cell.getCellStyle().getDataFormat() == 58) {
					// 处理自定义日期格式:m月d日(通过判断单元格的格式id解决,id的值是58)
					SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
					double value = cell.getNumericCellValue();
					Date date = org.apache.poi.ss.usermodel.DateUtil
							.getJavaDate(value);
					strCell = sdf.format(date);
				} else {
					double value = cell.getNumericCellValue();
					CellStyle style = cell.getCellStyle();
					DecimalFormat format = new DecimalFormat();
					String temp = style.getDataFormatString();
					// 单元格设置成常规
					if (temp.equals("General")) {
						format.applyPattern("#");
					}
					strCell = format.format(value);
				}
				break;
			case HSSFCell.CELL_TYPE_BOOLEAN:
				strCell = String.valueOf(cell.getBooleanCellValue());
				break;
			case HSSFCell.CELL_TYPE_BLANK:
				strCell = "";
				break;
			default:
				cell.setCellType(Cell.CELL_TYPE_STRING); // 如果出现意外类型就先设置为string类型否则将会报数据类型异常
				strCell = cell.getStringCellValue();
				// strCell = "";
				break;
			}
		}

		if (strCell.equals("") || strCell == null) {
			return "";
		}
		if (cell == null) {
			return "";
		}
		return strCell;
	}

	/**
	 * 获取单元格数据内容为日期类型的数据
	 * 
	 * @param cell
	 * @return
	 */
	private static String getDateCellValue(HSSFCell cell) {
		String result = "";
		try {
			int cellType = cell.getCellType();
			if (cellType == HSSFCell.CELL_TYPE_NUMERIC) {
				Date date = cell.getDateCellValue();
				result = (date.getYear() + 1900) + "-" + (date.getMonth() + 1)
						+ "-" + date.getDate();
			} else if (cellType == HSSFCell.CELL_TYPE_STRING) {
				String date = getStringCellValue(cell);
				result = date.replaceAll("[年月]", "-").replace("日", "").trim();
			} else if (cellType == HSSFCell.CELL_TYPE_BLANK) {
				result = "";
			}
		} catch (Exception e) {
			System.out.println("日期格式不正确!");
			e.printStackTrace();
		}
		return result;
	}

	/**
	 * 根据byte数组,生成文件
	 */
	public static void getFile(byte[] bfile, String filePath, String fileName) {
		BufferedOutputStream bos = null;
		FileOutputStream fos = null;
		File file = null;
		try {
			File dir = new File(filePath);
			if (!dir.exists() && dir.isDirectory()) {// 判断文件目录是否存在
				dir.mkdirs();
			}
			file = new File(filePath + "\\" + fileName);
			fos = new FileOutputStream(file);
			bos = new BufferedOutputStream(fos);
			bos.write(bfile);
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			if (bos != null) {
				try {
					bos.close();
				} catch (IOException e1) {
					e1.printStackTrace();
				}
			}
			if (fos != null) {
				try {
					fos.close();
				} catch (IOException e1) {
					e1.printStackTrace();
				}
			}
		}
	}

	// 从byte[]转file
	public static File getFileFromBytes(byte[] b, String outputFile) {
		BufferedOutputStream stream = null;
		File file = null;
		try {
			file = new File(outputFile);
			if (!file.exists() && file.isDirectory()) {// 判断文件目录是否存在
				file.mkdirs(); // mkdirs() 可以在不存在的目录中创建文件夹。诸如:a\\b,既可以创建多级目录。
			}

			FileOutputStream fstream = new FileOutputStream(file);
			stream = new BufferedOutputStream(fstream);
			stream.write(b);
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			if (stream != null) {
				try {
					stream.close();
				} catch (IOException e1) {
					e1.printStackTrace();
				}
			}
		}
		return file;
	}

//	/**
//	 * 读取Office 2007 excel
//	 * */
//	private static Map<Integer, JSONObject> read2007Excels(File file)
//			throws IOException {
//		Map<Integer, JSONObject> contentJson = new LinkedHashMap<Integer, JSONObject>();
//		// 构造 XSSFWorkbook 对象,strPath 传入文件路径
//		XSSFWorkbook xwb = new XSSFWorkbook(new FileInputStream(file));
//		// 读取第一章表格内容
//		XSSFSheet sheet = xwb.getSheetAt(0);
//		Object value = null;
//		XSSFRow row = null;
//		XSSFCell cell = null;
//
//		XSSFRow headerrow = sheet.getRow(0); // 表头 得到标题的内容对象
//		int colNum = headerrow.getPhysicalNumberOfCells();// 得到每行的列数。
//		excleTitle = new String[colNum];
//		for (int i = 0; i < colNum; i++) {
//
//			excleTitle[i] = getStringCellValue(headerrow.getCell((short) i));
//		}
//
//		// System.out.println(sheet.getPhysicalNumberOfRows());
//		// 循环内容项 不循环标题 所以+1
//		for (int i = sheet.getFirstRowNum() + 1; i <= sheet
//				.getPhysicalNumberOfRows(); i++) {
//			row = sheet.getRow(i);
//			if (row == null) {
//				continue;
//			}
//			List<String> linked = new LinkedList<String>();
//			for (int j = row.getFirstCellNum(); j < row.getLastCellNum(); j++) {
//				cell = row.getCell(j);
//				if (null != cell) {
//					value = parseExcel(cell);
//				}
//
//				linked.add(StringUtils.stringIsNull(value));
//			}
//			Map<String, String> params = new LinkedHashMap<String, String>();
//			for (int j = 0; j < linked.size(); j++) {
//				params.put(excleTitle[j], linked.get(j));
//			}
//			JSONObject jsonObject = JSONObject.fromObject(params);
//			contentJson.put(i, jsonObject);
//		}
//
//		return contentJson;
//	}
	
	private static String parseExcel(Cell cell) {  
        String result = new String();  
        switch (cell.getCellType()) {  
        case HSSFCell.CELL_TYPE_NUMERIC:// 数字类型  
        	//1、判断是否是数值格式  
//        	if(cell.getCellType() == HSSFCell.CELL_TYPE_NUMERIC){  
//        	    short format = cell.getCellStyle().getDataFormat();  
//        	    SimpleDateFormat sdf = null;  
//        	    if(format == 14 || format == 31 || format == 57 || format == 58){  
//        	        //日期  
//        	        sdf = new SimpleDateFormat("yyyy-MM-dd");  
//        	    }else if (format == 20 || format == 32) {  
//        	        //时间  
//        	        sdf = new SimpleDateFormat("HH:mm");  
//        	    }  
//        	    double value = cell.getNumericCellValue();  
//        	    Date date = org.apache.poi.ss.usermodel.DateUtil.getJavaDate(value);  
//        	    result = sdf.format(date);  
//        	}  
        	if (HSSFDateUtil.isCellDateFormatted(cell)) {// 处理日期格式、时间格式  
                SimpleDateFormat sdf = null;  
                if (cell.getCellStyle().getDataFormat() == HSSFDataFormat  
                        .getBuiltinFormat("h:mm")) {  
                    sdf = new SimpleDateFormat("HH:mm");  
                } else {// 日期  
                    sdf = new SimpleDateFormat("yyyy-MM-dd");  
                }  
                Date date = cell.getDateCellValue();  
                result = sdf.format(date);  
            } else if (cell.getCellStyle().getDataFormat() == 58) {  
                // 处理自定义日期格式:m月d日(通过判断单元格的格式id解决,id的值是58)  
                SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");  
                double value = cell.getNumericCellValue();  
                Date date = org.apache.poi.ss.usermodel.DateUtil  
                        .getJavaDate(value);  
                result = sdf.format(date);  
            } else {  
                double value = cell.getNumericCellValue();  
                CellStyle style = cell.getCellStyle();  
                DecimalFormat format = new DecimalFormat();  
                String temp = style.getDataFormatString();  
                // 单元格设置成常规  
                if (temp.equals("General")) {  
                    format.applyPattern("#");  
                }  
                result = format.format(value);  
            }  
             
            break;  
        case HSSFCell.CELL_TYPE_STRING:// String类型  
            result = cell.getRichStringCellValue().toString();  
            break;  
        case HSSFCell.CELL_TYPE_BLANK:  
            result = "";  
        default:  
            result = cell.getDateCellValue().toString();  
            break;  
        }  
        return result;  
    }  

	/**
	 * 获取单元格数据内容为字符串类型的数据 excel2007
	 * 
	 * @param cell
	 * @return
	 */
	public static String getStringCellValue(XSSFCell cell) {
		String strCell = "";
		// if(cell.equals("发布日期")){
		// return String.valueOf(cell.getDateCellValue());
		// }
		DecimalFormat df = new DecimalFormat("#");
		switch (cell.getCellType()) {
		case HSSFCell.CELL_TYPE_STRING:
			strCell = cell.getStringCellValue();
			break;
		case HSSFCell.CELL_TYPE_NUMERIC:
			// strCell = String.valueOf(cell.getNumericCellValue());
			// break;
			if (HSSFDateUtil.isCellDateFormatted(cell)) {// 处理日期格式、时间格式
				SimpleDateFormat sdf = null;
				if (cell.getCellStyle().getDataFormat() == HSSFDataFormat
						.getBuiltinFormat("h:mm")) {
					sdf = new SimpleDateFormat("HH:mm");
				} else {// 日期
					sdf = new SimpleDateFormat("yyyy-MM-dd");
				}
				Date date = cell.getDateCellValue();
				strCell = sdf.format(date);
			} else if (cell.getCellStyle().getDataFormat() == 58) {
				// 处理自定义日期格式:m月d日(通过判断单元格的格式id解决,id的值是58)
				SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
				double value = cell.getNumericCellValue();
				Date date = org.apache.poi.ss.usermodel.DateUtil
						.getJavaDate(value);
				strCell = sdf.format(date);
			} else {
				double value = cell.getNumericCellValue();
				CellStyle style = cell.getCellStyle();
				DecimalFormat format = new DecimalFormat();
				String temp = style.getDataFormatString();
				// 单元格设置成常规
				if (temp.equals("General")) {
					format.applyPattern("#");
				}
				strCell = format.format(value);
			}
//			if(HSSFDateUtil.isCellDateFormatted(cell)){
//				SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
//				strCell= sdf.format(HSSFDateUtil.getJavaDate(cell.getNumericCellValue())).toString();
//			}else{
//				strCell= df.format(cell.getNumericCellValue());
//			}
			
			break;
		case HSSFCell.CELL_TYPE_BOOLEAN:
			strCell = String.valueOf(cell.getBooleanCellValue());
			break;
		case HSSFCell.CELL_TYPE_BLANK:
			strCell = "";
			break;
		default:
			if (HSSFDateUtil.isCellDateFormatted(cell)) {// 处理日期格式、时间格式
				SimpleDateFormat sdf = null;
				if (cell.getCellStyle().getDataFormat() == HSSFDataFormat
						.getBuiltinFormat("h:mm")) {
					sdf = new SimpleDateFormat("HH:mm");
				} else {// 日期
					sdf = new SimpleDateFormat("yyyy-MM-dd");
				}
				Date date = cell.getDateCellValue();
				strCell = sdf.format(date);
			} else if (cell.getCellStyle().getDataFormat() == 58) {
				// 处理自定义日期格式:m月d日(通过判断单元格的格式id解决,id的值是58)
				SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
				double value = cell.getNumericCellValue();
				Date date = org.apache.poi.ss.usermodel.DateUtil
						.getJavaDate(value);
				strCell = sdf.format(date);
			} else {
				cell.setCellType(Cell.CELL_TYPE_STRING);
				strCell = cell.getStringCellValue();
			}

			break;
		}
		if (strCell.equals("") || strCell == null) {
			return "";
		}
		if (cell == null) {
			return "";
		}
		return strCell;
	}

	/**
	 * 获得指定文件的byte数组
	 */
	public static byte[] getBytes(String filePath) {
		byte[] buffer = null;
		try {
			File file = new File(filePath);
			FileInputStream fis = new FileInputStream(file);
			ByteArrayOutputStream bos = new ByteArrayOutputStream(1000);
			byte[] b = new byte[1000];
			int n;
			while ((n = fis.read(b)) != -1) {
				bos.write(b, 0, n);
			}
			fis.close();
			bos.close();
			buffer = bos.toByteArray();
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
		return buffer;
	}

	public static void main(String args[]) throws IOException {
		Map<Integer, JSONObject> content = new LinkedHashMap<Integer, JSONObject>();
		File f = new File("D://test//铜价导入模版.xlsx");
		FileInputStream input = null;
		try {
			input = new FileInputStream(f);
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		String filename = f.getName();
		if (filename.toLowerCase().endsWith("xls")) {
			content = ExcelUtil.readExcelContent(input, 1);
		} else if (filename.toLowerCase().endsWith("xlsx")) {
			content = ExcelUtil.read2007Excels(input, 1);
		}

		List<AreaCopperInfos> listAci = new ArrayList<AreaCopperInfos>();
		for (Map.Entry<Integer, JSONObject> entry : content.entrySet()) {
			AreaCopperInfos aci = new AreaCopperInfos();
			aci.setAudit(1);
			aci.setChange(Double.valueOf(StringUtils.stringIsNull(entry
					.getValue().get("涨跌"))));
			aci.setCommodity(StringUtils.stringIsNull(entry.getValue()
					.get("品名")));
			aci.setFold(Double.valueOf(StringUtils.stringIsNull(entry
					.getValue().get("均价"))));
			aci.setInfTypeId(129);
			aci.setMaterial(StringUtils
					.stringIsNull(entry.getValue().get("材质")));
			aci.setMaximumprice(Double.valueOf(StringUtils.stringIsNull(entry
					.getValue().get("最高价"))));
			aci.setMinimumtprice(Double.valueOf(StringUtils.stringIsNull(entry
					.getValue().get("最低价"))));
			aci.setOg(StringUtils.stringIsNull(entry.getValue().get("产地/牌号")));
			String fbsj = StringUtils
					.stringIsNull(entry.getValue().get("发布日期"));
			Timestamp ts = new Timestamp(System.currentTimeMillis());
			String tsStr = fbsj + " 00:00:00";
			try {
				ts = Timestamp.valueOf(tsStr);
				// System.out.println(ts);
			} catch (Exception e) {
				e.printStackTrace();
			}
			aci.setReleaseDate(ts);
			aci
					.setRemarks(StringUtils.stringIsNull(entry.getValue().get(
							"备注")));
			aci
					.setUnit(StringUtils.stringIsNull(entry.getValue().get(
							"产地/牌号")));
			aci.setInfosid(0);
			listAci.add(aci);
			// System.out.println(entry.getValue().get("品名"));
			// System.out.println(entry.getValue().get("材质"));
			// System.out.println(entry.getValue().get("最低价"));
			// System.out.println(entry.getValue().get("最高价"));
			// System.out.println(entry.getValue().get("均价"));
			// System.out.println(entry.getValue().get("发布日期"));
			// System.out.println("---------------------");
		}
		// 进行分组
		Map<Long, List<AreaCopperInfos>> map = group(listAci,
				new GroupBy<Long>() {
					@Override
					public Long groupby(Object obj) {
						AreaCopperInfos d = (AreaCopperInfos) obj;
						return d.getReleaseDate().getTime(); // 分组依据为课程ID
					}
				});

		Set<Long> key = map.keySet();
		for (Iterator it = key.iterator(); it.hasNext();) {
			Long s = (Long) it.next();
			System.out.println(map.get(s));
		}
		// //Group g=new Group();
		// List<GroupContinerAreaCopperInfos>
		// lgac=Group.groupAreaCopperInfos(listAci);
		//		
		// System.out.println("分组完成");
		// for(int i=0;i<lgac.size();i++){
		// System.out.println(lgac.get(i).getReleaseDate());
		// }
	}

	/**
	 * 分組依據接口,用于集合分組時,獲取分組依據
	 * 
	 * @author ZhangLiKun
	 * @title GroupBy
	 * @date 2013-4-23
	 */
	public interface GroupBy<T> {
		T groupby(Object obj);
	}

	/**
	 * 
	 * @param colls
	 * @param gb
	 * @return
	 */
	public static final <T extends Comparable<T>, D> Map<T, List<D>> group(
			Collection<D> colls, GroupBy<T> gb) {
		if (colls == null || colls.isEmpty()) {
			System.out.println("分組集合不能為空!");
			return null;
		}
		if (gb == null) {
			System.out.println("分組依據接口不能為Null!");
			return null;
		}
		Iterator<D> iter = colls.iterator();
		Map<T, List<D>> map = new HashMap<T, List<D>>();
		while (iter.hasNext()) {
			D d = iter.next();
			T t = gb.groupby(d);
			if (map.containsKey(t)) {
				map.get(t).add(d);
			} else {
				List<D> list = new ArrayList<D>();
				list.add(d);
				map.put(t, list);
			}
		}
		return map;
	}

	public static List<AreaCopperInfos> removeDuplicate(
			List<AreaCopperInfos> list) {
		for (int i = 0; i < list.size() - 1; i++) {
			for (int j = list.size() - 1; j > i; j--) {
				if (list.get(j).getReleaseDate().equals(
						list.get(i).getReleaseDate())) {
					list.remove(j);
				}
			}
		}
		return list;
	}

	public static int getWeek(String str) {
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
		Date date = null;
		try {
			date = sdf.parse(str);
		} catch (ParseException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		Calendar calendar = Calendar.getInstance();
		calendar.setTime(date);
		// 第几周
		int week = calendar.get(Calendar.WEEK_OF_MONTH);
		// 第几天,从周日开始
		int day = calendar.get(Calendar.DAY_OF_WEEK);
		return week;
	}

	/**
	 * 根据日期获得星期
	 * 
	 * @param date
	 * @return
	 */
	public static String getWeekOfDate(Date date) {
		String[] weekDaysName = { "星期日", "星期一", "星期二", "星期三", "星期四", "星期五",
				"星期六" };
		String[] weekDaysCode = { "0", "1", "2", "3", "4", "5", "6" };
		Calendar calendar = Calendar.getInstance();
		calendar.setTime(date);
		int intWeek = calendar.get(Calendar.DAY_OF_WEEK) - 1;
		return weekDaysCode[intWeek];
	}

	// 根据日期取得星期几
	public static String getWeek(Date date) {
		String[] weeks = { "星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六" };
		Calendar cal = Calendar.getInstance();
		cal.setTime(date);
		int week_index = cal.get(Calendar.DAY_OF_WEEK) - 1;
		if (week_index < 0) {
			week_index = 0;
		}
		return weeks[week_index];
	}

	/**
	 * 判断两个日期是否为同一周
	 * 
	 * @param date1
	 * @param date2
	 * @return
	 */
	public static boolean isSameDate(String date1, String date2) {
		SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
		Date d1 = null;
		Date d2 = null;
		try {
			d1 = format.parse(date1);
			d2 = format.parse(date2);
		} catch (Exception e) {
			e.printStackTrace();
		}
		Calendar cal1 = Calendar.getInstance();
		Calendar cal2 = Calendar.getInstance();
		cal1.setTime(d1);
		cal2.setTime(d2);
		int subYear = cal1.get(Calendar.YEAR) - cal2.get(Calendar.YEAR);
		// subYear==0,说明是同一年
		if (subYear == 0) {
			if (cal1.get(Calendar.WEEK_OF_YEAR) == cal2
					.get(Calendar.WEEK_OF_YEAR))
				return true;
		}
		// 例子:cal1是"2005-1-1",cal2是"2004-12-25"
		// java对"2004-12-25"处理成第52周
		// "2004-12-26"它处理成了第1周,和"2005-1-1"相同了
		// 大家可以查一下自己的日历
		// 处理的比较好
		// 说明:java的一月用"0"标识,那么12月用"11"
		else if (subYear == 1 && cal2.get(Calendar.MONTH) == 11) {
			if (cal1.get(Calendar.WEEK_OF_YEAR) == cal2
					.get(Calendar.WEEK_OF_YEAR))
				return true;

		}
		// 例子:cal1是"2004-12-31",cal2是"2005-1-1"
		else if (subYear == -1 && cal1.get(Calendar.MONTH) == 11) {
			if (cal1.get(Calendar.WEEK_OF_YEAR) == cal2
					.get(Calendar.WEEK_OF_YEAR))
				return true;

		}
		return false;
	}

	@SuppressWarnings("static-access")
	public static String getValue(XSSFCell xssfCell) {
		if (xssfCell.getCellType() == xssfCell.CELL_TYPE_BOOLEAN) {
			return String.valueOf(xssfCell.getBooleanCellValue());
		} else if (xssfCell.getCellType() == xssfCell.CELL_TYPE_NUMERIC) {
//			DecimalFormat df = new DecimalFormat("#.######");
//			String strCell = df.format(xssfCell.getNumericCellValue());
//			 DecimalFormat df = new DecimalFormat("0");  
//		     String strCell = df.format(xssfCell.getNumericCellValue()); 

			return String.valueOf(xssfCell.getNumericCellValue());
		} else {
			return String.valueOf(xssfCell.getStringCellValue());
		}
	}

	@SuppressWarnings("static-access")
	public static String getValue(HSSFCell hssfCell) {

		if (hssfCell.getCellType() == hssfCell.CELL_TYPE_BOOLEAN) {
			return String.valueOf(hssfCell.getBooleanCellValue());
		} else if (hssfCell.getCellType() == hssfCell.CELL_TYPE_NUMERIC) {
			if (org.apache.poi.ss.usermodel.DateUtil
					.isCellDateFormatted(hssfCell)) {
				// sb.append(SEPARATOR + cell.getDateCellValue());
				return String.valueOf(hssfCell.getDateCellValue());
			} else {
				// sb.append(SEPARATOR + cellValue.getNumberValue());
				return String.valueOf(hssfCell.getNumericCellValue());
			}
			// return String.valueOf(hssfCell.getNumericCellValue());
			// return String.valueOf(hssfCell.getNumericCellValue());
			// } else if (hssfCell.getCellType() == hssfCell.CELL_TYPE_STRING) {
			// return String.valueOf(hssfCell.getStringCellValue());
		} else {
			return String.valueOf(hssfCell.getStringCellValue());
		}
	}
//	
//	public static int getweekofyear(String str){
//		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
//		Date date = null;
//		try {
//			date = sdf.parse(str);
//		} catch (ParseException e) {
//			// TODO Auto-generated catch block
//			e.printStackTrace();
//		}
//		Calendar cal=Calendar.getInstance(); 
//		cal.setTime(date);
//		return cal.get(Calendar.WEEK_OF_YEAR);
//		
//	}

	 // 获取当前时间所在年的最大周数
	 public static int getMaxWeekNumOfYear(int year) {
	  Calendar c = new GregorianCalendar();
	  c.set(year, Calendar.DECEMBER, 31, 23, 59, 59);

	  return getWeekOfYear(c.getTime());
	 }
	 
	 // 获取当前时间所在年的周数
	 public static int getWeekOfYear(Date date) {
	  Calendar c = new GregorianCalendar();
	  c.setFirstDayOfWeek(Calendar.MONDAY);
	  
	  c.setMinimalDaysInFirstWeek(7);
	  c.setTime(date);

	  return c.get(Calendar.WEEK_OF_YEAR);
	 }
}



并附上测试的excel文件
0
0
分享到:
评论

相关推荐

    java实现分组聚合

    在Java编程中,分组聚合是一项重要的数据处理技术,它允许我们按照特定的规则将数据组织成多个逻辑组,然后对这些组进行聚合操作,如计算每个组的总和、平均值等。这个主题通常与Java集合框架和流API紧密相关,特别...

    java 集合分组与排序

    `Collectors.groupingBy`方法允许我们将集合中的元素按照指定的键进行分组,创建一个Map,其中键是分组的标准,值是一个包含该组所有元素的列表。例如,如果我们有一个`Person`对象的列表,可以按年龄分组: ```...

    (Java)人群随机分组 by 夜猫

    在Java编程中,实现"人群随机分组"的需求通常涉及到数组、集合以及随机数生成等基础知识。本项目 `(Java)人群随机分组 by 夜猫` 提供了一个解决方案,旨在将一组人(可以理解为一个数据列表)尽可能均匀地划分为四个...

    Java在Excel中创建多级分组、折叠或展开分组的实现

    在实现中,需要使用Free Spire.XLS for Java(免费版)Jar包,通过官网下载jar包,并解压,将lib文件夹下的Spire.Xls.jar导入Java程序;或者通过Maven仓库下载导入。 下面是Java代码示例,通过方法一来实现多级分组...

    java查询list分组

    比如数据库查询出来的是每个员工的信息,使用此程序能将各个部门、各个小组进行分类,放入到map中。

    java1.8 中 stream 的 groupingBy 最大值、最小值分组

    主要是介绍在 JDK8中使用 stream 流的 groupingBy 方法源进行最大值分组、最小值分组、平均值分组、统计分组

    关于Java中List对象的分页思想-按10个或者n个数对list进行分组

    Java中List对象的分页思想-按10个或者n个数对list进行分组 Java中List对象的分页思想是一种常用的数据处理技术,通过将一个大的List对象分割成多个小的List对象,每个小的List对象包含一定数量的元素,例如10个或n...

    ext gridpanel多层表头分组小计导出excel与Java后台交互全代码

    该例子实现了ext的gridpanel多层表头+分组+小计以及与Java后台交互的全代码。还有自适应浏览器大小的功能包括导出excel,里面有注释,可能注释不全。分别为group.jsp,totals.jsp页面。

    TFTP4Java0.8 改进版

    基于Opensource 上的TFTP4Java0.8 版,移除Log4J等一些额外的代码并修复其存在的一些bug及限制,比如,消除文件32M限制,支持大文件传输,修复其不能在Linux下成功运行等错误。

    基于Java及Redis缓存的rules2改进版设计源码

    本项目为rules规则的改进版设计源码,采用Java作为主要开发语言,并集成了Redis缓存技术。项目结构包含298个文件,涵盖142个Java源代码文件、50个JavaScript文件、20个CSS样式文件、14个Less样式文件、14个SCSS样式...

    [Java] Java 编程面试揭秘 英文版

    [Wrox] Java 编程面试揭秘 英文版 [Wrox] Java Programming Interviews Exposed E Book ☆ 图书概要:☆ If you are a skilled Java programmer but are concerned about the Java coding interview process ...

    基于粒子群优化算法PSO改进版Java仿真源码+数据(课程设计).zip

    基于粒子群优化算法PSO改进版Java仿真源码+数据(课程设计).zip 已获导师指导并通过的97分的高分期末大作业项目,可作为课程设计和期末大作业,下载即用无需修改,项目完整确保可以运行。 基于粒子群优化算法PSO...

    JAVA实现从excel表中读取的分组点名可执行程序

    java小程序从excel表中读取点名姓名和分组信息,按组随机抽取人 java从excel表中读取数据按分组随机抽取------源码 效果展示在 https://mp.csdn.net/postedit/82792196 可执行文件在 ...

    lambda表达式解决java后台分组排序过程解析

    "lambda表达式解决java后台分组排序过程解析" lambda表达式是Java 8中引入的一种新的语法特性,它允许开发者使用更加简洁的方式来编写代码。lambda表达式可以用来代替匿名内部类,简化代码的编写,并且提高代码的...

    Java API文档 中文网页版

    Java API文档按照包(Package)进行组织,例如: 1. `java.lang`:这是所有Java程序的基础包,包含了基本类型包装类、Object类、String类、Math类等核心类。 2. `java.util`:包含各种实用工具类,如集合框架...

    java ArrayList按照同一属性进行分组

    本文将详细讨论如何在Java中使用ArrayList按照同一属性进行分组。 首先,我们需要创建一个表示商品的类SkuVo,它包含了商品的ID(skuId)、产品名称(productName)以及品牌店铺编号(brandStoreSn)。以下为SkuVo...

    SuperMap iObjects Java SQL查询中的分组查询

    这个范例主要是实现SQL查询中的分组查询,可以查询在一定的空间范围内各个地物的数目,这个在实践中很用的较广,比如查询某一区域内A类建筑、B类建筑、C类建筑的数目,有利于后续的小区的建设等等,但是这个查询只能...

    Java网络编程第三版.pdf

    《Java网络编程第三版》是Java开发者深入理解网络编程的重要参考资料。这本书主要涵盖了Java平台上的网络应用程序开发,从基础概念到高级技术,为读者提供了一套全面的学习路径。以下是本书中涉及的一些关键知识点:...

    Java 6.0 完整安装版

    Java 6.0版本引入了一些重要的改进,如改进的Garbage Collection机制,提升了应用程序的性能;加入了新的Swing组件和JavaFX Script的支持,增强了图形用户界面的开发能力;还对Java语言本身进行了扩展,例如加入枚举...

Global site tag (gtag.js) - Google Analytics