【Java学习20170413】Excel文件读写

Excel文件读取与写入

运用POI方式实现

package com.share.read;

import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;

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 ReadExcelXlsx {
	public List<List<String>> readxl(String path) throws IOException {
		InputStream is = new FileInputStream(path);
		XSSFWorkbook xssfWorkbook = new XSSFWorkbook(is);
		List<List<String>> result = new ArrayList<List<String>>();
		/*
		 * //Sheet xssfSheet = null; //循环每一页,并处理当前循环页
		 */
		for (XSSFSheet xssfSheet : xssfWorkbook) {// 遍历得到当前表格页
			if (xssfSheet == null)
				continue;
			// 处理当前页,循环读取每一行
			for (int rowNum = 0; rowNum <= xssfSheet.getLastRowNum(); rowNum++) {
				XSSFRow xssfRow = xssfSheet.getRow(rowNum);// 获取每一行的信息
				int minColIx = xssfRow.getFirstCellNum();
				int maxColIx = xssfRow.getLastCellNum();
				List<String> rowList = new ArrayList<String>();//存储当前行的数据
				// 遍历该行,获取处理每个cell元素
				for (int colIx = minColIx; colIx < maxColIx; colIx++) {
					XSSFCell cell = xssfRow.getCell(colIx);
					if (cell == null) {
						continue;
					}
					if (rowNum == 0 || colIx == 1) {//第一行or第二列
						rowList.add(cell.toString());
						continue;
					}
					rowList.add(cell.getRawValue());
				}
				result.add(rowList);
			}
			System.out.println("结束");
			is.close();
			return result;
		}
		is.close();
		return result;
	}

	public String[][] readxlToArray(String path) throws IOException {
		InputStream is = new FileInputStream(path);
		XSSFWorkbook xssfWorkbook = new XSSFWorkbook(is);
		/*
		 * //Sheet xssfSheet = null; //循环每一页,并处理当前循环页
		 */
		for (XSSFSheet xssfSheet : xssfWorkbook) {// 遍历得到当前表格页
			if (xssfSheet == null)
				continue;
			String[][] value = new String[xssfSheet.getLastRowNum() + 1][];
			// 处理当前页,循环读取每一行
			for (int rowNum = 0; rowNum <= xssfSheet.getLastRowNum(); rowNum++) {
				XSSFRow xssfRow = xssfSheet.getRow(rowNum);// 获取每一行的信息
				int minColIx = xssfRow.getFirstCellNum();
				int maxColIx = xssfRow.getLastCellNum();
				value[rowNum] = new String[maxColIx];
				// 遍历该行,获取处理每个cell元素
				for (int colIx = minColIx; colIx < maxColIx; colIx++) {

					XSSFCell cell = xssfRow.getCell(colIx);
					if (cell == null) {
						continue;
					}
					if (rowNum == 0 || colIx == 1) {
						value[rowNum][colIx] = cell.toString().trim();
						continue;
					}
					value[rowNum][colIx] = cell.getRawValue();
				}
			}
			System.out.println("结束");
			is.close();
			return value;
		}
		is.close();
		return null;
	}
}

package com.share.read;

import java.io.IOException;
import java.util.List;

public class Main {
	public static void main(String[] args) {
		showExcel();
	}

