1. 程式人生 > >java實現Excel的讀寫操作以及複製列

java實現Excel的讀寫操作以及複製列

import org.apache.poi.hssf.usermodel.*;
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.io.*;
import java.text.DecimalFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList; public class ExcelUtil { //預設單元格內容為數字時格式 private static DecimalFormat df = new DecimalFormat("0"); // 預設單元格格式化日期字串 private static SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); // 格式化數字 private static DecimalFormat nf = new DecimalFormat("0.00"); public static
ArrayList<ArrayList<Object>> readExcel(File file){ if(file == null){ return null; } if(file.getName().endsWith("xlsx")){ //處理ecxel2007 return readExcel2007(file); }else{ //處理ecxel2003 return readExcel2003(file); } } /* * @return 將返回結果儲存在
ArrayList內,儲存結構與二位陣列類似 * lists.get(0).get(0)表示過去Excel00列單元格 */ public static ArrayList<ArrayList<Object>> readExcel2003(File file){ try{ ArrayList<ArrayList<Object>> rowList = new ArrayList<ArrayList<Object>>(); ArrayList<Object> colList; HSSFWorkbook wb = new HSSFWorkbook(new FileInputStream(file)); HSSFSheet sheet = wb.getSheetAt(0); HSSFRow row; HSSFCell cell; Object value; for(int i = sheet.getFirstRowNum() , rowCount = 0; rowCount < sheet.getPhysicalNumberOfRows() ; i++ ){ row = sheet.getRow(i); colList = new ArrayList<Object>(); if(row == null){ //當讀取行為空時 if(i != sheet.getPhysicalNumberOfRows()){//判斷是否是最後一行 rowList.add(colList); } continue; }else{ rowCount++; } for( int j = row.getFirstCellNum() ; j <= row.getLastCellNum() ;j++){ cell = row.getCell(j); if(cell == null || cell.getCellType() == HSSFCell.CELL_TYPE_BLANK){ //當該單元格為空 if(j != row.getLastCellNum()){//判斷是否是該行中最後一個單元格 colList.add(""); } continue; } switch(cell.getCellType()){ case XSSFCell.CELL_TYPE_STRING: System.out.println(i + "" + j + " is String type"); value = cell.getStringCellValue(); break; case XSSFCell.CELL_TYPE_NUMERIC: if ("@".equals(cell.getCellStyle().getDataFormatString())) { value = df.format(cell.getNumericCellValue()); } else if ("General".equals(cell.getCellStyle() .getDataFormatString())) { value = nf.format(cell.getNumericCellValue()); } else { value = sdf.format(HSSFDateUtil.getJavaDate(cell .getNumericCellValue())); } System.out.println(i + "" + j + " is Number type ; DateFormt:" + value.toString()); break; case XSSFCell.CELL_TYPE_BOOLEAN: System.out.println(i + "" + j + " is Boolean type"); value = Boolean.valueOf(cell.getBooleanCellValue()); break; case XSSFCell.CELL_TYPE_BLANK: System.out.println(i + "" + j + " is Blank type"); value = ""; break; default: System.out.println(i + "" + j + " is default type"); value = cell.toString(); }// end switch colList.add(value); }//end for j rowList.add(colList); }//end for i return rowList; }catch(Exception e){ return null; } } public static ArrayList<ArrayList<Object>> readExcel2007(File file){ try{ ArrayList<ArrayList<Object>> rowList = new ArrayList<ArrayList<Object>>(); ArrayList<Object> colList; XSSFWorkbook wb = new XSSFWorkbook(new FileInputStream(file)); XSSFSheet sheet = wb.getSheetAt(0); XSSFRow row; XSSFCell cell; Object value; for(int i = sheet.getFirstRowNum() , rowCount = 0; rowCount < sheet.getPhysicalNumberOfRows() ; i++ ){ row = sheet.getRow(i); colList = new ArrayList<Object>(); if(row == null){ //當讀取行為空時 if(i != sheet.getPhysicalNumberOfRows()){//判斷是否是最後一行 rowList.add(colList); } continue; }else{ rowCount++; } for( int j = row.getFirstCellNum() ; j <= row.getLastCellNum() ;j++){ cell = row.getCell(j); if(cell == null || cell.getCellType() == HSSFCell.CELL_TYPE_BLANK){ //當該單元格為空 if(j != row.getLastCellNum()){//判斷是否是該行中最後一個單元格 colList.add(""); } continue; } switch(cell.getCellType()){ case XSSFCell.CELL_TYPE_STRING: System.out.println(i + "" + j + " is String type"); value = cell.getStringCellValue(); break; case XSSFCell.CELL_TYPE_NUMERIC: if ("@".equals(cell.getCellStyle().getDataFormatString())) { value = df.format(cell.getNumericCellValue()); } else if ("General".equals(cell.getCellStyle() .getDataFormatString())) { value = nf.format(cell.getNumericCellValue()); } else { value = sdf.format(HSSFDateUtil.getJavaDate(cell .getNumericCellValue())); } System.out.println(i + "" + j + " is Number type ; DateFormt:" + value.toString()); break; case XSSFCell.CELL_TYPE_BOOLEAN: System.out.println(i + "" + j + " is Boolean type"); value = Boolean.valueOf(cell.getBooleanCellValue()); break; case XSSFCell.CELL_TYPE_BLANK: System.out.println(i + "" + j + " is Blank type"); value = ""; break; default: System.out.println(i + "" + j + " is default type"); value = cell.toString(); }// end switch colList.add(value); }//end for j rowList.add(colList); }//end for i return rowList; }catch(Exception e){ System.out.println("exception"); return null; } } public static void writeExcel(ArrayList<ArrayList<Object>> result, String path) { if (result == null) { return; } HSSFWorkbook wb = new HSSFWorkbook(); HSSFSheet sheet = wb.createSheet("sheet1"); for (int i = 0; i < result.size(); i++) { HSSFRow row = sheet.createRow(i); if (result.get(i) != null) { for (int j = 0; j < result.get(i).size(); j++) { HSSFCell cell = row.createCell(j); cell.setCellValue(result.get(i).get(j).toString()); // if (i > 0 && j == 3) {//第二列複製到第四列 // cell.setCellValue(result.get(i).get(1).toString()); // } else { // cell.setCellValue(result.get(i).get(j).toString()); // } } } } ByteArrayOutputStream os = new ByteArrayOutputStream(); try { wb.write(os); } catch (IOException e) { e.printStackTrace(); } byte[] content = os.toByteArray(); File file = new File(path);//Excel檔案生成後儲存的位置。 OutputStream fos = null; try { fos = new FileOutputStream(file); fos.write(content); os.close(); fos.close(); } catch (Exception e) { e.printStackTrace(); } } public static DecimalFormat getDf() { return df; } public static void setDf(DecimalFormat df) { ExcelUtil.df = df; } public static SimpleDateFormat getSdf() { return sdf; } public static void setSdf(SimpleDateFormat sdf) { ExcelUtil.sdf = sdf; } public static DecimalFormat getNf() { return nf; } public static void setNf(DecimalFormat nf) { ExcelUtil.nf = nf; } public static void main(String[] args) { File file = new File("D:/a.xls"); ArrayList<ArrayList<Object>> result = ExcelUtil.readExcel(file); for(int i = 0 ;i < result.size() ;i++){ for(int j = 0;j<result.get(i).size(); j++){ System.out.println(i+" "+j+" "+ result.get(i).get(j).toString()); } } ExcelUtil.writeExcel(result,"D:/b.xls"); } }

引用到的jar:

<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi-ooxml</artifactId>
    <version>3.11-beta1</version>
</dependency>