`

excel2003 与 excel2007 导入

阅读更多

excel2003 与  excel2007 导入

 

 

package com.chen.ExcelUtil;

import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import org.apache.poi.POIXMLDocument;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFDateUtil;
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.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

public class ReadExcel {
	/** 错误信息 */
	private String errorInfo;
	
//	------------------test----------------------
	public static void main(String[] args) {
		ReadExcel readExcel = new ReadExcel();
		String filePath = "C:\\Users\\Administrator\\Desktop\\123\\personInfo\\personInfo.xlsx";
		if(readExcel.validateExcel(filePath)){
			Workbook wb = readExcel.read(filePath);
			readExcel.read(wb);
		}else{
			System.out.println("不是excel文件!");
		}
	}
	
	
	/**
	 * 验证EXCEL文件是否合法
	 */
	public boolean validateExcel(String filePath) {

		/** 判断文件名是否为空或者文件是否存在 */
		if (!CEVUtil.fileExist(filePath)) {
			errorInfo = "文件不存在";
			return false;
		}

		/** 检查文件是否是Excel格式的文件 */
		if (!CEVUtil.isExcel(filePath)) {
			errorInfo = "文件名不是excel格式";
			return false;
		}
		return true;
	}

	/**
	 * @描述:根据文件名读取excel文件
	 */
	public Workbook read(String filePath) {
//		List<List<String>> dataLst = new ArrayList<List<String>>();
		InputStream is = null;
		Workbook wb = null;
		try {
			/** 验证文件是否合法 */
			if (!validateExcel(filePath)) {
				System.out.println(errorInfo);
				return null;
			}
			/** 判断文件的类型,是2003还是2007 */
			boolean isExcel2003 = true;
			if (CEVUtil.isExcel2007(filePath)) {
				isExcel2003 = false;
			}
			/** 调用本类提供的根据流读取的方法 */
			is = new FileInputStream(new File(filePath));
		
			if (isExcel2003) {
				wb = new HSSFWorkbook(is);
			} else {
				wb = new XSSFWorkbook(is);
			}
			is.close();
		} catch (IOException e) {
			e.printStackTrace();
		} catch (Exception ex) {
			ex.printStackTrace();
		} finally {
			if (is != null) {
				try {
					is.close();
				} catch (IOException e) {
					is = null;
					e.printStackTrace();
				}
			}
		}
		return wb;
	}

	/**
	 * @描述:读取数据
	 */
	@SuppressWarnings("unused")
	private List<List<String>> read(Workbook wb) {
		List<List<String>> dataLst = new ArrayList<List<String>>();
		/** 得到总的shell */
		int sheetAccount = wb.getNumberOfSheets();
		/** 得到第一个shell */
		Sheet sheet = wb.getSheetAt(0);
		/** 得到Excel的行数 */
		int rowCount = sheet.getPhysicalNumberOfRows();
		/** 也可以通过得到最后一行数 */
		int lastRowNum = sheet.getLastRowNum();
		/** 循环Excel的行 */
		for (int r = 0; r < rowCount; r++) {
			Row row = sheet.getRow(r);
			if (row == null) {
				continue;
			}
			List<String> rowLst = new ArrayList<String>();
			/** 循环Excel的列 */
			for (int c = 0; c < row.getPhysicalNumberOfCells(); c++) {
				Cell cell = row.getCell(c);
				String cellValue = "";
				if (null != cell) {
					// 以下是判断数据的类型
					switch (cell.getCellType()) {
					// XSSFCell可以达到相同的效果
					case HSSFCell.CELL_TYPE_NUMERIC: // 数字
						double d = cell.getNumericCellValue();
						if (HSSFDateUtil.isCellDateFormatted(cell)) {// 日期类型
						// Date date = cell.getDateCellValue();
							Date date = HSSFDateUtil.getJavaDate(d);
							cellValue = new SimpleDateFormat(
									"yyyy-MM-dd HH:mm:ss").format(date);
						} else {// 数值类型
							cellValue = cell.getNumericCellValue() + "";
						}
						cellValue = cell.getDateCellValue() + "";
						break;
					case HSSFCell.CELL_TYPE_STRING: // 字符串
						cellValue = cell.getStringCellValue();
						break;
					case HSSFCell.CELL_TYPE_BOOLEAN: // Boolean
						cellValue = cell.getBooleanCellValue() + "";
						break;
					case HSSFCell.CELL_TYPE_FORMULA: // 公式
						cellValue = cell.getCellFormula() + "";
						break;
					case HSSFCell.CELL_TYPE_BLANK: // 空值
						cellValue = "";
						break;
					case HSSFCell.CELL_TYPE_ERROR: // 故障
						cellValue = "非法字符";
						break;
					default:
						cellValue = "未知类型";
						break;
					}
				}
				System.out.print(cellValue + "\t");
				rowLst.add(cellValue);
			}
			System.out.println();
			dataLst.add(rowLst);
		}
		return dataLst;
	}

}

/**
 * 工具类:判断是否为Excel文件,并检查Excel版本
 * 
 * @author javaloveiphone
 * 
 */
class CEVUtil {
	/**
	 * 依据后缀名判断读取的是否为Excel文件
	 * 
	 * @param filePath
	 * @return
	 */
	public static boolean isExcel(String filePath) {
		if (filePath.matches("^.+\\.(?i)(xls)$")
				|| filePath.matches("^.+\\.(?i)(xlsx)$")) {
			return true;
		}
		return false;
	}

	/**
	 * 检查文件是否存在
	 */
	public static boolean fileExist(String filePath) {
		if (filePath == null || filePath.trim().equals(""))
			return false;
		File file = new File(filePath);
		if (file == null || !file.exists()) {
			return false;
		}
		return true;
	}

	/**
	 * 依据内容判断是否为excel2003及以下
	 */
	public static boolean isExcel2003(String filePath) {
		try {
			BufferedInputStream bis = new BufferedInputStream(
					new FileInputStream(filePath));
			if (POIFSFileSystem.hasPOIFSHeader(bis)) {
				System.out.println("Excel版本为excel2003及以下");
				return true;
			}
		} catch (IOException e) {
			e.printStackTrace();
			return false;
		}
		return false;
	}

	/**
	 * 依据内容判断是否为excel2007及以上
	 */
	public static boolean isExcel2007(String filePath) {
		try {
			BufferedInputStream bis = new BufferedInputStream(
					new FileInputStream(filePath));
			if (POIXMLDocument.hasOOXMLHeader(bis)) {
				System.out.println("Excel版本为excel2007及以上");
				return true;
			}
		} catch (IOException e) {
			e.printStackTrace();
			return false;
		}
		return false;
	}
}

 

分享到:
评论

相关推荐

    c#ExceL导入支持2003和2007两种导入

    总的来说,处理Excel导入涉及到文件格式识别、数据读取、异常处理和数据库交互等多个环节。通过选择合适的库和优化策略,可以高效地完成这项任务。在实际开发中,应根据项目需求和资源情况选择合适的方法。

    excel 2003导入升级到excel 2007

    标题“Excel 2003导入升级到Excel 2007”涉及到的是关于Microsoft Office Excel版本升级过程中的一些关键知识点。在从Excel 2003迁移到更高版本,如Excel 2007时,用户可能会遇到兼容性问题、功能差异以及数据格式的...

    用Jxls导入导出Excel2003和Excel2007数据3

    本人从网上搜集资料,加上自己研究探索,现在完成了用Jxls导入导出Excel2003和Excel2007数据,读取和写入xls和xlsx文件,现把结果告诉大家,希望大家不走弯路,直接掌握先进实用的技术,解决实际工作问题。...

    简单poi导入excel2003 与2007

    标题 "简单poi导入excel2003 与2007" 暗示了这个压缩包中的内容可能涉及使用Apache POI库来处理不同版本的Excel文件,主要是Excel 2003和2007。Apache POI是Java中广泛使用的库,用于读取和写入Microsoft Office格式...

    ASP.NET 导入、导出Excel (支持Office Excel 2003、 2007)

    综上所述,ASP.NET实现Excel导入导出涉及多种技术和策略,开发者可以根据项目需求选择合适的方法。无论是直接操作Excel对象,还是利用OpenXML或第三方库,都需要考虑兼容性、性能和安全性等因素。在实际开发过程中,...

    Excel 帮助类(兼容Excel 2003、Excel 2007、Excel 2010 导入导出)、Excel 导入导出

    1.CSV文件转换 CsvHelper CSV文件导入DataTable和DataTable导出到Csv文件等操作 2.导出Excel 操作类 DataToExcel 从“Excel导出数据的帮助类 ... 支持导入excel 2003、excel 2007、excel 2010 等各种版本

    c#导入EXCEL软件,包括excel2003,excel2007的导入导出

    总之,这个"WindowsTestExcel"项目很可能是演示了如何在C#中使用Excel Interop组件来实现对Excel2003和2007文件的导入导出功能。学习这个项目可以帮助开发者理解如何在实际项目中处理Excel数据,特别是在ASP.NET环境...

    用Jxls导入导出Excel2003和Excel2007数据2

    本人从网上搜集资料,加上自己研究探索,现在完成了用Jxls导入导出Excel2003和Excel2007数据,读取和写入xls和xlsx文件,现把结果告诉大家,希望大家不走弯路,直接掌握先进实用的技术,解决实际工作问题。...

    导入excel,office2007,2003,2010等各种版本

    "Excel 文件导入与操作" 通过 Apache POI 库,可以轻松地对 Excel 文件进行读取和操作。在本文中,我们将详细介绍如何使用 POI 库来导入 Excel 文件,并从中读取数据。 首先,让我们了解一下 POI 库的基本概念。...

    Excel2003至Excel2007交互式命令参考指南

    《Excel2003至Excel2007交互式命令参考指南》是为帮助用户熟练掌握Excel2003到Excel2007之间过渡时期的各种交互式操作而设计的一份详细参考资料。在这个阶段,微软的Excel办公软件经历了一系列的重要改进和功能升级...

    Thinkphp5整合excel导入导出

    Thinkphp5整合excel导入导出Thinkphp5整合excel导入导出Thinkphp5整合excel导入导出Thinkphp5整合excel导入导出Thinkphp5整合excel导入导出Thinkphp5整合excel导入导出Thinkphp5整合excel导入导出Thinkphp5整合excel...

    thinkhphp3.2 excel导入导出demo

    thinkhphp3.2 excel导入导出demothinkhphp3.2 excel导入导出demothinkhphp3.2 excel导入导出demothinkhphp3.2 excel导入导出demothinkhphp3.2 excel导入导出demothinkhphp3.2 excel导入导出demothinkhphp3.2 excel...

    导入Excel2003-2007兼容问题,4个包

    标题中的"导入Excel2003-2007兼容问题,4个包"指的就是这种兼容包,它们可以安装在Excel 2003上,使得用户能够打开、编辑和保存Excel 2007创建的.xlsx文件。 描述中提到的“这4个jar包完美解决兼容性问题”表明这些...

    POI导入excel大数据处理,支持excel2003,2007

    标题提到的“POI导入excel大数据处理”是指利用Apache POI进行大量Excel数据的导入操作,同时它兼容Excel 2003(.xls格式)和2007以上版本(.xlsx格式)的文件。 POI库的主要优点包括: 1. **多格式支持**:不仅...

    PB中导入EXCEL数据.doc

    PB 中导入 EXCEL 数据 在 PowerBuilder 中,开发者常常需要将 EXCEL 数据导入到应用程序中,以便进行数据分析、处理和展示。在本文中,我们将探讨如何使用 PowerBuilder 将 EXCEL 数据导入到应用程序中。 OLE 对象...

    DataSet_read_Excel导入2003,2007excel,xls,xlsx

    DataSet_read_Excel导入2003,2007excel,xls,xlsx DataSet 导入 2007excel xls xlsx

    VFP导入导出EXCEL2007、2010程序源码

    标题 "VFP导入导出EXCEL2007、2010程序源码" 描述的是一个使用Visual FoxPro(VFP)编程语言编写的程序,该程序能够实现与Microsoft Excel 2007及2010版本的数据交互。VFP作为一个古老的数据库管理系统,虽然现在...

    excel 2003 2007 导入导出

    在Excel 2003和2007中,导入和导出数据是日常工作中非常常见的操作,这对于数据处理、分析以及与其他软件间的数据交换至关重要。以下是对这一主题的详细阐述: 1. **导入数据**: - **文本文件导入**:Excel可以...

    C#将数据导入excel和Excel数据导入数据库

    EPPlus则是一个更现代的选择,它专门用于处理Excel 2007以上的Open XML格式,具有性能优势。而Microsoft.Office.Interop.Excel是微软提供的COM互操作组件,可以直接调用Office应用程序接口来操作Excel,但需要Excel...

Global site tag (gtag.js) - Google Analytics