亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > Java > 正文

java poi讀取excel操作示例(2個代碼)

2019-11-26 15:52:23
字體:
來源:轉載
供稿:網友

項目中要求讀取excel文件內容,并將其轉化為xml格式。常見讀取excel文檔一般使用POI和JExcelAPI這兩個工具。這里我們介紹使用POI實現讀取excel文檔。

復制代碼 代碼如下:

/*
 * 使用POI讀取EXCEL文件
 */
import java.io.File;
import java.io.FileInputStream;
import java.util.ArrayList;

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;

/**
 *
 * @author Hanbin
 */
public class ReadExcel {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args)throws Exception {
        read("d://demo.xls");
    }

    public static ArrayList read(String fileName){
        ArrayList list = new ArrayList();
        String sql = "";
        try{
            File f = new File(fileName);
            FileInputStream fis = new FileInputStream(f);
            HSSFWorkbook wbs = new HSSFWorkbook(fis);
            HSSFSheet childSheet = wbs.getSheetAt(0);
            System.out.println("行數:" + childSheet.getLastRowNum());
            for(int i = 4;i<childSheet.getLastRowNum();i++){
                HSSFRow row = childSheet.getRow(i);
                System.out.println("列數:" + row.getPhysicalNumberOfCells());
                if(null != row){
                    for(int k=1;k<row.getPhysicalNumberOfCells();k++){
                        HSSFCell cell;
                        cell = row.getCell((short)k);
                       // System.out.print(getStringCellValue(cell) + "/t");
                        list.add(getStringCellValue(cell) + "/t");
                    }
                }
            }
        }catch(Exception e){
            e.printStackTrace();
        }
        return list;
    }
    /**
     * 獲取單元格數據內容為字符串類型的數據
     *
     * @param cell Excel單元格
     * @return String 單元格數據內容
     */
    private static String getStringCellValue(HSSFCell cell) {
        String strCell = "";
        switch (cell.getCellType()) {
        case HSSFCell.CELL_TYPE_STRING:
            strCell = cell.getStringCellValue();
            break;
        case HSSFCell.CELL_TYPE_NUMERIC:
            strCell = String.valueOf(cell.getNumericCellValue());
            break;
        case HSSFCell.CELL_TYPE_BOOLEAN:
            strCell = String.valueOf(cell.getBooleanCellValue());
            break;
        case HSSFCell.CELL_TYPE_BLANK:
            strCell = "";
            break;
        default:
            strCell = "";
            break;
        }
        if (strCell.equals("") || strCell == null) {
            return "";
        }
        if (cell == null) {
            return "";
        }
        return strCell;
    }
}

再來一個例子

復制代碼 代碼如下:

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.Date;
import java.util.HashMap;
import java.util.Map;

import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFDateUtil;
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.poifs.filesystem.POIFSFileSystem;

/**
 * 操作Excel表格的功能類
 */
public class ExcelReader {
    private POIFSFileSystem fs;
    private HSSFWorkbook wb;
    private HSSFSheet sheet;
    private HSSFRow row;

    /**
     * 讀取Excel表格表頭的內容
     * @param InputStream
     * @return String 表頭內容的數組
     */
    public String[] readExcelTitle(InputStream is) {
        try {
            fs = new POIFSFileSystem(is);
            wb = new HSSFWorkbook(fs);
        } catch (IOException e) {
            e.printStackTrace();
        }
        sheet = wb.getSheetAt(0);
        row = sheet.getRow(0);
        // 標題總列數
        int colNum = row.getPhysicalNumberOfCells();
        System.out.println("colNum:" + colNum);
        String[] title = new String[colNum];
        for (int i = 0; i < colNum; i++) {
            //title[i] = getStringCellValue(row.getCell((short) i));
            title[i] = getCellFormatValue(row.getCell((short) i));
        }
        return title;
    }

    /**
     * 讀取Excel數據內容
     * @param InputStream
     * @return Map 包含單元格數據內容的Map對象
     */
    public Map<Integer, String> readExcelContent(InputStream is) {
        Map<Integer, String> content = new HashMap<Integer, String>();
        String str = "";
        try {
            fs = new POIFSFileSystem(is);
            wb = new HSSFWorkbook(fs);
        } catch (IOException e) {
            e.printStackTrace();
        }
        sheet = wb.getSheetAt(0);
        // 得到總行數
        int rowNum = sheet.getLastRowNum();
        row = sheet.getRow(0);
        int colNum = row.getPhysicalNumberOfCells();
        // 正文內容應該從第二行開始,第一行為表頭的標題
        for (int i = 1; i <= rowNum; i++) {
            row = sheet.getRow(i);
            int j = 0;
            while (j < colNum) {
                // 每個單元格的數據內容用"-"分割開,以后需要時用String類的replace()方法還原數據
                // 也可以將每個單元格的數據設置到一個javabean的屬性中,此時需要新建一個javabean
                // str += getStringCellValue(row.getCell((short) j)).trim() +
                // "-";
                str += getCellFormatValue(row.getCell((short) j)).trim() + "    ";
                j++;
            }
            content.put(i, str);
            str = "";
        }
        return content;
    }

