Java操作POI进行Excel的导入导出(ExcelUtil)

 1. Maven 坐标:

<!-- POI -->
<dependency>
	<groupId>org.apache.poi</groupId>
	<artifactId>poi</artifactId>
	<version>3.17</version>
</dependency>
<dependency>
	<groupId>org.apache.poi</groupId>
	<artifactId>poi-ooxml</artifactId>
	<version>3.17</version>
</dependency>

2.代码:

package com.wwx.utils;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
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.ss.usermodel.Cell;
/**
 * 
 * @ClassName: ExcelUtils  
 * @Description: TODO(简单的Excel工具类)  
 * @author 所心  
 *
 */
public class ExcelUtils {

	private static HSSFWorkbook workbook = new HSSFWorkbook();// 创建一个HSSF对象
	/**
	 * 
	 * @Title: main  
	 * @Description: TODO(测试)  
	 * @param args  void  返回类型  
	 * @throws
	 */
	public static void main(String[] args) {
		
		/**
		 * 导出导入数据格式 map {body=[[1, 111, 111, 66], [2, 222, 222, 66], 
		 * [3, 333, 333, 66], [4, 444, 444, 66]], hand=[ID, 用户名, 密码, *]}
		 */
		
		
		String[] arr = { "ID", "用户名", "密码" ,"*"};
		String[] arr1 = { "1", "111", "111" ,"66"};
		String[] arr2 = { "2", "222", "222" ,"66"};
		String[] arr3 = { "3", "333", "333" ,"66"};
		String[] arr4 = { "4", "444", "444" ,"66"};
		
		Map<String, Object> map = new HashMap<String, Object>();

		List<Object> list = new ArrayList<Object>();

		list.add(Arrays.asList(arr1));
		list.add(Arrays.asList(arr2));
		list.add(Arrays.asList(arr3));
		list.add(Arrays.asList(arr4));

		map.put("hand", Arrays.asList(arr));
		map.put("body", list);

		try {
			//创建Excel模型
			ExcelUtils.createExcel(map);
			//生成Excel文件
			ExcelUtils.createXlsFile("666", "E://");
			
			File file = new File("E://666.xls");
			
			FileInputStream fm = new FileInputStream(file);
			//读取Excel文件
			Map<String, Object> readExceel = ExcelUtils.readExcel(fm);
			
			System.err.println(readExceel.toString());
			
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	/**
	 * 
	 * @Title: createExcel  
	 * @Description: TODO(创建Excel)  
	 * @param map 格式{body=[[1, 111, 111, 66], [2, 222, 222, 66]], hand=[ID, 用户名, 密码, *]}
	 * @return
	 * @throws Exception  boolean  返回类型  
	 * @throws
	 */
	public static boolean createExcel(Map<String, Object> map) throws Exception {
		// TODO Auto-generated method stub
		// 创建页
		HSSFSheet createSheet = workbook.createSheet();

		HSSFRow createRow = createSheet.createRow(0);

		HSSFCell createCell = null;

		List<Object> hand = ((List<Object>) map.get("hand"));

		for (int i = 0; i < hand.size(); i++) {
			Object object = hand.get(i);
			createCell = createRow.createCell(i);
			createCell.setCellValue(object.toString());
		}

		List<Object> body = ((List<Object>) map.get("body"));

		for (int i = 0; i < body.size(); i++) {
			List<Object> object = ((List<Object>) body.get(i));
			// 行
			HSSFRow createRow2 = createSheet.createRow(i + 1);

			for (int j = 0; j < object.size(); j++) {
				Object object2 = object.get(j);
				HSSFCell createCell2 = createRow2.createCell(j);
				createCell2.setCellValue(object2.toString());
			}
		}
		return true;
	}
	/**
	 * 
	 * @Title: readExcel  
	 * @Description: TODO(读Excel文件)  
	 * @param inputStream
	 * @return  Map<String,Object>  返回类型  
	 * @throws
	 */
	public static Map<String, Object> readExcel(FileInputStream inputStream) {
		// TODO Auto-generated method stub

		Map<String, Object> map = new HashMap<String, Object>();

		List<Object> hand = new ArrayList<Object>();

		List<Object> body = new ArrayList<Object>();

		if (inputStream == null) {
			return null;
		}
		try {
			// 创建HSSFWorkbook对象
			HSSFWorkbook workbook = new HSSFWorkbook(inputStream);
			// 获取第一页
			HSSFSheet sheetAt = workbook.getSheetAt(0);
			
			HSSFRow row = sheetAt.getRow(0);
			int Cellsnum = row.getPhysicalNumberOfCells();
			for (int i = 0; i < Cellsnum; i++) {
				HSSFCell cell = row.getCell(i);
				String cellValue = getCellValue(cell);
				hand.add(cellValue);
			}
			
			int Rownum = sheetAt.getPhysicalNumberOfRows();
			
			for (int i = 1; i < Rownum; i++) {
				
				ArrayList<Object> arrayList = new ArrayList<Object>();
				HSSFRow row2 = sheetAt.getRow(i);
				
				for (int j = 0; j < Cellsnum; j++) {
					HSSFCell cell = row2.getCell(j);
					String cellValue = getCellValue(cell);
					arrayList.add(cellValue);
				}
				body.add(arrayList);
			}
			map.put("hand", hand);
			map.put("body", body);
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return map;
	}
	/**
	 * 
	 * @Title: getCellValue  
	 * @Description: TODO(获取每列的值)  
	 * @param cell 
	 * @return  String  返回类型  
	 * @throws
	 */
	public static String getCellValue(Cell cell) {
		return cell.getStringCellValue();
	}
	
	/**
	 * 
	 * @Title: createXlsxFile  
	 * @Description: TODO(生成Xls文件)  
	 * @param fileName 文件名字
	 * @param filePath 文件路径
	 * @return  boolean  返回类型  
	 * @throws
	 */
	public static boolean createXlsFile(String fileName, String filePath) {
		// TODO Auto-generated method stub
		String path = filePath + "/" + fileName + ".xls";

		File file = new File(path);

		FileOutputStream fo = null;
		try {
			fo = new FileOutputStream(file);
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

		try {
			workbook.write(fo);
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} finally {
			try {
				fo.flush();
				fo.close();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			if (file.exists()) {
				return true;
			}
		}
		return false;
	}
	

	public static HSSFWorkbook getWorkbook() {
		return workbook;
	}

	public static void setWorkbook(HSSFWorkbook workbook) {
		ExcelUtils.workbook = workbook;
	}

}

猜你喜欢

转载自blog.csdn.net/G3187576034/article/details/102708447