1. 程式人生 > 其它 >java如何從excel中讀取、寫入資訊(POI)

java如何從excel中讀取、寫入資訊(POI)

技術標籤:Javapoiexceljava

注意事項:

從excel中讀取檔案的內容應該沒一行一列都有對應元素素,如下圖所示:
在這裡插入圖片描述


POI讀取excel程式碼:

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.text.DecimalFormat;
import java.text.SimpleDateFormat;
import java.util.LinkedList;
import
java.util.List; import org.apache.poi.hssf.usermodel.HSSFCellStyle; import org.apache.poi.hssf.usermodel.HSSFDataFormat; import org.apache.poi.hssf.usermodel.HSSFDateUtil; import org.apache.poi.hssf.usermodel.HSSFFont; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.hssf.
util.HSSFColor; import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermodel.CellStyle; import org.apache.poi.ss.usermodel.Font; 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.
XSSFCell; import org.apache.poi.xssf.usermodel.XSSFWorkbook; import org.apache.poi.ss.usermodel.CellType; import org.apache.poi.xssf.usermodel.XSSFCell; import org.apache.poi.common.*;; public class CreatAndReadExcel { //測試主函式 // private static String excel2003Path = "C:\\Users\\lenovo\\Desktop\\專案\\cdw.xls"; // public static void main(String[] args) throws Exception { // // List<List<Object>> excel2007List = readExcel(excel2007Path);// 讀取2007版Excel檔案 // List<List<Object>> excel2003List = readExcel(excel2003Path);// 讀取2003版Excel檔案 // System.out.println(excel2003List.toString()); // System.out.println(excel2003List.get(1).get(0)); // // String str = "手打手打"; // if (str.equals(excel2003List.get(1).get(0).toString()) ) { // System.out.println("true"); // }else { // System.out.println("false"); // } // } /** * 讀取excel * * @param fileName * @return 行<列> * @throws IOException */ public static List<List<Object>> readExcel(String fileName) throws IOException { File file = new File(fileName); Workbook wb = null; if (fileName.endsWith(".xlsx")) {// 2007 wb = new XSSFWorkbook(new FileInputStream(file));// 建立 一個excel文件物件 } else if (fileName.endsWith(".xls")) {// 2003 wb = new HSSFWorkbook(new FileInputStream(file));// 建立 一個excel文件物件 } Sheet sheet = wb.getSheetAt(0);// 讀取第一個sheet頁表格內容 Object value = null; Row row = null; Cell cell = null; System.out.println("讀取office 2007 excel內容如下:"); // System.out.println(sheet.getPhysicalNumberOfRows());// 獲取的是物理行數,也就是不包括那些空行(隔行)的情況。 // System.out.println(sheet.getLastRowNum());// 獲取的是最後一行的編號(編號從0開始) // 行 List<List<Object>> rowlist = new LinkedList<List<Object>>(); for (int i = sheet.getFirstRowNum(); i <= sheet.getLastRowNum(); i++) { row = sheet.getRow(i); if (row == null) { continue; } // 列 List<Object> cellList = new LinkedList<Object>(); for (int j = row.getFirstCellNum(); j <= row.getLastCellNum(); j++) { cell = row.getCell(j); if (cell == null) { continue; } DecimalFormat df = new DecimalFormat("0");// 格式化 number String DecimalFormat nf = new DecimalFormat("0");// 格式化數字 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");// 格式化日期字串 switch (cell.getCellType()) { case STRING:// 字串——String type value = cell.getStringCellValue(); break; case NUMERIC:// 數字——Number type 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())); } break; case BOOLEAN:// boolean——Boolean type value = cell.getBooleanCellValue(); break; case BLANK:// 空白——Blank type value = ""; break; default:// default type value = cell.toString(); } if (value == null || "".equals(value)) { continue; } cellList.add(value); } rowlist.add(cellList); } return rowlist; } }

POI向excel中寫入list型別:

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;

import java.io.*;
import java.util.List;

public class WriteExcel {
    private static final String EXCEL_XLS = "xls";
    private static final String EXCEL_XLSX = "xlsx";

    public static void main(String[] args) {


    }


    public static void writeExcel(List<String> dataList,String finalXlsxPath){
        OutputStream out = null;
        try {
            // 獲取總列數

            // 讀取Excel文件
            File finalXlsxFile = new File(finalXlsxPath);
            Workbook workBook = getWorkbok(finalXlsxFile);
            // sheet 對應一個工作頁
            Sheet sheet = workBook.getSheetAt(0);
            /**
             * 刪除原有資料,除了屬性列
             */
            int rowNumber = sheet.getLastRowNum();    // 第一行從0開始算
            System.out.println("原始資料總行數,除屬性列:" + rowNumber);
            for (int i = 1; i <= rowNumber; i++) {
                Row row = sheet.getRow(i);

            }
            // 建立檔案輸出流,輸出電子表格:這個必須有,否則你在sheet上做的任何操作都不會有效
            out =  new FileOutputStream(finalXlsxPath);
            workBook.write(out);
            out.close();
            /**
             * 往Excel中寫新資料
             */

            // 建立一行:從第二行開始,跳過屬性列
            Row row = sheet.createRow(rowNumber + 1);
            // 得到要插入的每一條記錄
            //Map dataMap = dataList.get(j);

            int count = dataList.size();
            for (int k = 0; k < count; k++) {
                    // 在一行內迴圈
                Cell first = row.createCell(k);
                first.setCellValue(dataList.get(k));
            }
            // 建立檔案輸出流,準備輸出電子表格:這個必須有,否則你在sheet上做的任何操作都不會有效
            out =  new FileOutputStream(finalXlsxPath);
            workBook.write(out);
            out.close();


        } catch (Exception e) {
            e.printStackTrace();
        } finally{
            try {

                if(out != null){
                    out.flush();
                    out.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        System.out.println("資料匯出成功");
    }

    /**
     * 判斷Excel的版本,獲取Workbook

     * @return
     * @throws IOException
     */
    public static Workbook getWorkbok(File file) throws IOException{
        Workbook wb = null;
        FileInputStream in = new FileInputStream(file);
        if(file.getName().endsWith(EXCEL_XLS)){     //Excel&nbsp;2003
            wb = new HSSFWorkbook(in);

        }else if(file.getName().endsWith(EXCEL_XLSX)){    // Excel 2007/2010
            wb = new XSSFWorkbook(in);

        }
        return wb;
    }
}

POI包下載地址:

連結:https://pan.baidu.com/s/1GPKL6P7pDQbn9NQqKWYPMg
提取碼:bjyl
複製這段內容後開啟百度網盤手機App,操作更方便哦–來自百度網盤超級會員V5的分享