    /**
     * 獲取單元格數據內容為字符串類型的數據
     *
     * @param cell Excel單元格
     * @return String 單元格數據內容
     */
    private String getStringCellValue(HSSFCell cell) {
        String strCell = "";
        switch (cell.getCellType()) {
        case HSSFCell.CELL_TYPE_STRING:
            strCell = cell.getStringCellValue();
            break;
        case HSSFCell.CELL_TYPE_NUMERIC:
            strCell = String.valueOf(cell.getNumericCellValue());
            break;
        case HSSFCell.CELL_TYPE_BOOLEAN:
            strCell = String.valueOf(cell.getBooleanCellValue());
            break;
        case HSSFCell.CELL_TYPE_BLANK:
            strCell = "";
            break;
        default:
            strCell = "";
            break;
        }
        if (strCell.equals("") || strCell == null) {
            return "";
        }
        if (cell == null) {
            return "";
        }
        return strCell;
    }

    /**
     * 獲取單元格數據內容為日期類型的數據
     *
     * @param cell
     *            Excel單元格
     * @return String 單元格數據內容
     */
    private String getDateCellValue(HSSFCell cell) {
        String result = "";
        try {
            int cellType = cell.getCellType();
            if (cellType == HSSFCell.CELL_TYPE_NUMERIC) {
                Date date = cell.getDateCellValue();
                result = (date.getYear() + 1900) + "-" + (date.getMonth() + 1)
                        + "-" + date.getDate();
            } else if (cellType == HSSFCell.CELL_TYPE_STRING) {
                String date = getStringCellValue(cell);
                result = date.replaceAll("[年月]", "-").replace("日", "").trim();
            } else if (cellType == HSSFCell.CELL_TYPE_BLANK) {
                result = "";
            }
        } catch (Exception e) {
            System.out.println("日期格式不正確!");
            e.printStackTrace();
        }
        return result;
    }

    /**
     * 根據HSSFCell類型設置數據
     * @param cell
     * @return
     */
    private String getCellFormatValue(HSSFCell cell) {
        String cellvalue = "";
        if (cell != null) {
            // 判斷當前Cell的Type
            switch (cell.getCellType()) {
            // 如果當前Cell的Type為NUMERIC
            case HSSFCell.CELL_TYPE_NUMERIC:
            case HSSFCell.CELL_TYPE_FORMULA: {
                // 判斷當前的cell是否為Date
                if (HSSFDateUtil.isCellDateFormatted(cell)) {
                    // 如果是Date類型則,轉化為Data格式

                    //方法1:這樣子的data格式是帶時分秒的:2011-10-12 0:00:00
                    //cellvalue = cell.getDateCellValue().toLocaleString();

                    //方法2:這樣子的data格式是不帶帶時分秒的:2011-10-12
                    Date date = cell.getDateCellValue();
                    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
                    cellvalue = sdf.format(date);

                }
                // 如果是純數字
                else {
                    // 取得當前Cell的數值
                    cellvalue = String.valueOf(cell.getNumericCellValue());
                }
                break;
            }
            // 如果當前Cell的Type為STRIN
            case HSSFCell.CELL_TYPE_STRING:
                // 取得當前的Cell字符串
                cellvalue = cell.getRichStringCellValue().getString();
                break;
            // 默認的Cell值
            default:
                cellvalue = " ";
            }
        } else {
            cellvalue = "";
        }
        return cellvalue;

    }

