`
jerrychenjj
  • 浏览: 26769 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

通过poi取出excel中的数据

    博客分类:
  • poi
阅读更多

由于项目需要,需要将用户UPLOAD的EXCEL表中的数据取出来,放进DB中,所以简单先写了个测试程序。

 

package com.uploadexcel;

import java.math.BigDecimal;
import java.text.DecimalFormat;
import java.text.SimpleDateFormat;
import java.util.Locale;

import org.apache.poi.hssf.usermodel.HSSFCell;
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;

public class TestUploadExcel {
	public static final int POI_NORMAL_FIELD = 0;

	public static final int POI_DATE_FIELD = 1;

	public static final int POI_NUM_AS_STR_FIELD = 2;

	public static final int PO_NUM_AS_DATE_FIELD = 3;

	public final static String NUMBER_FORMAT_0_PLACES = "######0";

	public static final String INPUT_DATE_FORMAT = "dd/MM/yyyy";

	public static final String INPUT_DATE_FORMAT_2 = "yyMMdd";

	public final static String INPUT_DATETIME_FORMAT = "dd/MM/yyyy HH:mm";

	public static final String INPUT_MONTHYEAR_FORMAT = "yyMM";

	public static final String OUTPUT_DATE_FORMAT = "dd/MM/yyyy";

	public final static String OUTPUT_DATETIME_FORMAT = "dd/MM/yyyy HH:mm";

	public static final String OUTPUT_MONTHYEAR_FORMAT = "yyMM";

	public final static Locale DEFAULT_LOCALE = Locale.US;

	public static boolean isEmpty(String str) {
		return (str == null || str.trim().length() == 0);
	}

	public static boolean isEmpty(Object obj) {
		String str = String.valueOf(obj);
		return (str == null || str.equals("null") || str.trim().length() == 0);
	}

	public static String formatNumber0Places(BigDecimal inNum) {
		return formatNumber(inNum, NUMBER_FORMAT_0_PLACES);
	}

	public static String dateToString(java.util.Date date) {
		if (date == null) {
			return "";
		}
		SimpleDateFormat formatter = new SimpleDateFormat(OUTPUT_DATE_FORMAT,
				DEFAULT_LOCALE);

		return formatter.format(date);
	}

	public static String formatNumber(BigDecimal inNum, String format) {
		if (inNum == null) {
			return "";
		}

		if (isEmpty(inNum)) {
			return "";
		}

		if (isEmpty(format)) {
			return "";
		}

		try {
			DecimalFormat myFormatter = new DecimalFormat(format);
			return myFormatter.format(inNum.doubleValue());
		} catch (Exception e) {
			return "";
		}
	}

	protected String poiReadCell(HSSFCell cell, int type) {
		try {
			String retStr = "";
			// System.out.println(">-------------------poiReadCell():" +
			// cell.getCellType());
			switch (cell.getCellType()) {
			case HSSFCell.CELL_TYPE_STRING:
				if (type == TestUploadExcel.POI_NORMAL_FIELD) {
					retStr = cell.getStringCellValue();
				}
				break;
			case HSSFCell.CELL_TYPE_NUMERIC:
				if (type == TestUploadExcel.POI_NORMAL_FIELD) {
					retStr = TestUploadExcel
							.formatNumber0Places(new java.math.BigDecimal(cell
									.getNumericCellValue()));
				} else if (type == TestUploadExcel.POI_DATE_FIELD) {
					retStr = TestUploadExcel.dateToString(cell
							.getDateCellValue());
				}
				break;
			case HSSFCell.CELL_TYPE_FORMULA:
			case HSSFCell.CELL_TYPE_ERROR:
			case HSSFCell.CELL_TYPE_BLANK:
			case HSSFCell.CELL_TYPE_BOOLEAN:
				break;
			default:
				retStr = TestUploadExcel.dateToString(cell.getDateCellValue());
			}
			return retStr;
		} catch (Exception e) {
			System.err.println("err when poiReadCell : " + e.getMessage());
			return "";
		}
	}

	protected void extractExcel(String fileName) {
		try {
			java.io.FileInputStream fin = new java.io.FileInputStream(fileName);
			POIFSFileSystem posFile = new POIFSFileSystem(fin);
			HSSFWorkbook hssfBook = new HSSFWorkbook(posFile);

			HSSFSheet sheet = hssfBook.getSheetAt(0);
			int totalRow = sheet.getLastRowNum();
			System.out
					.println(">-------------------extractExcel(): lastRowNum="
							+ totalRow);
			// 客户表中的数据,有可能中间有连续几行没有数据,是空白ROW, 之后接着又有数据
			// 这里默认用户数据中空白的行最多允许有3行,多于3行的话,认为EXCEL到尾部。

			int nullFlag1 = 0;
			int nullFlag2 = 1;
			for (int j = 4; j <= totalRow; j++) {
				HSSFRow eRow = sheet.getRow(j);
				if (eRow == null
						|| isEmpty(poiReadCell(eRow.getCell((short) 0),
								TestUploadExcel.POI_NORMAL_FIELD))) {
					nullFlag2 = 1;
				} else {
					nullFlag1 = 0;
					nullFlag2 = 0;
				}
				nullFlag1 = nullFlag1 + nullFlag2;
				System.out.println(">&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& line"
						+ j);
				System.out.println(">&&&&&&&&&&&&&&&&& nullFlag1=" + nullFlag1);
				if (eRow == null && nullFlag1 <= 3)
					continue;
				if (nullFlag1 > 3)
					break;
				if (isEmpty(poiReadCell(eRow.getCell((short) 0),
						TestUploadExcel.POI_NORMAL_FIELD)))
					continue;
				for (int i = 0; i < 3; i++) {
					String cellValue = poiReadCell(eRow.getCell((short) i),
							TestUploadExcel.POI_NORMAL_FIELD);
					System.out.println(">------------------ cellValue" + i
							+ "=" + cellValue);
				}
			}
		} catch (Exception e) {
			System.err.println("err when extract Excel file : "
					+ e.getMessage());
		}
	}

	public static void main(String args[]) {
		TestUploadExcel test = new TestUploadExcel();
		test.extractExcel("D:/PorjectResearch/test.xls");
	}
}

  

分享到:
评论

相关推荐

    Spring3 MVC + POI 实现 Excel与MySQL 的导入导出

    本主题聚焦于如何利用Spring3 MVC框架结合Apache POI库来实现在Java环境中Excel与MySQL数据库之间的数据导入与导出。 Spring3 MVC是Spring框架的一个组件,专门用于构建Web应用程序,它提供了模型-视图-控制器(MVC...

    poi 和数据库相结合

    3. **数据更新**:根据Excel中的修改,更新数据库中的记录,简化数据维护工作。 4. **数据分析**:可以先用Excel做初步的数据分析,然后将结果导入数据库进行进一步的统计和处理。 在提供的“poi and jdbc”文件中...

    Java读取Excel表格中的日期

    ### Java读取Excel表格中的日期 #### 背景与问题描述 在处理Excel文件时,经常遇到的一个问题是如何正确地识别并处理日期格式的数据。这是因为Excel中的日期格式较为复杂,有时甚至会出现不同版本的Excel文件中...

    excel中取出泛型数据存入泛型的list中

    总的来说,从Excel中取出泛型数据并存入泛型List中,不仅提高了代码的可维护性和效率,还使得数据处理更加灵活,易于扩展。无论是Java的Apache POI还是.NET的NPOI,都提供了强大的工具来处理这类任务。同时,结合XML...

    java使用POI批量导入excel数据的方法

    通过上面的代码,可以读取 Excel 文件中的数据,并将其打印出来。这个方法可以用于批量导入 Excel 数据,具有实践价值。 使用 Java 和 POI 批量导入 Excel 数据的方法可以满足实际需求,提供了一个实用的解决方案。

    上传下载Excel的Demo,java代码

    在这个场景下,JDBC可能被用来读取Excel文件中的数据并存入数据库,或者反向操作,从数据库中取出数据并写入Excel文件。 接着,我们关注“ImportExcelDemo”这个文件。这很可能是Java代码的主入口或一个关键类,...

    java实现csv导出千万级数据实例

    在Java中,Apache POI库通常用于操作Microsoft Office文档,包括Excel。然而,当处理千万级的数据时,POI的工作方式可能导致内存消耗过大,甚至触发栈溢出异常。这是因为POI将整个工作簿加载到内存中,对于大规模...

    jsp导出Excel

    创建一个名为`POIExcel.java`的类,该类负责从数据库中取出数据,并将这些数据写入Excel文件中。示例代码如下: ```java package myBean; import org.apache.poi.hssf.usermodel.*; import java.io.*; import java...

    WEB按模板导出到XLS报表

    在IT行业中,Web应用经常需要将数据以报表的形式导出为Excel(XLS)格式,以便用户进行数据分析、打印或共享。"WEB按模板导出到XLS报表"这一技术主题涉及了几个关键知识点,包括Web开发、数据处理、Excel模板设计...

    随机选择一个人员工具.rar

    通过Apache POI库,我们可以方便地解析Excel数据并将其存储到内存中的数据结构,如ArrayList或HashMap,这些数据结构便于我们进行后续的随机选择操作。 在工具中,用户首先需要导入Excel文件,这一步骤通常涉及文件...

    乱码的解决方法

    主要原因是数据库取出的数据在传输到前端展示的过程中未进行正确的字符集转换。 **解决方法:** 1. **调整数据源配置:** - 在`WEB-INF/reportConfig.xml`文件中的`dataSource`节点,设置正确的字符集转换规则。 ...

Global site tag (gtag.js) - Google Analytics