	public static void showExcel() {
		ReadExcelXlsx rex = new ReadExcelXlsx();
		try {
			String[][] value = rex.readxlToArray("C:\\Users\\Administrator\\Desktop\\java阶段性考试成绩.xlsx");
			for (int i = 0; i < value.length; i++) {
				for (int j = 0; j < value[i].length; j++) {
					if (i == 0)
						System.out.print(value[i][j] + "                      ");
					else
						System.out.print(value[i][j] + "\t");
				}
				System.out.println();
			}
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

	public static void showExcel2() {
		ReadExcelXlsx rex = new ReadExcelXlsx();
		try {
			List<List<String>> list = rex.readxl("C:\\Users\\Administrator\\Desktop\\java阶段性考试成绩.xlsx");
			for (int i = 0; i < list.size(); i++) {
				List<String> list1 = list.get(i);
				for (int j = 0; j < list1.size(); j++) {
					String value = list1.get(j);
					System.out.print(value + "\t");
				}
				System.out.println();
			}
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
}

方案二

package com.share.test_4_12_excel;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
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 org.apache.poi.hssf.usermodel.HSSFCellStyle;
import org.apache.poi.hssf.usermodel.HSSFFont;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.xssf.usermodel.XSSFCell;
import org.apache.poi.xssf.usermodel.XSSFCellStyle;
import org.apache.poi.xssf.usermodel.XSSFFont;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

public class Excel {
	public static void main(String[] args) {
		// 读
		Map<Integer, List<String[]>> map = readExcel("C:\\Users\\Administrator\\Desktop\\java阶段性考试成绩.xlsx");
		for (int n = 0; n < map.size(); n++) {
			List<String[]> list = map.get(n);
			System.out.println("-------------------------sheet" + n + "--------------------------------");
			for (int i = 0; i < list.size(); i++) {
				String[] arr = (String[]) list.get(i);
				for (int j = 0; j < arr.length; j++) {
					if (j == arr.length - 1)
						System.out.print(arr[j]);
					else
						System.out.print(arr[j] + "|");
				}
				System.out.println();
			}
		}
		// 写
		writeExcel("C:\\Users\\Administrator\\Desktop\\java阶段性考试成绩-1.xlsx", map);
	}

	/**
	 * 读数据
	 */
	public static Map<Integer, List<String[]>> readExcel(String fileName) {
		Map<Integer, List<String[]>> map = new HashMap<Integer, List<String[]>>();
		try {
			InputStream is = new FileInputStream(fileName);
			XSSFWorkbook workbook = new XSSFWorkbook(is);
			is.close();
			// 获取excel中的一个表格
			XSSFSheet sheet = workbook.getSheetAt(0);
			List<String[]> list = new ArrayList<String[]>();
			// 从第二行开始读
			for (int rowIndex = 1; rowIndex <= sheet.getLastRowNum(); rowIndex++) {
				XSSFRow row = sheet.getRow(rowIndex);
				if (row == null) {
					continue;
				}
				// String数组储存每一个单元格数据
				String[] singleRow = new String[row.getLastCellNum()];
				XSSFCell idCell = row.getCell(0);// 排名列
				singleRow[0] = String.valueOf(idCell.getNumericCellValue());
				XSSFCell nameCell = row.getCell(1);// 姓名列
				singleRow[1] = nameCell.getStringCellValue();
				XSSFCell xuanzeCell = row.getCell(2);// 选择列
				singleRow[2] = String.valueOf(xuanzeCell.getNumericCellValue());
				XSSFCell panduanCell = row.getCell(3);// 判断列
				singleRow[3] = String.valueOf(panduanCell.getNumericCellValue());
				XSSFCell tiankongCell = row.getCell(4);// 填空列
				singleRow[4] = String.valueOf(tiankongCell.getNumericCellValue());
				XSSFCell yueduCell = row.getCell(5);// 阅读列
				singleRow[5] = String.valueOf(yueduCell.getNumericCellValue());
				XSSFCell juanmianfenCell = row.getCell(6);// 卷面总分列
				singleRow[6] = String.valueOf(juanmianfenCell.getNumericCellValue());
				XSSFCell shangjifenCell = row.getCell(7);// 上机总分列
				singleRow[7] = String.valueOf(shangjifenCell.getNumericCellValue());
				XSSFCell zongfenCell = row.getCell(8);// 总分列
				singleRow[8] = String.valueOf(zongfenCell.getNumericCellValue());
				list.add(singleRow);
				workbook.close();
			}
			map.put(0, list);
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return map;
	}

	/**
	 * 写入excel
	 */
	public static void writeExcel(String fileName, Map<Integer, List<String[]>> map) {
		try {
			XSSFWorkbook wb = new XSSFWorkbook();
			// 创建一个表单
			XSSFSheet sheet = wb.createSheet("0");
			// 改格式
			// 设置行高
			sheet.setDefaultRowHeightInPoints(16);
			XSSFCellStyle style = wb.createCellStyle();
			style.setVerticalAlignment(XSSFCellStyle.VERTICAL_CENTER);// 垂直
			style.setAlignment(XSSFCellStyle.ALIGN_CENTER);// 水平
			// 设置边框
			style.setBorderBottom(XSSFCellStyle.BORDER_THIN); // 下边框
			style.setBorderLeft(XSSFCellStyle.BORDER_THIN);// 左边框
			style.setBorderTop(XSSFCellStyle.BORDER_THIN);// 上边框
			style.setBorderRight(XSSFCellStyle.BORDER_THIN);// 右边框
			// 设置列宽
			sheet.setColumnWidth(0, 1500);
			sheet.setColumnWidth(1, 2300);
			sheet.setColumnWidth(2, 3900);
			sheet.setColumnWidth(3, 3900);
			sheet.setColumnWidth(4, 3900);
			sheet.setColumnWidth(5, 3900);
			sheet.setColumnWidth(6, 3900);
			sheet.setColumnWidth(7, 3900);
			sheet.setColumnWidth(8, 3900);
			//
			XSSFFont curFont = wb.createFont();
			curFont.setFontName("微软雅黑");
			style.setFont(curFont);

			List<String[]> list = map.get(0);
			XSSFRow row = sheet.createRow(0);
			XSSFCell idCell = row.createCell(0);// 排名列
			idCell.setCellStyle(style);
			idCell.setCellValue("排名");
			XSSFCell nameCell = row.createCell(1);// 姓名列
			nameCell.setCellValue("姓名");
			nameCell.setCellStyle(style);
			XSSFCell xuanzeCell = row.createCell(2);// 选择列
			xuanzeCell.setCellValue("选择题(20)");
			xuanzeCell.setCellStyle(style);
			XSSFCell panduanCell = row.createCell(3);// 判断列
			panduanCell.setCellValue("判断(5)");
			panduanCell.setCellStyle(style);
			XSSFCell tiankongCell = row.createCell(4);// 填空列
			tiankongCell.setCellValue("填空(15)");
			tiankongCell.setCellStyle(style);
			XSSFCell yueduCell = row.createCell(5);// 阅读列
			yueduCell.setCellValue("阅读程序20");
			yueduCell.setCellStyle(style);
			XSSFCell juanmianfenCell = row.createCell(6);// 卷面总分列
			juanmianfenCell.setCellValue("卷面总分(60)");
			juanmianfenCell.setCellStyle(style);
			XSSFCell shangjifenCell = row.createCell(7);// 上机总分列
			shangjifenCell.setCellValue("上机总分(45+10)");
			shangjifenCell.setCellStyle(style);
			XSSFCell zongfenCell = row.createCell(8);// 总分列
			zongfenCell.setCellValue("考试总分");
			zongfenCell.setCellStyle(style);
			for (int i = 1; i < 11; i++) {
				// 创建行
				XSSFRow row1 = sheet.createRow(i);
				// 获取每一行数据存入str
				String[] str = list.get(i + 4);// 从第六行开始
				for (int j = 0; j < str.length; j++) {
					// 创建单元格
					XSSFCell cell = row1.createCell(j);
					// 写入单元格
					if (str[j].endsWith("0")) {
						int x = str[j].indexOf(".");
						int str1 = Integer.valueOf(str[j].substring(0, x));
						cell.setCellValue(str1);
						// 设置格式
						cell.setCellStyle(style);
					} else if (str[j].endsWith("5")) {
						double str2 = Double.valueOf(str[j]);
						cell.setCellValue(str2);
						// 设置格式
						cell.setCellStyle(style);
					} else {
						cell.setCellValue(str[j]);
						// 设置格式
						cell.setCellStyle(style);
					}

				}
			}
			FileOutputStream outputStream = new FileOutputStream(fileName);
			outputStream.flush();
			wb.write(outputStream);
			outputStream.close();
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

	/*
	 * 读取数据
	 */
	public void readExcel() {
		try {
			FileInputStream excelFileInputStream = new FileInputStream(
					"C:\\Users\\Administrator\\Desktop\\java阶段性考试成绩.xlsx");
			XSSFWorkbook workbook = new XSSFWorkbook(excelFileInputStream);
			excelFileInputStream.close();
			XSSFSheet sheet = workbook.getSheetAt(0);
			for (int rowIndex = 1; rowIndex <= sheet.getLastRowNum(); rowIndex++) {
				XSSFRow row = sheet.getRow(rowIndex);
				if (row == null) {
					continue;
				}
				XSSFCell idCell = row.getCell(0);// 排名列
				XSSFCell nameCell = row.getCell(1);// 姓名列
				XSSFCell xuanzeCell = row.getCell(2);// 选择列
				XSSFCell panduanCell = row.getCell(3);// 判断列
				XSSFCell tiankongCell = row.getCell(4);// 填空列
				XSSFCell yueduCell = row.getCell(5);// 阅读列
				XSSFCell juanmianfenCell = row.getCell(6);// 卷面总分列
				XSSFCell shangjifenCell = row.getCell(7);// 上机总分列
				XSSFCell zongfenCell = row.getCell(8);// 总分列
				// 写入
				XSSFRow newRow = sheet.createRow(rowIndex);
				int cellIndex = 0;
				XSSFCell newIdCell = newRow.createCell(cellIndex++, Cell.CELL_TYPE_NUMERIC);
				newIdCell.setCellValue(idCell.getNumericCellValue());

				XSSFCell newNameCell = newRow.createCell(cellIndex++, Cell.CELL_TYPE_STRING);
				newNameCell.setCellValue(nameCell.getStringCellValue());

				XSSFCell newXuanZeCell = newRow.createCell(cellIndex++, Cell.CELL_TYPE_NUMERIC);
				newXuanZeCell.setCellValue(xuanzeCell.getNumericCellValue());

				XSSFCell newPanDuanCell = newRow.createCell(cellIndex++, Cell.CELL_TYPE_NUMERIC);
				newPanDuanCell.setCellValue(panduanCell.getNumericCellValue());

				XSSFCell newTianKongCell = newRow.createCell(cellIndex++, Cell.CELL_TYPE_NUMERIC);
				newTianKongCell.setCellValue(tiankongCell.getNumericCellValue());

				XSSFCell newYueDuCell = newRow.createCell(cellIndex++, Cell.CELL_TYPE_NUMERIC);
				newYueDuCell.setCellValue(yueduCell.getNumericCellValue());

				XSSFCell newJuanMianCell = newRow.createCell(cellIndex++, Cell.CELL_TYPE_NUMERIC);
				newJuanMianCell.setCellValue(juanmianfenCell.getNumericCellValue());

				XSSFCell newShangJiCell = newRow.createCell(cellIndex++, Cell.CELL_TYPE_NUMERIC);
				newShangJiCell.setCellValue(shangjifenCell.getNumericCellValue());

				XSSFCell newZongFenCell = newRow.createCell(cellIndex++, Cell.CELL_TYPE_NUMERIC);
				newZongFenCell.setCellValue(zongfenCell.getNumericCellValue());

				FileOutputStream excelFileOutPutStream = new FileOutputStream(
						"C:\\Users\\Administrator\\Desktop\\java阶段性考试成绩-1.xlsx");
				workbook.write(excelFileOutPutStream);
				excelFileOutPutStream.flush();
				excelFileOutPutStream.close();

				//
				// StringBuilder employeeInfoBuilder = new StringBuilder();
				// employeeInfoBuilder.append("员工信息-->").append("排名:").append(idCell.getNumericCellValue()).append("姓名:")
				// .append(nameCell.getStringCellValue()).append("选择题(20):")
				// .append(xuanzeCell.getNumericCellValue()).append("判断(5):")
				// .append(panduanCell.getNumericCellValue()).append("填空(15):")
				// .append(tiankongCell.getNumericCellValue()).append("阅读程序(20):")
				// .append(yueduCell.getNumericCellValue()).append("卷面总分(60):")
				// .append(juanmianfenCell.getNumericCellValue()).append("上机总分(45+10):")
				// .append(shangjifenCell.getNumericCellValue()).append("考试总分:")
				// .append(zongfenCell.getNumericCellValue());
				// System.out.println(employeeInfoBuilder.toString());
				workbook.close();
			}
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

	/**
	 * 测试
	 */

	/**
	 * 写入数据
	 */
	public void writeExcel() {
		FileInputStream excelFileInputStream;
		try {
			excelFileInputStream = new FileInputStream("C:\\Users\\Administrator\\Desktop\\java阶段性考试成绩.xlsx");
			XSSFWorkbook workbook = new XSSFWorkbook(excelFileInputStream);
			excelFileInputStream.close();
			XSSFSheet sheet = workbook.getSheetAt(0);
			int currentLastRowIndex = sheet.getLastRowNum();
			int newRowIndex = currentLastRowIndex + 1;
			XSSFRow newRow = sheet.createRow(newRowIndex);

		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

	}
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值