    public static void main(String[] args) {
        try {
            // 對讀取Excel表格標題測試
            InputStream is = new FileInputStream("d://test2.xls");
            ExcelReader excelReader = new ExcelReader();
            String[] title = excelReader.readExcelTitle(is);
            System.out.println("獲得Excel表格的標題:");
            for (String s : title) {
                System.out.print(s + " ");
            }

            // 對讀取Excel表格內容測試
            InputStream is2 = new FileInputStream("d://test2.xls");
            Map<Integer, String> map = excelReader.readExcelContent(is2);
            System.out.println("獲得Excel表格的內容:");
            for (int i = 1; i <= map.size(); i++) {
                System.out.println(map.get(i));
            }

        } catch (FileNotFoundException e) {
            System.out.println("未找到指定路徑的文件!");
            e.printStackTrace();
        }
    }
}

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲国产精品999| 亚洲精品短视频| 国产欧洲精品视频| 91精品国产色综合久久不卡98| 国产精品免费视频xxxx| 国产精品狼人色视频一区| 国产成人精品久久二区二区| 午夜精品福利视频| 不卡av电影院| 国产精品在线看| 中文字幕欧美精品在线| 亚洲美女动态图120秒| 韩剧1988在线观看免费完整版| 久久99久久久久久久噜噜| 国产精品看片资源| 亚洲最大福利网| 92看片淫黄大片欧美看国产片| 91在线免费网站| 精品亚洲一区二区三区| 亚洲欧美另类自拍| 欧美成人激情视频免费观看| 日韩有码视频在线| 中文字幕亚洲图片| 欧美在线视频导航| 日韩激情av在线免费观看| 国产精品美女免费看| 国产欧美一区二区| 91久久精品久久国产性色也91| 日韩美女视频免费在线观看| 黑人巨大精品欧美一区二区一视频| 亚洲福利视频二区| 国模精品系列视频| 国语自产精品视频在免费| 久久久国产精品x99av| 国产成人黄色av| 国产精品久久网| 不卡av在线网站| 伊人男人综合视频网| 欧美高清视频在线观看| 欧美国产在线视频| 97在线免费观看视频| 成人伊人精品色xxxx视频| 欧美国产欧美亚洲国产日韩mv天天看完整| 亚洲国语精品自产拍在线观看| 亚洲999一在线观看www| 欧美贵妇videos办公室| 国产精品久久久久久久久久尿| 日韩视频亚洲视频| 亚洲自拍偷拍第一页| 亚洲乱码国产乱码精品精天堂| 久久精品美女视频网站| 国产视频欧美视频| 精品国产精品三级精品av网址| 午夜精品一区二区三区在线视频| 国产精品高清在线观看| 色综合天天综合网国产成人网| 久久精品国产亚洲精品2020| 欧美日韩在线视频一区二区| 在线播放国产一区中文字幕剧情欧美| 日韩av在线网| 国产精品久久久久久久久久久不卡| 91在线|亚洲| 91精品久久久久久| 欧美日本高清视频| 日韩在线观看你懂的| 欧美一乱一性一交一视频| 高跟丝袜一区二区三区| 亚洲精品电影在线观看| 97国产精品免费视频| 九九视频这里只有精品| 51ⅴ精品国产91久久久久久| 国产精品美女无圣光视频| 久久影视三级福利片| 久久婷婷国产麻豆91天堂| 欧美一区二区三区免费观看| 97国产精品视频人人做人人爱| 欧美黄色片在线观看| 中文字幕精品—区二区| 日韩免费黄色av| 亚洲成人精品av| 日韩中文字幕在线视频播放| 色综合久久天天综线观看| 国产亚洲精品va在线观看| 国产精品xxx视频| 亚洲欧美综合另类中字| 久久人人爽国产| 国产丝袜一区二区三区| 欧美黑人视频一区| 中文字幕久热精品在线视频| 亚洲精品美女网站| 欧美日韩精品二区| 久久频这里精品99香蕉| 懂色av影视一区二区三区| 8050国产精品久久久久久| 欧美激情综合色综合啪啪五月| 国产噜噜噜噜久久久久久久久| 亚洲一区二区三区在线免费观看| 日韩中文字幕在线免费观看| 亚洲毛片一区二区| 欧美黑人巨大精品一区二区| 亚洲情综合五月天| 欧美在线亚洲在线| 精品中文字幕在线观看| 日本最新高清不卡中文字幕| 久久69精品久久久久久久电影好| 久久精品一偷一偷国产| 亚洲一区二区三区四区在线播放| 欧美精品www| 欧美限制级电影在线观看| 亚洲欧美综合另类中字| 久久精品成人欧美大片古装| 97视频在线观看亚洲| 久久婷婷国产麻豆91天堂| 日韩精品免费一线在线观看| 青青久久av北条麻妃海外网| 北条麻妃久久精品| 日韩亚洲综合在线| 欧美电影院免费观看| 国内伊人久久久久久网站视频| 在线国产精品视频| 欧美成人中文字幕在线| 国产成人97精品免费看片| 精品国产精品三级精品av网址| 国产精品www色诱视频| 97国产suv精品一区二区62| 久久久精品国产亚洲| 欧美精品在线观看| 欧美成人精品不卡视频在线观看| 久久久久久久97| 亚洲精品乱码久久久久久按摩观| 亚洲人成欧美中文字幕| 国产精品久久久久久久久久小说| 久久精品国产清自在天天线| 国产精品视频自拍| 欧美极品少妇与黑人| 亚洲一区www| 成人黄色激情网| 国产亚洲精品激情久久| 黑人狂躁日本妞一区二区三区| 久久亚洲国产成人| 国自产精品手机在线观看视频| 亚洲在线观看视频| 久久精品国产亚洲| 国产福利视频一区| 不卡在线观看电视剧完整版| 国产成人综合亚洲| 国产欧美日韩91| 久久久久久97| 欧美在线xxx| 亚洲区在线播放| 91欧美精品午夜性色福利在线| 日本精品视频在线播放| 国产成人一区二区三区小说| 欧美激情亚洲精品| 精品视频在线播放免| 91精品国产自产在线观看永久| 国产精品第100页| 亚洲第五色综合网| 性欧美在线看片a免费观看| 国产自产女人91一区在线观看| 青草青草久热精品视频在线观看| 亚洲网站视频福利| 97精品国产97久久久久久春色| 91精品在线播放|