`
wxinpeng
  • 浏览: 590951 次
  • 性别: Icon_minigender_1
  • 来自: 青岛
社区版块
存档分类
最新评论

apache POI 读取 Excel

阅读更多
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
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 ExcelReader {
	private POIFSFileSystem fs;
	private HSSFWorkbook wb;
	private HSSFSheet sheet;
	private HSSFRow row;
	private FileInputStream input;
	private String[] excleTitle;
	public String[] readExcelTitle(String excelPath) {// 读取Excel表格表头的内容
		try {
			input = new FileInputStream(new File(excelPath));// excelPath,Excel
			// 文件 的绝对路径
			fs = new POIFSFileSystem(input);
			wb = new HSSFWorkbook(fs);
			sheet = wb.getSheetAt(0);
			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));
			}
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			try {
				if (input != null) {
					input.close();
				}
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
		return excleTitle;
	}
	public Map<Integer, String> readExcelContent(String excelPath) {// 读取Excel数据内容
		Map<Integer, String> content = new HashMap<Integer, String>();
		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();// 得到每行的列数。
			for (int i = 1; i < rowNum; i++) { // 正文内容应该从第二行开始,第一行为表头的标题
				row = sheet.getRow(i);
				int j = 0;
				while (j < colNum) {
					excelStr += getStringCellValue(row.getCell((short) j)).trim()+ "&";
					j++;
				}
				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 content;
	}
	private String getStringCellValue(HSSFCell cell) {// 获取单元格数据内容为字符串类型的数据
		String strCell = "";
		switch (cell.getCellType()) {
		case HSSFCell.CELL_TYPE_STRING:
			strCell = cell.getStringCellValue();
			break;
		case HSSFCell.CELL_TYPE_NUMERIC:
			strCell = String.valueOf(cell.getNumericCellValue());
			break;
		case HSSFCell.CELL_TYPE_BOOLEAN:
			strCell = String.valueOf(cell.getBooleanCellValue());
			break;
		case HSSFCell.CELL_TYPE_BLANK:
			strCell = "";
			break;
		default:
			strCell = "";
			break;
		}
		if (strCell.equals("") || strCell == null) {
			return "";
		}
		if (cell == null) {
			return "";
		}
		return strCell;
	}
	private 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;
	}
}

 

  • poi-3.1-excel.jar (1.3 MB)
  • 描述: apache poi 读取 Excel 的 jar 包
  • 下载次数: 334
分享到:
评论
3 楼 tssnowlotus 2012-01-06  
cbxvsli 写道
你60行循环的时候有问题。永远会少列数据
正确的应该是:
// 正文内容应该从第二行开始,第一行为表头的标题
for (int i = 1; i <= rowNum; i++) {     row = sheet.getRow(i);
    int j = 0;
    while (j < colNum) {
        excelStr += getStringCellValue
              (row.getCell((short) j)).trim() + "&";
        j++;
    }
    content.put(i, excelStr);
    excelStr = "";
}

-----------------------
2 楼 tssnowlotus 2012-01-06  
呵呵,这么久的贴子还有人回复呢。
1 楼 cbxvsli 2011-12-13  
你60行循环的时候有问题。永远会少列数据
正确的应该是:
// 正文内容应该从第二行开始,第一行为表头的标题
for (int i = 1; i <= rowNum; i++) {     row = sheet.getRow(i);
    int j = 0;
    while (j < colNum) {
        excelStr += getStringCellValue
              (row.getCell((short) j)).trim() + "&";
        j++;
    }
    content.put(i, excelStr);
    excelStr = "";
}

相关推荐

    Excle读取数据转换为实体List【基于apache-poi】

    3. 使用Apache POI读取Excel:下面的代码展示了如何打开Excel文件并读取数据: ```java import org.apache.poi.ss.usermodel.*; import org.apache.poi.xssf.usermodel.XSSFWorkbook; import java.io.File; import ...

    Java使用apache POI读取Excel2007以上代码以及所需jar包

    本文将详细介绍如何使用Apache POI库来读取Excel 2007及以上版本(即XLSX格式)的文件,并提供所需的jar包信息。 首先,要使用Apache POI读取XLSX文件,你需要确保引入了正确的依赖。Apache POI项目提供了多个组件...

    apache poi 读取Excel文件内容(2003,2007)

    这篇博文主要讲解如何使用Apache POI库来读取Excel文件的内容,无论是2003版的.XLS还是2007版及以后的.XLSX格式。 在Java编程中,Apache POI 提供了丰富的API,使得开发者可以方便地操作Excel文件。首先,我们需要...

    利用POI读取excel写入到word

    以上就是使用Apache POI读取Excel数据并写入Word的基本流程。在实际应用中,你可能需要处理更复杂的情况,比如合并单元格、处理公式、格式转换等,这都需要对POI API有更深入的理解。同时,为了提高性能,可以考虑...

    apache POI文件读写excel

    3. **读取Excel文件** - 使用`WorkbookFactory`创建`Workbook`对象,这可以是HSSFWorkbook(HSSF)或XSSFWorkbook(XSSF)。 - 通过`Workbook`获取`Sheet`对象,表示工作表。 - `Sheet`中包含多个`Row`,每个`Row...

    poi读取excel文件

    标题提到的"poi读取excel文件",指的是使用Apache POI库来处理Excel数据。在最新的版本中,POI引入了更高效和强大的功能,使得处理Excel文件变得更加方便。 描述中提到了"最新版poi相关的6个jar包",这些jar包是...

    POI读取Excel带格式数据

    本篇将详细讲解如何使用Apache POI读取Excel文件中的带格式数据。 首先,理解Apache POI的基本架构至关重要。POI提供了HSSF(Horrible Spreadsheet Format)用于处理老版本的.xls文件,而XSSF用于处理较新的.xlsx...

    poi读取excel的jar包

    标题中的"poi读取excel的jar包"指的是Apache POI库的一个版本,它包含了读取Excel 2007文件所需的类和方法。在Java程序中,引入这个jar包后,开发者可以编写代码来处理.xlsx文件,无论是读取数据、解析工作表还是...

    POI读取excel的内容.zip

    本教程将详细讲解如何使用Apache POI库来读取Excel文件的内容。 首先,为了在Java项目中使用Apache POI,我们需要通过Maven进行依赖管理。在`pom.xml`文件中添加以下依赖: ```xml &lt;groupId&gt;org.apache.poi ...

    java使用 poi 读取excel

    Java 使用 Apache POI 读取 Excel 是一个常见的任务,在处理数据导入、导出或数据分析时非常有用。Apache POI 是一个流行的开源库,它允许 Java 开发者创建、修改和显示 Microsoft Office 格式的文件,其中包括 ...

    apache poi读取word内容

    Apache POI是一个强大的Java库,专门用于处理Microsoft Office格式的文件,如Word、Excel和PowerPoint。在本案例中,我们将关注如何使用Apache POI来读取Word文档的内容,并将其以流的形式返回到Web应用程序的前端...

    Apache poi 操作 excel 文件压缩包

    在Java环境中,Apache POI 提供了一套API,使得开发者能够创建、修改和读取Excel文件。这个压缩包包含了Apache POI库的多个版本及其依赖库,如ooxml-schemas、xmlbeans等,用于支持对Excel文件的OOXML(Office Open ...

    POI读取Excel合并单元格并储存

    本文将深入探讨如何使用Java的Apache POI库来读取Excel文件,并处理其中合并单元格的数据,同时将这些数据存储到实体类中以供后续使用。 Apache POI是一个强大的库,允许程序员使用Java来创建、修改和显示Microsoft...

    Java用poi读取excel文件.pdf

    Java 使用 Apache POI 读取 Excel 文件是一种常见的数据处理任务,尤其在数据分析、报表生成以及自动化测试等场景中。Apache POI 是一个流行的开源库,它允许开发者在 Java 应用程序中创建、修改和显示 Microsoft ...

    android POI 读取excel 精简jar

    在Android平台上,使用Apache POI库来读取Excel文件是一种常见的解决方案。Apache POI是一个流行的开源项目,它允许程序员创建、修改和显示Microsoft Office格式的文件,包括Excel(.xls和.xlsx)。在这个“android ...

    POI 读取Excel文件

    Apache POI 是一个开源项目,专门用于...通过以上介绍,你应该已经掌握了使用 Apache POI 读取 Excel 文件的基本方法和一些高级特性。在实际开发中,根据具体需求进行灵活运用,可以实现复杂的 Excel 数据处理任务。

    poi读取excel文件实例(兼容excel2007)

    在“poi读取excel文件实例”中,我们将讨论如何使用Apache POI API来读取和操作Excel 2007文件。以下是一些关键知识点: 1. **创建工作簿对象**:首先,你需要通过`WorkbookFactory`类的`create()`方法打开或创建一...

Global site tag (gtag.js) - Google Analytics