精华内容
下载资源
问答
  • import java.io.File;import java.io.FileInputStream;import java.io.InputStream;import java.util.HashMap;import java.util.Map;import java.util.Map.Entry;import java.util....import org.apache.poi.ss....

    import java.io.File;

    import java.io.FileInputStream;

    import java.io.InputStream;

    import java.util.HashMap;

    import java.util.Map;

    import java.util.Map.Entry;

    import java.util.Random;

    import org.apache.poi.ss.util.CellRangeAddress;

    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;

    public class TestPOIP1Title {

    public static void main(String[] args) throws Exception {

    String pathname = "E:\\files\\title.xlsx";

    File file = new File(pathname);

    InputStream in = new FileInputStream(file);

    //得到整个excel对象

    XSSFWorkbook excel = new XSSFWorkbook(in);

    //获取整个excel有多少个sheet

    int sheets = excel.getNumberOfSheets();

    //便利第一个sheet

    Map colMap = new HashMap();

    for(int i = 0 ; i < sheets ; i++ ){

    XSSFSheet sheet = excel.getSheetAt(i);

    if(sheet == null){

    continue;

    }

    int mergedRegions = sheet.getNumMergedRegions();

    XSSFRow row2 = sheet.getRow(0);

    Map category = new HashMap();

    for(int j = 0 ; j < mergedRegions; j++ ){

    CellRangeAddress rangeAddress = sheet.getMergedRegion(j);

    int firstRow = rangeAddress.getFirstColumn();

    int lastRow = rangeAddress.getLastColumn();

    category.put(rangeAddress.getFirstColumn(), rangeAddress.getLastColumn()+"-"+row2.getCell(firstRow).toString());

    }

    //便利每一行

    for( int rowNum = 1 ; rowNum <= sheet.getLastRowNum() ; rowNum++ ){

    System.out.println();

    XSSFRow row = sheet.getRow(rowNum);

    if(row == null){

    continue;

    }

    short lastCellNum = row.getLastCellNum();

    String cate = "";

    Integer maxIndex = 0;

    for( int col = row.getFirstCellNum() ; col < lastCellNum ; col++ ){

    XSSFCell cell = row.getCell(col);

    if(cell == null ){

    continue;

    }

    if("".equals(cell.toString())){

    continue;

    }

    int columnIndex = cell.getColumnIndex();

    String string = category.get(columnIndex);

    if(string != null && !string.equals("")){

    String[] split = string.split("-");

    cate = split[1];

    maxIndex = Integer.parseInt(split[0]);

    System.out.println(cate+""+cell.toString());

    }else {

    //如果当前便利的列编号小于等于合并单元格的结束,说明分类还是上面的分类名称

    if(columnIndex<=maxIndex){

    System.out.println(cate+""+cell.toString());

    }else {

    System.out.println("分类未知"+""+cell.toString());

    }

    }

    }

    }

    }

    }

    }

    运行的结果如下:

    bec518c3721e3a333a1a107b376e84c3.png

    展开全文
  • Java POI读取Excel的时候怎么按列读取按列读取的方法:String pathname = "E:\\files\\title.xlsx";File file = new File(pathname);InputStream in = new FileInputStream(file);//得到整个excel对象XSSFWorkbook ...

    Java POI读取Excel的时候怎么按列读取

    按列读取的方法:

    String pathname = "E:\\files\\title.xlsx";

    File file = new File(pathname);

    InputStream in = new FileInputStream(file);

    //得到整个excel对象

    XSSFWorkbook excel = new XSSFWorkbook(in);

    //获取整个excel有多少个sheet

    int sheets = excel.getNumberOfSheets();

    //便利个sheet

    Map colMap = new HashMap();

    for(int i = 0 ; i < sheets ; i ){

    XSSFSheet sheet = excel.getSheetAt(i);

    if(sheet == null){

    continue;

    }

    int mergedRegions = sheet.getNumMergedRegions();

    XSSFRow row2 = sheet.getRow(0);

    Map category = new HashMap();

    for(int j = 0 ; j < mergedRegions; j ){

    CellRangeAddress rangeAddress = sheet.getMergedRegion(j);

    int firstRow = rangeAddress.getFirstColumn();

    int lastRow = rangeAddress.getLastColumn();

    category.put(rangeAddress.getFirstColumn(), rangeAddress.getLastColumn() "-" row2.getCell(firstRow).toString());

    }

    //便利每一行

    for( int rowNum = 1 ; rowNum <= sheet.getLastRowNum() ; rowNum ){

    System.out.println();

    XSSFRow row = sheet.getRow(rowNum);

    if(row == null){

    continue;

    }

    short lastCellNum = row.getLastCellNum();

    String cate = "";

    Integer maxIndex = 0;

    for( int col = row.getFirstCellNum() ; col < lastCellNum ; col ){

    XSSFCell cell = row.getCell(col);

    if(cell == null ){

    continue;

    }

    if("".equals(cell.toString())){

    continue;

    }

    int columnIndex = cell.getColumnIndex();

    String string = category.get(columnIndex);

    if(string != null

    展开全文
  • POI读取Excel,分行读取和读取

    千次阅读 2017-12-07 19:34:24
    * @描述:根据文件名读取excel文件,以讀取 * * * * @时间:2012-08-29 下午16:27:15 * * @参数:@param filePath 文件完整路径 * * @参数:@return * * @返回值:List */ public ...
    package com.wengegroup.utils;
    
    import java.io.File;
    
    import java.io.FileInputStream;
    
    import java.io.IOException;
    
    import java.io.InputStream;
    
    import java.util.ArrayList;
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;
    import java.util.Set;
    
    import org.apache.poi.hssf.usermodel.HSSFCell;
    import org.apache.poi.hssf.usermodel.HSSFWorkbook;
    
    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;
    
    /**
     * 
     * @描述:测试excel读取
     * 
     *               导入的jar包
     * 
     *               poi-3.8-beta3-20110606.jar
     * 
     *               poi-ooxml-3.8-beta3-20110606.jar
     * 
     *               poi-examples-3.8-beta3-20110606.jar
     * 
     *               poi-excelant-3.8-beta3-20110606.jar
     * 
     *               poi-ooxml-schemas-3.8-beta3-20110606.jar
     * 
     *               poi-scratchpad-3.8-beta3-20110606.jar
     * 
     *               xmlbeans-2.3.0.jar
     * 
     *               dom4j-1.6.1.jar
     * 
     *               jar包官网下载地址:http://poi.apache.org/download.html
     * 
     *               下载poi-bin-3.8-beta3-20110606.zipp
     * 
     *
     * 
     * @时间:2012-08-29 下午16:27:15
     */
    
    public class ExcelUtils
    {
    
    	/** 总行数 */
    
    	private int totalRows = 0;
    
    	/** 总列数 */
    
    	private int totalCells = 0;
    
    	/** 错误信息 */
    
    	private String errorInfo;
    
    	/** 构造方法 */
    
    	public ExcelUtils()
    	{
    
    	}
    
    	/**
    	 * 
    	 * @描述:得到总行数
    	 * 
    	 *
    	 * 
    	 * @时间:2012-08-29 下午16:27:15
    	 * 
    	 * @参数:@return
    	 * 
    	 * @返回值:int
    	 */
    
    	public int getTotalRows()
    	{
    
    		return totalRows;
    
    	}
    
    	/**
    	 * 
    	 * @描述:得到总列数
    	 * 
    	 *
    	 * 
    	 * @时间:2012-08-29 下午16:27:15
    	 * 
    	 * @参数:@return
    	 * 
    	 * @返回值:int
    	 */
    
    	public int getTotalCells()
    	{
    
    		return totalCells;
    
    	}
    
    	/**
    	 * 
    	 * @描述:得到错误信息
    	 * 
    	 *
    	 * 
    	 * @时间:2012-08-29 下午16:27:15
    	 * 
    	 * @参数:@return
    	 * 
    	 * @返回值:String
    	 */
    
    	public String getErrorInfo()
    	{
    
    		return errorInfo;
    
    	}
    
    	/**
    	 * 
    	 * @描述:验证excel文件
    	 * 
    	 *
    	 * 
    	 * @时间:2012-08-29 下午16:27:15
    	 * 
    	 * @参数:@param filePath 文件完整路径
    	 * 
    	 * @参数:@return
    	 * 
    	 * @返回值:boolean
    	 */
    
    	public boolean validateExcel(String filePath)
    	{
    
    		/** 检查文件名是否为空或者是否是Excel格式的文件 */
    
    		if (filePath == null || !(WDWUtil.isExcel2003(filePath) || WDWUtil.isExcel2007(filePath)))
    		{
    
    			errorInfo = "文件名不是excel格式";
    
    			return false;
    
    		}
    
    		/** 检查文件是否存在 */
    
    		File file = new File(filePath);
    
    		if (file == null || !file.exists())
    		{
    
    			errorInfo = "文件不存在";
    
    			return false;
    
    		}
    
    		return true;
    
    	}
    
    	/**
    	 * 
    	 * @描述:根据文件名读取excel文件
    	 * 
    	 *
    	 * 
    	 * @时间:2012-08-29 下午16:27:15
    	 * 
    	 * @参数:@param filePath 文件完整路径
    	 * 
    	 * @参数:@return
    	 * 
    	 * @返回值:List
    	 */
    
    	public List<List<String>> read(String filePath)
    	{
    
    		List<List<String>> dataLst = new ArrayList<List<String>>();
    
    		InputStream is = null;
    
    		try
    		{
    
    			/** 验证文件是否合法 */
    
    			if (!validateExcel(filePath))
    			{
    
    				System.out.println(errorInfo);
    
    				return null;
    
    			}
    
    			/** 判断文件的类型,是2003还是2007 */
    
    			boolean isExcel2003 = true;
    
    			if (WDWUtil.isExcel2007(filePath))
    			{
    
    				isExcel2003 = false;
    
    			}
    
    			/** 调用本类提供的根据流读取的方法 */
    
    			File file = new File(filePath);
    
    			is = new FileInputStream(file);
    
    			dataLst = read(is, isExcel2003);
    
    			is.close();
    
    		}
    		catch (Exception ex)
    		{
    
    			ex.printStackTrace();
    
    		}
    		finally
    		{
    
    			if (is != null)
    			{
    
    				try
    				{
    
    					is.close();
    
    				}
    				catch (IOException e)
    				{
    
    					is = null;
    
    					e.printStackTrace();
    
    				}
    
    			}
    
    		}
    
    		/** 返回最后读取的结果 */
    
    		return dataLst;
    
    	}
    	
    	/**
    	 * 
    	 * @描述:根据文件名读取excel文件,以列讀取
    	 * 
    	 *
    	 * 
    	 * @时间:2012-08-29 下午16:27:15
    	 * 
    	 * @参数:@param filePath 文件完整路径
    	 * 
    	 * @参数:@return
    	 * 
    	 * @返回值:List
    	 */
    
    	public Map<String,List<String>> readByColumn(String filePath)
    	{
    
    		Map<String,List<String>> dataLst = new HashMap<String,List<String>>();
    
    		InputStream is = null;
    
    		try
    		{
    
    			/** 验证文件是否合法 */
    
    			if (!validateExcel(filePath))
    			{
    
    				System.out.println(errorInfo);
    
    				return null;
    
    			}
    
    			/** 判断文件的类型,是2003还是2007 */
    
    			boolean isExcel2003 = true;
    
    			if (WDWUtil.isExcel2007(filePath))
    			{
    
    				isExcel2003 = false;
    
    			}
    
    			/** 调用本类提供的根据流读取的方法 */
    
    			File file = new File(filePath);
    
    			is = new FileInputStream(file);
    
    			dataLst = readByColumn(is, isExcel2003);
    
    			is.close();
    
    		}
    		catch (Exception ex)
    		{
    
    			ex.printStackTrace();
    
    		}
    		finally
    		{
    
    			if (is != null)
    			{
    
    				try
    				{
    
    					is.close();
    
    				}
    				catch (IOException e)
    				{
    
    					is = null;
    
    					e.printStackTrace();
    
    				}
    
    			}
    
    		}
    
    		/** 返回最后读取的结果 */
    
    		return dataLst;
    
    	}
    
    	/**
    	 * 
    	 * @描述:根据流读取Excel文件
    	 * 
    	 *
    	 * 
    	 * @时间:2012-08-29 下午16:40:15
    	 * 
    	 * @参数:@param inputStream
    	 * 
    	 * @参数:@param isExcel2003
    	 * 
    	 * @参数:@return
    	 * 
    	 * @返回值:List
    	 */
    
    	public List<List<String>> read(InputStream inputStream, boolean isExcel2003)
    	{
    
    		List<List<String>> dataLst = null;
    
    		try
    		{
    
    			/** 根据版本选择创建Workbook的方式 */
    
    			Workbook wb = null;
    
    			if (isExcel2003)
    			{
    				wb = new HSSFWorkbook(inputStream);
    			}
    			else
    			{
    				wb = new XSSFWorkbook(inputStream);
    			}
    			dataLst = read(wb);
    
    		}
    		catch (IOException e)
    		{
    
    			e.printStackTrace();
    
    		}
    
    		return dataLst;
    
    	}
    	
    	/**
    	 * 
    	 * @描述:根据流读取Excel文件,以列讀取
    	 * 
    	 *
    	 * 
    	 * @时间:2012-08-29 下午16:40:15
    	 * 
    	 * @参数:@param inputStream
    	 * 
    	 * @参数:@param isExcel2003
    	 * 
    	 * @参数:@return
    	 * 
    	 * @返回值:List
    	 */
    
    	public Map<String,List<String>> readByColumn(InputStream inputStream, boolean isExcel2003)
    	{
    
    		Map<String,List<String>> dataLst = null;
    
    		try
    		{
    
    			/** 根据版本选择创建Workbook的方式 */
    
    			Workbook wb = null;
    
    			if (isExcel2003)
    			{
    				wb = new HSSFWorkbook(inputStream);
    			}
    			else
    			{
    				wb = new XSSFWorkbook(inputStream);
    			}
    			dataLst = readByColumn(wb);
    
    		}
    		catch (IOException e)
    		{
    
    			e.printStackTrace();
    
    		}
    
    		return dataLst;
    
    	}
    
    	/**
    	 * 
    	 * @描述:读取数据,以行读取
    	 * 
    	 *
    	 * 
    	 * @时间:2012-08-29 下午16:50:15
    	 * 
    	 * @参数:@param Workbook
    	 * 
    	 * @参数:@return
    	 * 
    	 * @返回值:List<List<String>>
    	 */
    
    	private List<List<String>> read(Workbook wb)
    	{
    
    		List<List<String>> dataLst = new ArrayList<List<String>>();
    
    		/** 得到第一个shell */
    
    		Sheet sheet = wb.getSheetAt(0);
    
    		/** 得到Excel的行数 */
    
    		this.totalRows = sheet.getPhysicalNumberOfRows();
    
    		/** 得到Excel的列数 */
    
    		if (this.totalRows >= 1 && sheet.getRow(0) != null)
    		{
    
    			this.totalCells = sheet.getRow(0).getPhysicalNumberOfCells();
    
    		}
    
    		/** 循环Excel的行 */
    
    		for (int r = 0; r < this.totalRows; r++)
    		{
    
    			Row row = sheet.getRow(r);
    
    			if (row == null)
    			{
    
    				continue;
    
    			}
    
    			List<String> rowLst = new ArrayList<String>();
    
    			/** 循环Excel的列 */
    
    			for (int c = 0; c < this.getTotalCells(); c++)
    			{
    
    				Cell cell = row.getCell(c);
    
    				String cellValue = "";
    
    				if (null != cell)
    				{
    					// 以下是判断数据的类型
    					switch (cell.getCellType())
    					{
    					case HSSFCell.CELL_TYPE_NUMERIC: // 数字
    						cellValue = cell.getNumericCellValue() + "";
    						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;
    					}
    				}
    
    				rowLst.add(cellValue);
    
    			}
    
    			/** 保存第r行的第c列 */
    
    			dataLst.add(rowLst);
    
    		}
    
    		return dataLst;
    
    	}
    
    	/**
    	 * 
    	 * @描述:读取数据,以列读取
    	 * 
    	 *
    	 * 
    	 * @时间:2012-08-29 下午16:50:15
    	 * 
    	 * @参数:@param Workbook
    	 * 
    	 * @参数:@return
    	 * 
    	 * @返回值:List<List<String>>
    	 */
    
    	private Map<String,List<String>> readByColumn(Workbook wb)
    	{
    		
    		Map<String,List<String>> dataMap = new HashMap<String,List<String>>();
    
    		/** 得到第一个shell */
    
    		Sheet sheet = wb.getSheetAt(0);
    
    		/** 得到Excel的行数 */
    
    		this.totalRows = sheet.getPhysicalNumberOfRows();
    
    		/** 得到Excel的列数 */
    
    		if (this.totalRows >= 1 && sheet.getRow(0) != null)
    		{
    
    			this.totalCells = sheet.getRow(0).getPhysicalNumberOfCells();
    
    		}
    		
    		for(int lie=1;lie<=totalCells;lie++){
    			List<String> list = new ArrayList<String>();
    			dataMap.put("第"+lie+"列", list);
    		}
    
    		/** 循环Excel的行 */
    
    		for (int r = 0; r < this.totalRows; r++)
    		{
    
    			Row row = sheet.getRow(r);
    
    			if (row == null)
    			{
    
    				continue;
    
    			}
    
    			List<String> rowLst = new ArrayList<String>();
    
    			/** 循环Excel的列 */
    
    			for (int c = 0; c < this.getTotalCells(); c++)
    			{
    
    				Cell cell = row.getCell(c);
    				String cellValue = "";
    
    				if (null != cell)
    				{
    					// 以下是判断数据的类型
    					switch (cell.getCellType())
    					{
    					case HSSFCell.CELL_TYPE_NUMERIC: // 数字
    						cellValue = cell.getNumericCellValue() + "";
    						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;
    					}
    				}
    				
    				dataMap.get("第"+(c+1)+"列").add(cellValue);
    //				rowLst.add(cellValue);
    
    			}
    
    		}
    
    		return dataMap;
    
    	}
    	/**
    	 * 
    	 * @描述:main测试方法
    	 * 
    	 *
    	 * 
    	 * @时间:2012-08-29 下午17:12:15
    	 * 
    	 * @参数:@param args
    	 * 
    	 * @参数:@throws Exception
    	 * 
    	 * @返回值:void
    	 */
    
    	public static void main(String[] args) throws Exception
    	{
    
    		ExcelUtils poi = new ExcelUtils();
    		Map<String,List<String>> map = poi.readByColumn("C:\\Users\\Administrator\\Desktop\\test.xls");
    		Set<Map.Entry<String,List<String>>> entys = map.entrySet();
    		for(Map.Entry<String,List<String>> li : entys){
    			System.out.println(li);
    		}
    
    		/*List<List<String>> list = poi.read("C:\\Users\\Administrator\\Desktop\\test.xls");
    
    		if (list != null)
    		{
    
    			for (int i = 0; i < list.size(); i++)
    			{
    
    				System.out.print("第" + (i) + "行");
    
    				List<String> cellList = list.get(i);
    
    				for (int j = 0; j < cellList.size(); j++)
    				{
    
    					// System.out.print("    第" + (j + 1) + "列值:");
    
    					System.out.print("    " + cellList.get(j));
    
    				}
    				System.out.println();
    
    			}
    
    		}*/
    
    	}
    
    }
    
    /**
     * 
     * @描述:工具类
     * 
     *
     * 
     * @时间:2012-08-29 下午16:30:40
     */
    
    class WDWUtil
    {
    
    	/**
    	 * 
    	 * @描述:是否是2003的excel,返回true是2003
    	 * 
    	 *
    	 * 
    	 * @时间:2012-08-29 下午16:29:11
    	 * 
    	 * @参数:@param filePath 文件完整路径
    	 * 
    	 * @参数:@return
    	 * 
    	 * @返回值:boolean
    	 */
    
    	public static boolean isExcel2003(String filePath)
    	{
    
    		return filePath.matches("^.+\\.(?i)(xls)$");
    
    	}
    
    	/**
    	 * 
    	 * @描述:是否是2007的excel,返回true是2007
    	 * 
    	 *
    	 * 
    	 * @时间:2012-08-29 下午16:28:20
    	 * 
    	 * @参数:@param filePath 文件完整路径
    	 * 
    	 * @参数:@return
    	 * 
    	 * @返回值:boolean
    	 */
    
    	public static boolean isExcel2007(String filePath)
    	{
    
    		return filePath.matches("^.+\\.(?i)(xlsx)$");
    
    	}
    
    }
    

    展开全文
  • Java利用POI读取Excel

    2021-01-17 17:37:01
    20 21 /** 22 * excel文件读取工具类,支持xls,xlsx两种格式23 *@authorAndrew24 *25 */ 26 public classExcelUtil {27 28 /** 29 * excel文件读取指定的数据30 *@authorAndrew31 *@paramexcelPath 文件名32 *@...

    1 packagecom.CommonUtil;2

    3 importjava.io.File;4 importjava.io.FileInputStream;5 importjava.io.IOException;6 importjava.io.InputStream;7 importjava.text.SimpleDateFormat;8 importjava.util.ArrayList;9

    10 importorg.apache.poi.hssf.usermodel.HSSFFormulaEvaluator;11 importorg.apache.poi.hssf.usermodel.HSSFWorkbook;12 importorg.apache.poi.ss.usermodel.Cell;13 importorg.apache.poi.ss.usermodel.DateUtil;14 importorg.apache.poi.ss.usermodel.FormulaEvaluator;15 importorg.apache.poi.ss.usermodel.Row;16 importorg.apache.poi.ss.usermodel.Sheet;17 importorg.apache.poi.ss.usermodel.Workbook;18 importorg.apache.poi.xssf.usermodel.XSSFFormulaEvaluator;19 importorg.apache.poi.xssf.usermodel.XSSFWorkbook;20

    21 /**

    22 * excel文件读取工具类,支持xls,xlsx两种格式23 *@authorAndrew24 *25 */

    26 public classExcelUtil {27

    28 /**

    29 * excel文件读取指定列的数据30 *@authorAndrew31 *@paramexcelPath 文件名32 *@paramargs 需要查询的列号33 *@returnArrayList> 二维字符串数组34 *@throwsIOException35 */

    36 @SuppressWarnings({ "unused"})37 public ArrayList> excelReader(String excelPath,int ... args) throwsIOException {38 //创建excel工作簿对象

    39 Workbook workbook = null;40 FormulaEvaluator formulaEvaluator = null;41 //读取目标文件

    42 File excelFile = newFile(excelPath);43 InputStream is = newFileInputStream(excelFile);44 //判断文件是xlsx还是xls

    45 if (excelFile.getName().endsWith("xlsx")) {46 workbook = newXSSFWorkbook(is);47 formulaEvaluator = newXSSFFormulaEvaluator((XSSFWorkbook) workbook);48 }else{49 workbook = newHSSFWorkbook(is);50 formulaEvaluator = newHSSFFormulaEvaluator((HSSFWorkbook) workbook);51 }52

    53 //判断excel文件打开是否正确

    54 if(workbook == null){55 System.err.println("未读取到内容,请检查路径!");56 return null;57 }58 //创建二维数组,储存excel行列数据

    59 ArrayList> als = new ArrayList>();60 //遍历工作簿中的sheet

    61 for (int numSheet = 0; numSheet < workbook.getNumberOfSheets(); numSheet++) {62 Sheet sheet =workbook.getSheetAt(numSheet);63 //当前sheet页面为空,继续遍历

    64 if (sheet == null) {65 continue;66 }67 //对于每个sheet,读取其中的每一行

    68 for (int rowNum = 0; rowNum <= sheet.getLastRowNum(); rowNum++) {69 Row row =sheet.getRow(rowNum);70 if (row == null) {71 continue;72 }73 ArrayList al = new ArrayList();74 //遍历每一行的每一列

    75 for(int columnNum = 0 ; columnNum < args.length ; columnNum++){76 Cell cell =row.getCell(args[columnNum]);77 al.add(getValue(cell, formulaEvaluator));78 }79 als.add(al);80 }81 }82 is.close();83 returnals;84 }85

    86 /**

    87 * excel文件读取全部信息88 *@authorAndrew89 *@paramexcelPath 文件名90 *@returnArrayList> 二维字符串数组91 *@throwsIOException92 */

    93 @SuppressWarnings({ "unused"})94 public ArrayList> excelReader(String excelPath) throwsIOException {95 //创建excel工作簿对象

    96 Workbook workbook = null;97 FormulaEvaluator formulaEvaluator = null;98 //读取目标文件

    99 File excelFile = newFile(excelPath);100 InputStream is = newFileInputStream(excelFile);101 //判断文件是xlsx还是xls

    102 if (excelFile.getName().endsWith("xlsx")) {103 workbook = newXSSFWorkbook(is);104 formulaEvaluator = newXSSFFormulaEvaluator((XSSFWorkbook) workbook);105 }else{106 workbook = newHSSFWorkbook(is);107 formulaEvaluator = newHSSFFormulaEvaluator((HSSFWorkbook) workbook);108 }109

    110 //判断excel文件打开是否正确

    111 if(workbook == null){112 System.err.println("未读取到内容,请检查路径!");113 return null;114 }115 //创建二维数组,储存excel行列数据

    116 ArrayList> als = new ArrayList>();117 //遍历工作簿中的sheet

    118 for (int numSheet = 0; numSheet < workbook.getNumberOfSheets(); numSheet++) {119 Sheet sheet =workbook.getSheetAt(numSheet);120 //当前sheet页面为空,继续遍历

    121 if (sheet == null) {122 continue;123 }124 //对于每个sheet,读取其中的每一行

    125 for (int rowNum = 0; rowNum <= sheet.getLastRowNum(); rowNum++) {126 Row row =sheet.getRow(rowNum);127 if (row == null) {128 continue;129 }130 //遍历每一行的每一列

    131 ArrayList al = new ArrayList();132 for(int columnNum = 0 ; columnNum < row.getLastCellNum(); columnNum++){133 Cell cell =row.getCell(columnNum);134 al.add(getValue(cell, formulaEvaluator));135 }136 als.add(al);137 }138 }139 is.close();140 returnals;141 }142

    143 /**

    144 * excel文件的数据读取,包括后缀为xls,xlsx145 *@paramxssfRow146 *@return

    147 */

    148 @SuppressWarnings("deprecation")149 private staticString getValue(Cell cell, FormulaEvaluator formulaEvaluator) {150 if(cell==null){151 return null;152 }153 switch(cell.getCellType()) {154 caseCell.CELL_TYPE_STRING:155 returncell.getRichStringCellValue().getString();156 caseCell.CELL_TYPE_NUMERIC:157 //判断是日期时间类型还是数值类型

    158 if(DateUtil.isCellDateFormatted(cell)) {159 short format =cell.getCellStyle().getDataFormat();160 SimpleDateFormat sdf = null;161 /*所有日期格式都可以通过getDataFormat()值来判断162 * yyyy-MM-dd----- 14163 * yyyy年m月d日----- 31164 * yyyy年m月--------57165 * m月d日 --------- 58166 * HH:mm---------- 20167 * h时mm分 --------- 32168 */

    169 if(format == 14 || format == 31 || format == 57 || format == 58){170 //日期

    171 sdf = new SimpleDateFormat("yyyy-MM-dd");172 }else if (format == 20 || format == 32) {173 //时间

    174 sdf = new SimpleDateFormat("HH:mm");175 }176 returnsdf.format(cell.getDateCellValue());177 } else{178 //对整数进行判断处理

    179 double cur =cell.getNumericCellValue();180 long longVal =Math.round(cur);181 Object inputValue = null;182 if(Double.parseDouble(longVal + ".0") ==cur) {183 inputValue =longVal;184 }185 else{186 inputValue =cur;187 }188 returnString.valueOf(inputValue);189 }190 caseCell.CELL_TYPE_BOOLEAN:191 returnString.valueOf(cell.getBooleanCellValue());192 caseCell.CELL_TYPE_FORMULA:193 //对公式进行处理,返回公式计算后的值,使用cell.getCellFormula()只会返回公式

    194 returnString.valueOf(formulaEvaluator.evaluate(cell).getNumberValue());195 //Cell.CELL_TYPE_BLANK || Cell.CELL_TYPE_ERROR

    196 default:197 return null;198 }199 }200 }

    展开全文
  • poi事件模式读取excel

    2021-10-09 11:13:11
    引入jar包 </dependencies> <...org.apache.poi</groupId> <artifactId>poi-ooxml</artifactId> <version>3.15</version> </dependency> .
  • java读取Excel文件,笔者认为:从结构上来看,Excel文件是由一个一个的单元格组成的,有点像细胞cell,逐行的排列。那么我们读的时候也应该逐行逐行的读,从左到右的寻找每一个cell。直播电商开发找捌跃科技一、实例...
  • (各自根据具体的poi版本进行相应的替换即可)package com.br.loan.strategy.common.utils;...import org.apache.poi.hssf.usermodel.HSSFCell;import org.apache.poi.hssf.usermodel.HSSFWorkbook;import...
  • Poi创建excel文件所需jar:poi-3.11-20141221.jar commons-io-2.2.jarpublic class PoiExpExcel {/*** POI生成Excel文件*/public static void main(String[] args) {String[] title = {"id","name","sex"};...
  • POI读取EXCEL文件

    2021-01-09 15:12:20
    poi.version>3.17</poi.version> <poi-ooxml.version>3.17</poi-ooxml.version> <poi-ooxml-schemas.version>3.17</poi-ooxml-schemas.version> <xmlbeans.version>
  • package edu.sjtu.erplab.poi;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.IOException;import java.io.InputStream;import java.text.SimpleDateFormat;import java.util...
  • POIExcel读取操作

    2021-04-02 13:49:52
    //前端excel只需要直接提交form表单即可 public AjaxResult excelAdd(@RequestPart("file") MultipartFile file) throws Exception { if (file.isEmpty()) { return AjaxResult.error("没有发现文件"); } if ...
  • 原文:http://doc.okbase.net/0201zcr/archive/161440.html一、定义Apache POI是Apache软件基金会的...二、所需jar包:三、简单的一个读取excel的demo1、读取文件方法/*** 读取出filePath中的所有数据信息* @param f...
  • 摘要:利用java读取excel文件,读取文件并获取文件中每一个sheet中的值。一、需要提前导入的包:import java.io.File;import java.io.FileInputStream;import org.apache.poi.hssf.usermodel.HSSFRow;import org....
  • //读取excel模板 try{ HSSFSheet sheet = workbook.getSheetAt(0);//读取第一个工作簿 HSSFRow row; HSSFCell cell =null; intrownum =3;//添加的起始行 HSSFCellStyle style =this.getStyle(workbook); ...
  • java利用poi读取excel

    2021-02-12 13:20:50
    java读取excel:package com.shobos.excel;import java.io.FileInputStream;import java.io.IOException;import org.apache.poi.hssf.usermodel.HSSFCell;import org.apache.poi.hssf.usermodel.HSSFRow;import org....
  • 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 java....
  • 读一个excel表,表中有两纵(两个竖行)一纵为key一纵为value因为我要用这个map向另一个excel中写这些value但是要通过key获取含有key的话才写入,怎么才能把这表里全部数据(后期维护可能会...读一个excel表 ,表中有两纵 ...
  • package per.qy.dexter.fileoperate; import java.io.File; import java.io.FileInputStream;... } // 都文本格式读取 cell.setCellType(CellType.STRING); return cell.getStringCellValue(); } }
  • 您必须包括poi jar文件.它的版本将是4.1.0.如果使用的是Maven pom.xml,请包括以下依赖项.org.apache.poipoi-ooxml...要使用Apache POI读取excel文件,如果不想使用Maven,则需要以下jar文件.> poi-ooxml-4.1.0.j...
  • packageshindo.Java;importjava.io.FileInputStream;importjava.io.InputStream;importjava.util.ArrayList;importjava.util.List;importorg.apache.poi.hssf.usermodel....importorg.apache.poi.hssf.usermod...
  • 通过POI组件读取Excel大文件

    万次阅读 2018-07-07 23:18:05
    在Java中读取Excel可以通过POI组件。POI提供了跨平台的能力,在linux环境下可以对excel文件做操作;如果是采用COM接口则必须要在window下,而且需要安装office软件。 POI提供UserModel和事件驱动两种方式读写excel...
  • 做项目时经常有通过程序读取Excel数据,或是创建新的Excel并写入数据的需求;网上很多经验教程里使用的POI版本都比较老了,一些API在新版里已经废弃,这里基于最新的Apache POI 4.0.1版本来总结一下整个读取和写入...
  • 如题,前几天在使用poi读取excel表时,有效数据行数只有几百行,但表格行数有几千行,结果调用sheet.getLastNum时空行也算在内了!本来解析读取就慢,现在更是浪费时间。查了一下终于看到一位老哥多年前的好文,空行...
  • //遍历//防止当使用POI处理excel的时候cell.getNumbericCellValue()//当长度大一点的时候会变成科学计数法形式。 DecimalFormat df = new DecimalFormat("0");//***下方3为cells的值,更换为固定数,解决空值...
  • 大家好今儿给大家带来的是使用poi读取Excel中的数据到数据库 目录大家好今儿给大家带来的是使用poi读取Excel中的数据到数据库1.poi简单介绍 1.poi简单介绍
  • 我们在使用Excel制作表格的时候,有时会使用“Poi读取excel插图”,但是很多初学者都不懂也不会制作。下面,我就给大家讲一下“Poi读取excel插图”的相关方法和操作步骤。首先我们要知道,POI是Java程序中的一个组件...
  • 292) at org.apache.poi.util.PackageHelper.open(PackageHelper.java:37) at org.apache.poi.xssf.usermodel.XSSFWorkbook.(XSSFWorkbook.java:275) at com.fengqing.util.ExcelUtils.xlsxRead(ExcelUtils.java:33)...
  • POI 与 EasyExcel读取Excel

    2021-03-27 08:44:42
    POI apache公司提供的操作excel工具类,Excel共分类两种,一种是03版本就是一个sheet只能插入65536条数据,以xls结尾,而07版本无限制,以xlsx结尾。所以对于两种表格就有不同的操作类。 Workbook对于不同的表格...
  • //格式转换//value:原数据,parmtype:方法参数类型,cellType 单元格类型public static Object formatd(String value, String parmtype, int cellType) throws ParseException{Object obj = new Object();...
  • 使用poi读取excel文件

    万次阅读 2019-05-22 14:45:29
    注:读取的文件格式是xls,如果xlsx格式文件,可以自己通过excel文件右键→另存为,转换一下格式 导包 <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId&...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 23,282
精华内容 9,312
关键字:

poi按列读取excel