国产秋霞理论久久久电影-婷婷色九月综合激情丁香-欧美在线观看乱妇视频-精品国avA久久久久久久-国产乱码精品一区二区三区亚洲人-欧美熟妇一区二区三区蜜桃视频

Java中操作Excel的3種方法,太好用了!

共 41478字,需瀏覽 83分鐘

 ·

2021-03-31 11:21

一、介紹

在平時的業(yè)務(wù)系統(tǒng)開發(fā)中,少不了需要用到導(dǎo)出、導(dǎo)入excel功能,今天我們就一起來總結(jié)一下,如果你正為此需求感到困惑,那么閱讀完本文,你一定會有所收獲!

二、poi

大概在很久很久以前,微軟的電子表格軟件 Excel 以操作簡單、存儲數(shù)據(jù)直觀方便,還支持打印報表,在誕生之初,可謂深得辦公室里的白領(lǐng)青睞,極大的提升了工作的效率,不久之后,便成了辦公室里的必備工具。

隨著更多的新語言的崛起,例如我們所熟悉的 java,后來便有一些團(tuán)隊開始開發(fā)一套能與 Excel 軟件無縫切換的操作工具!

這其中就有我們所熟悉的 apache 的 poi,其前身是 Jakarta 的 POI Project項目,之后將其開源給 apache 基金會!

當(dāng)然,在java生態(tài)體系里面,能與Excel無縫銜接的第三方工具還有很多,因為 apache poi 在業(yè)界使用的最廣泛,因此其他的工具不做過多介紹!

話不多說,直接開擼!

2.1、首先引入apache poi的依賴

<dependencies>
    <!--xls(03)-->
    <dependency>
        <groupId>org.apache.poi</groupId>
        <artifactId>poi</artifactId>
        <version>4.1.2</version>
    </dependency>
    <!--xlsx(07)-->
    <dependency>
        <groupId>org.apache.poi</groupId>
        <artifactId>poi-ooxml</artifactId>
        <version>4.1.2</version>
    </dependency>
    <!--時間格式化工具-->
    <dependency>
        <groupId>joda-time</groupId>
        <artifactId>joda-time</artifactId>
        <version>2.10.6</version>
    </dependency>
</dependencies>

2.2、導(dǎo)出excel

導(dǎo)出操作,即使用 Java 寫出數(shù)據(jù)到 Excel 中,常見場景是將頁面上的數(shù)據(jù)導(dǎo)出,這些數(shù)據(jù)可能是財務(wù)數(shù)據(jù),也可能是商品數(shù)據(jù),生成 Excel 后返回給用戶下載文件。

在 poi 工具庫中,導(dǎo)出 api 可以分三種方式

  • HSSF方式:這種方式導(dǎo)出的文件格式為office 2003專用格式,即.xls,優(yōu)點是導(dǎo)出數(shù)據(jù)速度快,但是最多65536行數(shù)據(jù)
  • XSSF方式:這種方式導(dǎo)出的文件格式為office 2007專用格式,即.xlsx,優(yōu)點是導(dǎo)出的數(shù)據(jù)不受行數(shù)限制,缺點導(dǎo)出速度慢
  • SXSSF方式:SXSSF 是 XSSF API的兼容流式擴(kuò)展,主要解決當(dāng)使用 XSSF 方式導(dǎo)出大數(shù)據(jù)量時,內(nèi)存溢出的問題,支持導(dǎo)出大批量的excel數(shù)據(jù)
2.2.1、HSSF方式導(dǎo)出

HSSF方式,最多只支持65536條數(shù)據(jù)導(dǎo)出,超過這個條數(shù)會報錯!

public class ExcelWrite2003Test {

    public static String PATH = "/Users/hello/Desktop/";

    public static void main(String[] args) throws Exception {
        //時間
        long begin = System.currentTimeMillis();

        //創(chuàng)建一個工作簿
        Workbook workbook = new HSSFWorkbook();
        //創(chuàng)建表
        Sheet sheet = workbook.createSheet();
        //寫入數(shù)據(jù)
        for (int rowNumber = 0; rowNumber < 65536; rowNumber++) {
            //創(chuàng)建行
            Row row = sheet.createRow(rowNumber);
            for (int cellNumber = 0; cellNumber < 10; cellNumber++) {
                //創(chuàng)建列
                Cell cell = row.createCell(cellNumber);
                cell.setCellValue(cellNumber);
            }
        }
        System.out.println("over");

        FileOutputStream fileOutputStream = new FileOutputStream(PATH + "用戶信息表2003BigData.xls");
        workbook.write(fileOutputStream);
        fileOutputStream.close();
        long end = System.currentTimeMillis();
        System.out.println((double) (end - begin) / 1000);//4.29s
    }
}
2.2.2、XSSF方式導(dǎo)出

XSSF方式支持大批量數(shù)據(jù)導(dǎo)出,所有的數(shù)據(jù)先寫入內(nèi)存再導(dǎo)出,容易出現(xiàn)內(nèi)存溢出!

public class ExcelWrite2007Test {

    public static String PATH = "/Users/hello/Desktop/";

    public static void main(String[] args) throws Exception {
        //時間
        long begin = System.currentTimeMillis();

        //創(chuàng)建一個工作簿
        Workbook workbook = new XSSFWorkbook();
        //創(chuàng)建表
        Sheet sheet = workbook.createSheet();
        //寫入數(shù)據(jù)
        for (int rowNumber = 0; rowNumber < 65537; rowNumber++) {
            Row row = sheet.createRow(rowNumber);
            for (int cellNumber = 0; cellNumber < 10; cellNumber++) {
                Cell cell = row.createCell(cellNumber);
                cell.setCellValue(cellNumber);
            }
        }
        System.out.println("over");

        FileOutputStream fileOutputStream = new FileOutputStream(PATH + "用戶信息表2007BigData.xlsx");
        workbook.write(fileOutputStream);
        fileOutputStream.close();
        long end = System.currentTimeMillis();
        System.out.println((double) (end - begin) / 1000);//15.87s
    }
}
2.2.3、SXSSF方式導(dǎo)出

SXSSF方式是XSSF方式的一種延伸,主要特性是低內(nèi)存,導(dǎo)出的時候,先將數(shù)據(jù)寫入磁盤再導(dǎo)出,避免報內(nèi)存不足,導(dǎo)致程序運(yùn)行異常,缺點是運(yùn)行很慢!

public class ExcelWriteSXSSFTest {

    public static String PATH = "/Users/hello/Desktop/";

    public static void main(String[] args) throws Exception {
        //時間
        long begin = System.currentTimeMillis();

        //創(chuàng)建一個工作簿
        Workbook workbook = new SXSSFWorkbook();

        //創(chuàng)建表
        Sheet sheet = workbook.createSheet();

        //寫入數(shù)據(jù)
        for (int rowNumber = 0; rowNumber < 100000; rowNumber++) {
            Row row = sheet.createRow(rowNumber);
            for (int cellNumber = 0; cellNumber < 10; cellNumber++) {
                Cell cell = row.createCell(cellNumber);
                cell.setCellValue(cellNumber);
            }
        }
        System.out.println("over");

        FileOutputStream fileOutputStream = new FileOutputStream(PATH + "用戶信息表2007BigDataS.xlsx");
        workbook.write(fileOutputStream);
        fileOutputStream.close();


        long end = System.currentTimeMillis();
        System.out.println((double) (end - begin) / 1000);//6.39s
    }
}

2.3、導(dǎo)入excel

導(dǎo)入操作,即將 excel 中的數(shù)據(jù)采用java工具庫將其解析出來,進(jìn)而將 excel 數(shù)據(jù)寫入數(shù)據(jù)庫!

同樣,在 poi 工具庫中,導(dǎo)入 api 也分三種方式,與上面的導(dǎo)出一一對應(yīng)!

2.3.1、HSSF方式導(dǎo)入
public class ExcelRead2003Test {

    public static String PATH = "/Users/hello/Desktop/";

    public static void main(String[] args) throws Exception {
        //獲取文件流
        FileInputStream inputStream = new FileInputStream(PATH + "用戶信息表BigData.xls");

        //1.創(chuàng)建工作簿,使用excel能操作的這邊都看看操作
        Workbook workbook = new HSSFWorkbook(inputStream);
        //2.得到表
        Sheet sheet = workbook.getSheetAt(0);
        //3.得到行
        Row row = sheet.getRow(0);
        //4.得到列
        Cell cell = row.getCell(0);
        getValue(cell);
        inputStream.close();
    }

    public static void getValue(Cell cell){
        //匹配類型數(shù)據(jù)
        if (cell != null) {
            CellType cellType = cell.getCellType();
            String cellValue = "";
            switch (cellType) {
                case STRING: //字符串
                    System.out.print("[String類型]");
                    cellValue = cell.getStringCellValue();
                    break;
                case BOOLEAN: //布爾類型
                    System.out.print("[boolean類型]");
                    cellValue = String.valueOf(cell.getBooleanCellValue());
                    break;
                case BLANK: //空
                    System.out.print("[BLANK類型]");
                    break;
                case NUMERIC: //數(shù)字(日期、普通數(shù)字)
                    System.out.print("[NUMERIC類型]");
                    if (HSSFDateUtil.isCellDateFormatted(cell)) { //日期
                        System.out.print("[日期]");
                        Date date = cell.getDateCellValue();
                        cellValue = new DateTime(date).toString("yyyy-MM-dd");
                    } else {
                        //不是日期格式,防止數(shù)字過長
                        System.out.print("[轉(zhuǎn)換為字符串輸出]");
                        cell.setCellType(CellType.STRING);
                        cellValue = cell.toString();
                    }
                    break;
                case ERROR:
                    System.out.print("[數(shù)據(jù)類型錯誤]");
                    break;
            }
            System.out.println(cellValue);
        }
    }
}

2.3.2、XSSF方式導(dǎo)入
public class ExcelRead2007Test {

    public static String PATH = "/Users/hello/Desktop/";

    public static void main(String[] args) throws Exception {
        //獲取文件流
        FileInputStream inputStream = new FileInputStream(PATH + "用戶信息表2007BigData.xlsx");

        //1.創(chuàng)建工作簿,使用excel能操作的這邊都看看操作
        Workbook workbook = new XSSFWorkbook(inputStream);
        //2.得到表
        Sheet sheet = workbook.getSheetAt(0);
        //3.得到行
        Row row = sheet.getRow(0);
        //4.得到列
        Cell cell = row.getCell(0);
        getValue(cell);
        inputStream.close();
    }


    public static void getValue(Cell cell){
        //匹配類型數(shù)據(jù)
        if (cell != null) {
            CellType cellType = cell.getCellType();
            String cellValue = "";
            switch (cellType) {
                case STRING: //字符串
                    System.out.print("[String類型]");
                    cellValue = cell.getStringCellValue();
                    break;
                case BOOLEAN: //布爾類型
                    System.out.print("[boolean類型]");
                    cellValue = String.valueOf(cell.getBooleanCellValue());
                    break;
                case BLANK: //空
                    System.out.print("[BLANK類型]");
                    break;
                case NUMERIC: //數(shù)字(日期、普通數(shù)字)
                    System.out.print("[NUMERIC類型]");
                    if (HSSFDateUtil.isCellDateFormatted(cell)) { //日期
                        System.out.print("[日期]");
                        Date date = cell.getDateCellValue();
                        cellValue = new DateTime(date).toString("yyyy-MM-dd");
                    } else {
                        //不是日期格式,防止數(shù)字過長
                        System.out.print("[轉(zhuǎn)換為字符串輸出]");
                        cell.setCellType(CellType.STRING);
                        cellValue = cell.toString();
                    }
                    break;
                case ERROR:
                    System.out.print("[數(shù)據(jù)類型錯誤]");
                    break;
            }
            System.out.println(cellValue);
        }
    }
}
2.3.3、SXSSF方式導(dǎo)入
public class ExcelReadSXSSFTest {

    public static String PATH = "/Users/hello/Desktop/";

    public static void main(String[] args) throws Exception {
        //獲取文件流

        //1.創(chuàng)建工作簿,使用excel能操作的這邊都看看操作
        OPCPackage opcPackage = OPCPackage.open(PATH + "用戶信息表2007BigData.xlsx");
        XSSFReader xssfReader = new XSSFReader(opcPackage);
        StylesTable stylesTable = xssfReader.getStylesTable();
        ReadOnlySharedStringsTable sharedStringsTable = new ReadOnlySharedStringsTable(opcPackage);
        // 創(chuàng)建XMLReader,設(shè)置ContentHandler
        XMLReader xmlReader = SAXHelper.newXMLReader();
        xmlReader.setContentHandler(new XSSFSheetXMLHandler(stylesTable, sharedStringsTable, new SimpleSheetContentsHandler(), false));
        // 解析每個Sheet數(shù)據(jù)
        Iterator<InputStream> sheetsData = xssfReader.getSheetsData();
        while (sheetsData.hasNext()) {
            try (InputStream inputStream = sheetsData.next();) {
                xmlReader.parse(new InputSource(inputStream));
            }
        }
    }

    /**
     * 內(nèi)容處理器
     */

    public static class SimpleSheetContentsHandler implements XSSFSheetXMLHandler.SheetContentsHandler {

        protected List<String> row;

        /**
         * A row with the (zero based) row number has started
         *
         * @param rowNum
         */

        @Override
        public void startRow(int rowNum) {
            row = new ArrayList<>();
        }

        /**
         * A row with the (zero based) row number has ended
         *
         * @param rowNum
         */

        @Override
        public void endRow(int rowNum) {
            if (row.isEmpty()) {
                return;
            }
            // 處理數(shù)據(jù)
            System.out.println(row.stream().collect(Collectors.joining("   ")));
        }

        /**
         * A cell, with the given formatted value (may be null),
         * and possibly a comment (may be null), was encountered
         *
         * @param cellReference
         * @param formattedValue
         * @param comment
         */

        @Override
        public void cell(String cellReference, String formattedValue, XSSFComment comment) {
            row.add(formattedValue);
        }

        /**
         * A header or footer has been encountered
         *
         * @param text
         * @param isHeader
         * @param tagName
         */

        @Override
        public void headerFooter(String text, boolean isHeader, String tagName) {
        }
    }

}

三、easypoi

以前的以前,有個大佬程序員,跳到一家公司之后就和業(yè)務(wù)人員聊上了,這些業(yè)務(wù)員對excel報表有著許許多多的要求,比如想要一個報表,他的表頭是一個多行表頭,過幾天之后,他想要給這些表頭添加樣式,比如關(guān)鍵的數(shù)據(jù)標(biāo)紅,再過幾天,他想要再末尾添加一條合計的數(shù)據(jù),等等!

起初還好,都是copy、copy,之后發(fā)現(xiàn)系統(tǒng)中出現(xiàn)大量的重復(fù)代碼,于是有一天真的忍受不了了,采用注解搞定來搞定這些定制化成程度高的邏輯,將公共化抽離出來,于是誕生了 easypoi!

easypoi 的底層也是基于 apache poi 進(jìn)行深度開發(fā)的,它主要的特點就是將更多重復(fù)的工作,全部簡單化,避免編寫重復(fù)的代碼!

下面,我們就一起來了解一下這款高大上的開源工具:easypoi

3.1、首先添加依賴包

<dependencies>
    <dependency>
        <groupId>cn.afterturn</groupId>
        <artifactId>easypoi-base</artifactId>
        <version>4.1.0</version>
    </dependency>
    <dependency>
        <groupId>cn.afterturn</groupId>
        <artifactId>easypoi-web</artifactId>
        <version>4.1.0</version>
    </dependency>
    <dependency>
        <groupId>cn.afterturn</groupId>
        <artifactId>easypoi-annotation</artifactId>
        <version>4.1.0</version>
    </dependency>
</dependencies>

3.2、采用注解導(dǎo)出導(dǎo)入

easypoi 最大的亮點就是基于注解實體類來導(dǎo)出、導(dǎo)入excel,使用起來非常簡單!

首先,我們創(chuàng)建一個實體類UserEntity,其中@Excel注解表示導(dǎo)出文件的頭部信息。

public class UserEntity {

    @Excel(name = "姓名")
    private String name;

    @Excel(name = "年齡")
    private int age;

    @Excel(name = "操作時間",format="yyyy-MM-dd HH:mm:ss", width = 20.0)
    private Date time;
 
 //set、get省略
}

接著,我們來編寫導(dǎo)出服務(wù)!

public static void main(String[] args) throws Exception {
    List<UserEntity> dataList = new ArrayList<>();
    for (int i = 0; i < 10; i++) {
        UserEntity userEntity = new UserEntity();
        userEntity.setName("張三" + i);
        userEntity.setAge(20 + i);
        userEntity.setTime(new Date(System.currentTimeMillis() + i));
        dataList.add(userEntity);
    }
    //生成excel文檔
    Workbook workbook = ExcelExportUtil.exportExcel(new ExportParams("用戶","用戶信息"),
            UserEntity.classdataList);
    FileOutputStream fos = new FileOutputStream("/Users/hello/Documents/easypoi-user1.xls");
    workbook.write(fos);
    fos.close();
}

導(dǎo)出的文件預(yù)覽如下:

對應(yīng)的導(dǎo)入操作,也很簡單,源碼如下:

public static void main(String[] args) {
    ImportParams params = new ImportParams();
    params.setTitleRows(1);
    params.setHeadRows(1);
    long start = new Date().getTime();
    List<StudentEntity> list = ExcelImportUtil.importExcel(new File("/Users/hello/Documents/easypoi-user1.xls"),
            UserEntity.classparams);
    System.out.println(new Date().getTime() - start);
    System.out.println(JSONArray.toJSONString(list));
}

運(yùn)行程序,輸出結(jié)果如下:

[{"age":20,"name":"張三0","time":1616919493000},{"age":21,"name":"張三1","time":1616919493000},{"age":22,"name":"張三2","time":1616919493000},{"age":23,"name":"張三3","time":1616919493000},{"age":24,"name":"張三4","time":1616919493000},{"age":25,"name":"張三5","time":1616919493000},{"age":26,"name":"張三6","time":1616919493000},{"age":27,"name":"張三7","time":1616919493000},{"age":28,"name":"張三8","time":1616919493000},{"age":29,"name":"張三9","time":1616919493000}]

3.3、自定義數(shù)據(jù)結(jié)構(gòu)導(dǎo)出導(dǎo)入

easypoi 同樣也支持自定義數(shù)據(jù)結(jié)構(gòu)導(dǎo)出導(dǎo)入excel。

  • 自定義數(shù)據(jù)導(dǎo)出 excel
public static void main(String[] args) throws Exception {
    //封裝表頭
    List<ExcelExportEntity> entityList = new ArrayList<ExcelExportEntity>();
    entityList.add(new ExcelExportEntity("姓名""name"));
    entityList.add(new ExcelExportEntity("年齡""age"));
    ExcelExportEntity entityTime = new ExcelExportEntity("操作時間""time");
    entityTime.setFormat("yyyy-MM-dd HH:mm:ss");
    entityTime.setWidth(20.0);
    entityList.add(entityTime);
    //封裝數(shù)據(jù)體
    List<Map<String, Object>> dataList = new ArrayList<>();
    for (int i = 0; i < 10; i++) {
        Map<String, Object> userEntityMap = new HashMap<>();
        userEntityMap.put("name""張三" + i);
        userEntityMap.put("age"20 + i);
        userEntityMap.put("time"new Date(System.currentTimeMillis() + i));
        dataList.add(userEntityMap);
    }
    //生成excel文檔
    Workbook workbook = ExcelExportUtil.exportExcel(new ExportParams("學(xué)生","用戶信息"), entityList, dataList);
    FileOutputStream fos = new FileOutputStream("/Users/panzhi/Documents/easypoi-user2.xls");
    workbook.write(fos);
    fos.close();
}
  • 導(dǎo)入 excel
public static void main(String[] args) {
    ImportParams params = new ImportParams();
    params.setTitleRows(1);
    params.setHeadRows(1);
    long start = new Date().getTime();
    List<Map<String, Object>> list = ExcelImportUtil.importExcel(new File("/Users/panzhi/Documents/easypoi-user2.xls"),
            Map.classparams);
    System.out.println(new Date().getTime() - start);
    System.out.println(JSONArray.toJSONString(list));
}

更多的 api 操作可以訪問 Easypoi - 接口文檔

四、easyexcel

easyexcel 是阿里巴巴開源的一款 excel 解析工具,底層邏輯也是基于 apache poi 進(jìn)行二次開發(fā)的。不同的是,再讀寫數(shù)據(jù)的時候,采用 sax 模式一行一行解析,在并發(fā)量很大的情況下,依然能穩(wěn)定運(yùn)行!

下面,我們就一起來了解一下這款新起之秀!

4.1、首先添加依賴包

<dependencies>
    <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>easyexcel</artifactId>
        <version>2.2.6</version>
    </dependency>
 <!--常用工具庫-->
    <dependency>
        <groupId>com.google.guava</groupId>
        <artifactId>guava</artifactId>
        <version>29.0-jre</version>
    </dependency>
</dependencies>

4.2、采用注解導(dǎo)出導(dǎo)入

easyexcel 同樣也支持采用注解方式進(jìn)行導(dǎo)出、導(dǎo)入!

首先,我們創(chuàng)建一個實體類UserEntity,其中@ExcelProperty注解表示導(dǎo)出文件的頭部信息。

public class UserEntity {

    @ExcelProperty(value = "姓名")
    private String name;

    @ExcelProperty(value = "年齡")
    private int age;

    @DateTimeFormat("yyyy-MM-dd HH:mm:ss")
    @ExcelProperty(value = "操作時間")
    private Date time;
    
    //set、get省略
}

接著,我們來編寫導(dǎo)出服務(wù)!

public static void main(String[] args) {
    List<UserEntity> dataList = new ArrayList<>();
    for (int i = 0; i < 10; i++) {
        UserEntity userEntity = new UserEntity();
        userEntity.setName("張三" + i);
        userEntity.setAge(20 + i);
        userEntity.setTime(new Date(System.currentTimeMillis() + i));
        dataList.add(userEntity);
    }
    EasyExcel.write("/Users/hello/Documents/easyexcel-user1.xls", UserEntity.class).sheet("用戶信息").doWrite(dataList);
}

導(dǎo)出的文件預(yù)覽如下:

對應(yīng)的導(dǎo)入操作,也很簡單,源碼如下:

public static void main(String[] args) {
    String filePath = "/Users/hello/Documents/easyexcel-user1.xls";
    List<DemoData> list = EasyExcel.read(filePath).head(UserEntity.class).sheet().doReadSync();
    System.out.println(JSONArray.toJSONString(list));
}

運(yùn)行程序,輸出結(jié)果如下:

[{"age":20,"name":"張三0","time":1616920360000},{"age":21,"name":"張三1","time":1616920360000},{"age":22,"name":"張三2","time":1616920360000},{"age":23,"name":"張三3","time":1616920360000},{"age":24,"name":"張三4","time":1616920360000},{"age":25,"name":"張三5","time":1616920360000},{"age":26,"name":"張三6","time":1616920360000},{"age":27,"name":"張三7","time":1616920360000},{"age":28,"name":"張三8","time":1616920360000},{"age":29,"name":"張三9","time":1616920360000}]

4.3、自定義數(shù)據(jù)結(jié)構(gòu)導(dǎo)出導(dǎo)入

easyexcel 同樣也支持自定義數(shù)據(jù)結(jié)構(gòu)導(dǎo)出導(dǎo)入excel。

  • 自定義數(shù)據(jù)導(dǎo)出 excel
public static void main(String[] args) {
    //表頭
    List<List<String>> headList = new ArrayList<>();
    headList.add(Lists.newArrayList("姓名"));
    headList.add(Lists.newArrayList("年齡"));
    headList.add(Lists.newArrayList("操作時間"));

    //數(shù)據(jù)體
    List<List<Object>> dataList = new ArrayList<>();
    for (int i = 0; i < 10; i++) {
        List<Object> data = new ArrayList<>();
        data.add("張三" + i);
        data.add(20 + i);
        data.add(new Date(System.currentTimeMillis() + i));
        dataList.add(data);
    }
    EasyExcel.write("/Users/hello/Documents/easyexcel-user2.xls").head(headList).sheet("用戶信息").doWrite(dataList);
}
  • 導(dǎo)入 excel
public static void main(String[] args) {
    String filePath = "/Users/panzhi/Documents/easyexcel-user2.xls";
    UserDataListener userDataListener = new UserDataListener();
    EasyExcel.read(filePath, userDataListener).sheet().doRead();
    System.out.println("表頭:" + JSONArray.toJSONString(userDataListener.getHeadList()));
    System.out.println("數(shù)據(jù)體:" + JSONArray.toJSONString(userDataListener.getDataList()));
}

運(yùn)行程序,輸出結(jié)果如下:

表頭:[{0:"姓名",1:"年齡",2:"操作時間"}]
數(shù)據(jù)體:[{0:"張三0",1:"20",2:"2021-03-28 16:31:39"},{0:"張三1",1:"21",2:"2021-03-28 16:31:39"},{0:"張三2",1:"22",2:"2021-03-28 16:31:39"},{0:"張三3",1:"23",2:"2021-03-28 16:31:39"},{0:"張三4",1:"24",2:"2021-03-28 16:31:39"},{0:"張三5",1:"25",2:"2021-03-28 16:31:39"},{0:"張三6",1:"26",2:"2021-03-28 16:31:39"},{0:"張三7",1:"27",2:"2021-03-28 16:31:39"},{0:"張三8",1:"28",2:"2021-03-28 16:31:39"},{0:"張三9",1:"29",2:"2021-03-28 16:31:39"}]

更多的 api 操作可以訪問 easyexcel - 接口文檔

五、小結(jié)

總體來說,easypoi和easyexcel都是基于apache poi進(jìn)行二次開發(fā)的。

不同點在于:

1、easypoi 在讀寫數(shù)據(jù)的時候,優(yōu)先是先將數(shù)據(jù)寫入內(nèi)存,優(yōu)點是讀寫性能非常高,但是當(dāng)數(shù)據(jù)量很大的時候,會出現(xiàn)oom,當(dāng)然它也提供了 sax 模式的讀寫方式,需要調(diào)用特定的方法實現(xiàn)。

2、easyexcel 基于sax模式進(jìn)行讀寫數(shù)據(jù),不會出現(xiàn)oom情況,程序有過高并發(fā)場景的驗證,因此程序運(yùn)行比較穩(wěn)定,相對于 easypoi 來說,讀寫性能稍慢!

easypoi 與 easyexcel 還有一點區(qū)別在于,easypoi 對定制化的導(dǎo)出支持非常的豐富,如果當(dāng)前的項目需求,并發(fā)量不大、數(shù)據(jù)量也不大,但是需要導(dǎo)出 excel 的文件樣式千差萬別,那么我推薦你用 easypoi;反之,使用 easyexcel !

六、參考

1、apache poi - 接口文檔

2、easypoi - 接口文檔

3、easyexcel - 接口文檔


瀏覽 103
點贊
評論
收藏
分享

手機(jī)掃一掃分享

分享
舉報
評論
圖片
表情
推薦
點贊
評論
收藏
分享

手機(jī)掃一掃分享

分享
舉報

感谢您访问我们的网站,您可能还对以下资源感兴趣:

国产秋霞理论久久久电影-婷婷色九月综合激情丁香-欧美在线观看乱妇视频-精品国avA久久久久久久-国产乱码精品一区二区三区亚洲人-欧美熟妇一区二区三区蜜桃视频 大香蕉伊人婷婷| 日本高潮视频| 成人高清无码在线| 国产夫妻自拍av| 日韩精品高清中文| 中文字幕亞洲高清手機版第617 | 亚洲一区AV| 可以免费看的AV| 午夜视频网| 国产欧美毛片| 爱爱网址| 毛片毛片毛片毛片| 99日韩| 久久国产一区| 豆花视频在线播放| 久久嫩草精品| 玩弄大乳乳妾高潮乳喷视频| 大肉大捧一进一出两腿| 四虎精品一区二区| 丁香五月婷婷久久| 88在线无码精品秘入口九色| 性爱xxxxx| 波多野吉衣视频| 黄色大片在线免费观看| 人妻精品一区二区| 国产迷奸视频| 日日摸夜夜| 国产区在线视频| 中国人妻HDbute熟睡| 亚洲欧美日韩在线| 欧美视频在线观看免费| 日韩欧美午夜成人无码| 一级片成人| 日韩动态视频| 国产区在线视频| 五月天堂婷婷| www一个人免费观看视频www| 黄网站免费观看| 亲子乱AⅤ一区二区三区| 无套内射学生妹去看片| 亚洲AV无码精品久久一区二区| 国内无码自拍| 亚洲少妇性爱视频| 自拍一区在线观看| 国产亚洲欧美一区二区| 另类AV| 国产在线秘麻豆精品观看| 九九操逼| 黄色毛片一级| 色色播| 国产美女福利| 亚洲影音先锋在线| 国产激情视频在线播放| 爆操表妹| 日韩成人三级片| 欧美视频在线观看免费| 熟女人妻在线视频| AV无码在线观看| 欧美手机在线视频| 日韩欧美人妻| 风流老熟女一区二区三区| 国产内射久久| 日韩三级视频在线观看| 日本a片免费| 欧美男女日逼视频| 久久夜色精品噜噜亚洲AV| 欧美日韩成人在线| 暖暖爱视频免费| 在线免费观看黄色电影| 日韩小视频在线观看| 成人激情视频网| 裸体美女视频欧美18| 五月香婷婷| 中文无码字幕视频| 五月丁香成人| 国产一级a毛片| 日韩高清无码一区二区| 搡中国东北老女人视频| 91精品丝袜久久久久久久久粉嫩 | 日韩在线国产| 霸道总裁雷总各种姿势白浆爱情岛论坛 | 国产91嫩草乱婬A片2蜜臀| 东京热精品| 久久免费播放视频| 国产精品无毛五区六区| 99九九视频| 婷婷国产成人精品| 日韩超清无码| 在线色片| 伊人大香蕉在线网| 亚洲性爱在线观看| 日韩午夜电影| 国产一级二级三级久久久| 日韩免费三级片| 国产丨熟女丨国产熟女视频| 国产激情无码免费| 一区二区高清无码| 黑人精品欧美一区二区蜜桃| 成人在线无码| 日韩成人无码免费视频| a无码视频在线观看| 激情播播网| 草久av| 久久婷婷国产| 无码电影免费观看| 啪啪啪免费网站| 亚洲天堂高清| 久久久国产精品人人片| 久久综合久久鬼| 在线观看中文字幕无码| 黄色在线免费看| 国产毛片777777| 五月天青青草超碰免费公开在线观看 | h片网站在线观看| 人妻电影亚洲av| 亚洲婷婷丁香| 91视频在线看| A片在线免费观看| 中文字幕免费av| 亚洲性爱一区| 蜜桃视频在线观看视频| 超碰观看| 激情网站在线观看| 拍拍AV| 91无码人妻一区二区成人AⅤ| 日本在线不卡视频| 无码日韩精品一区二区免费96| www.狠狠爱| 亚洲色婷| 超碰91在线观看| 日韩欧美人妻无码精品| 伊人色色综合| 在线观看av网站中文字幕| 成人大战香蕉最新视频| 国产免费观看av| 看免费黄色录像| 欧美不卡在线视频| 久久婷婷亚洲| 亚洲丝袜av| 91一区二区| 中文字幕第27页| 另类老妇极品BBWBBw| 色色免费黄色视频| 亚洲人妻无码在线| 国产精品人人| 91人妻成人精品一区二区| 久久久精品免费视频| 亚洲三级视频在线播出| 夜夜骑免费视频| 亚洲视频国产| 熟妇操逼视频| 性爱视频免费网站| 亚洲欧美视频一区| 中文字幕在线观看日本| 这里只有精品在线观看| 久久精品99| 九九久热| 国产午夜精品一区二区三区四区 | 午夜在线视频| 国产乱伦中文字幕| 亚洲日韩在线视频观看| 国产欧美一区二区人妻喷水| 亚洲永久免费| 精品亚洲无码视频| 黄色操逼片| 欧美三级片在线观看| 日本黄色录像| 国产一级黄色A片| www.黄色电影| 超碰一区| 中文字幕av久久爽Av| 五月天色综合| 97人人干人人| 天堂成人网站| 91大神免费在线观看| 波多野结衣无码AV在线| 日本高清无码在线| 国产精品日韩高清北条麻衣| 亚洲av黄| 亚洲AV成人片色在线观看麻豆| 久久精品成人电影| 国产棈品久久久久久久久久九秃 | 国产精品无码永久免费A片| 亚洲高清无码视频在线| sm视频网站| 最新AV在线播放| 中文字幕性| 高清无码视频免费版本在线观看 | 日韩AAA| 一区二区三区无码在线| 午夜福利成人网站| 日中国老太太B| 91成人免费在线观看| 亚洲色逼图片| 91在线视频播放| 国产乱国产乱300精品| 91蝌蚪在线观看| 三级国产在线| 国产午夜精品一区二区| 无码无码无码| 图片区小说区区亚洲五月| 豆花成人社区,视频| 亚洲免费黄片| 久久婷婷五月综合伊人| 黄色一级视频在线观看| 三级片AAAA| A级片黄色片| 伊人激情网| A片在线观看视频| 日韩特级毛片| 毛片操逼视频| 99成人网站| 黄片网站免费在线观看| 精品秘一区性综合三区| 一本久道综合| 精品人妻一二三区| 日韩一级黄色视频| AV在线直播| 91资源在线观看| 二区| 91福利影院| 国产,亚洲91| 日本久久高清| 亚洲韩国中文字幕| 人操人人| 婷婷五月丁香五月| 亚洲中文无码视频| 欧美成人高清| 成人免费视频18| 亚洲456| 摸BBB搡BBB搡BBBB| 国产一级AV免费观看| 影音先锋91久久网| 四季AV一区二区凹凸懂色桃花| 欧美99在线| 欧美成人精品一区二区| 亚洲在线免费| 在线你懂的| 国产粉嫩小泬白浆18p| 国产系列精品AV| 亚洲视频天天射| 日韩一级免费观看| 国产视频97| 午夜视频无码| 伊人在线综合| 91视频熟女| 韩无码| 日屄在线观看| 一级做a视频| 欧美成人性色欲影院| 国产欧美视频在线| 无码婬片A片AAA毛片艳谭| 成人h网站在线观看| 黄网免费在线观看| 狼友精品| 久久婷婷激情| 精品人无码一区二区三区下载| 女孩自慰在线观看| 亚洲国产成人久久| AV中文在线观看| 午夜成人福利片| 91资源在线观看| 翔田千里一区二区| 国产中文字幕视频| 爱干视频| 免费看a| 日韩aaa| 午夜亚洲AV永久无码精品蜜芽 | 91大神shunv| 午夜男女福利| 国产三级片网址| 丁香激情视频| 一级黄视频| 操啊操| 一本一道vs波多野结衣| 成人免费网站在线观看| 午夜福利资源| 中文字幕在线观看1| 久久久久久久久久久久高清毛片一级| 欧美在线黄片| 视频一区在线观看| 天天看天天色| 最新三级网站| 国产精品久久久久久久久久| 操逼人妻| 色悠久久久| 婷婷五月在线| 国产主播专区| 嫩BBB槡BBBB槡BBBB撒尿| 日韩成人精品| 男人手机天堂| 五月天狠狠干| 3级片网站| 最近日本中文字幕中文翻译歌词 | 日韩黄色大片| 影音先锋久久久久AV综合网成人| 成人视频一区| 日韩一级无码| 91一起草高清资源| 午夜不卡视频| 91羞射短视频在线观看| 一级黄色视频免费观看| 黄片久久| 麻豆911精一区二区| 人人操人人摸人人看| 久久国产精品波多野结衣AV| 欧美AAA| 九九热在线精品| 五丁香在线观看AV| 影音先锋成人AV资源| 亚洲欧美在线观看视频| 久久精品片| JULIA超乳JULIA无码| 国产精品美女| 国产成人亚洲精品| 婷婷精品国产a久久综合| 大香蕉伊人影视| 色婷婷影音| 天堂a中文在线| 丁香婷婷五月基地| 中文字幕免费在线视频| 免费操逼网址| 露脸老熟女91集合| 黄片无码| 国产乱╳╳AⅤ毛片| 亚洲无码视频免费在线观看| 国产一区免费观看| 逼特逼视频在线| 天天干天天日天天操| 五月激情六月婷婷| 嫩草亚洲小泬久久夂| 日韩中字无码| 日韩久久电影| 日韩高清无码免费看| 国产学生妹| 青青操在线视频| 翔田千里中文字幕无码| 极品另类| 中文字幕无码Av在线| 91丨九色丨蝌蚪丨成人| 四季AV一区二区凹凸懂色桃花 | 狠狠色噜噜狠狠狠888米奇视频| 性爱视频免费网站| 久婷婷| 丁香六月综合| 香蕉国产在线视频| 日韩欧美精品一区二区| 2025中文在线观看最好看的电影 | 日本不卡视频在线| 国产成人三级在线| 99热er| 国产操屄网| 精品人妻二区三区蜜桃| 亚洲福利在线观看| 久久精品秘一区二区三免费| 久久婷婷视频| 日韩高清成人无码| 亚洲中文字| 欧美日韩网| 乱伦三级| 国产高清AV在线| 国产区精品| 亚洲精品少妇| 黄色小视频在线免费观看| 黄网91| 成人无码一区二区三区| 一道本视频在线| 日韩欧美视频在线| 西西www444无码免费视频| 国产超碰| 成人在线91| 欧美视频a| 精品久久久久久AV2025| 手机看片1024国产| 老妇性BBWBBWBBWBBW| 在线国产中文字幕| 最新国产激情视频| 狠狠色色| 青草久在线| 久久av片| 中国黄色一级A片| 丝袜足交在线| 人妖黃色一級A片| 天天摸夜夜操| 欧美日韩大屌| 亚洲综合免费观看高清| 狼友在线播放| 国产白丝在线| 欧美国产精品一区二区三区| 色五月丁香婷婷| 男人V天堂| 免费一区二区三区四区| 六月婷婷网| 午夜福利干B在线免费小视频| 囯产精品久久久久久久久免费无码| 91搞一搞| 骚妇大战黑人15P| а√在线中文网新版地址在线| 俺来也俺也啪WWW色| 亚洲经典免费视频| av一级片| 夜间福利视频| 中文字幕三级片| 日韩精品成人片| 欧美毛视频| 成人小说一区二区三区| 日韩电影免费在线观看| 免费三级网站| 久久人视频| 日韩欧美网站| 成人久久综合| 免费无码视频一区二区| 国产亚洲精品码| 欧美特黄AAA| 正在播放国产精品| 国产欧美综合一区二区| 操逼A片| 婷婷狠狠操| 婷婷五月在线播放| 久久这里只有精品99| 高清无码网站在线观看| 五月天丁香社区| 亚洲无码一区在线| 麻豆天美传媒AV果冻传媒| 日韩欧美v| 久久久久久久久久久亚洲| www.yw尤物| 日韩久久精品视频| 国产免费AV片在线无码免费看| 国产AV小电影| 五月丁香婷婷开心| av水果派| 色人天堂| 夜夜爱爱| 欧美精品第一页| 亚洲日韩在线视频播放| 婷婷色av| 人人操人人干人人看| 俺来了俺去了www色官网| 国产乱妇乱子伦视频免费观看让女人| 国产精品无| 日本人妻中文字幕| 国产午夜精品一区二区| 精品逼| 自拍偷拍无码| 一区二区三区久久久久| 六月婷婷深爱| 在线免费观看黄色小视频| 日韩精品中文字幕在线观看| 丁香婷婷色五月| 国产精品成人免费久久黄AV片 | 婷婷五月中文| 龙泽美曦土豪| 99在线观看精品视频| 一本一道久久综合| 91爱爱| 亚洲中文字幕网站| 99热一区二区三区| 亚洲成人av| 黄片99| 久久久久久久久久久国产精品| 99国产在线视频| 裸体美女视频欧美18| 欧美操逼大全| 欧美日韩激情| 中文无码专区| 亚洲成人77777| 强奸乱伦制服丝袜| 日本高清视频免费观看| 四色五月婷婷| 日韩人妻一区二区| 欧美一级视频在线观看| 激情五月天色色| 欧美大香蕉视频| 欧美日韩一级A片| 国产做受| 日本中文字幕在线观看| 青娱乐国产在线视频| 黄色视频免费观看国产| 日韩不卡| 欧美天堂在线观看| 乱伦内射视频| 久久黄色视| 国产精品TV| 亚洲一级毛| 老熟女--91XX| 欧美日韩国产在线| 亚洲无码字幕| 2019天天操| 日韩黄色中文字幕| 国产精品国产精品国产专区不片| 日本狠狠干| 97人妻人人操| 欧美视频免费| 精品成人一区二区三区| 噜噜色小说| 成人操B视频在线观看| 久久久999久久久999精神| 搡老熟女-91Porn| 色色网站视频| 亚洲v| 免费操| 国产口爆视频| 337P大胆粉嫩噜噜噜| 91无码在线观看| 天天艹| 精品视频在线看| 国产亚洲视频在线观看视频| 国产精品美女毛片真酒店| 国产男女视频| 三级影片在线观看性| 在线无码| 天天添天天操| 少妇bbb搡bbbb搡bbbb| 国产3p露脸普通话对白| 免费无码视频| 欧美三级欧美一级| 上海熟妇搡BBBB搡BBBB| 91视频网站入口| 无码精品一区二区三区在线| 国产区精品| 毛片成人网| 91区视频| 2016av天堂网| 成人精品在线视频| 人人澡人人澡人人| 国产亚洲欧美视频| 日逼导航| 神马午夜福利| 精品少妇人妻| 无码视频在线看| 成人欧美一区二区三区在线观看| 久久久精品电影91| 大香蕉91| 亚洲精品久久久久久久久豆丁网| 五月六月丁香| 开心五月婷| 中国老熟妇| 亚洲国产精品久久人人爱| 亚洲电影AV| 久久综合大香蕉| 日韩在线视频网| 大香蕉精品| 国产精品无码成人AV在线播放| 91麻豆精品无码| 午夜一本道| 欧美丝袜脚交xxxxBH| 成人视频免费网站| 青青色在线观看| 免费爱爱网站| 国外成人在线视频老鸭窝| 亚洲AV成人无码| 97超碰资源| 色色色欧美| 成人网站大香蕉| 久草视频在线免费| 亚洲高清无码免费| 91乱子伦国产乱子伦海的味道| 男人日女人视频| 久久波多野结衣一区二区| av一二三区| 人人操AV在线| 五月天激情婷婷| 色色国产| 亚洲.欧美.丝袜.中文.综合| 91热爆TS人妖系列| 色小哥| 一级黄色AV片| 一本道无码在线观看| 俄女兵一级婬片A片| 久久久久久久麻豆| 欧美成人无码一区二区三区| 竹菊av一区二区三区四区五区| 国产视频一区二区在线| 热久久免费视频| 一本道中文字幕| 午夜福利久久| 久久国语| 中文字幕无码影院| 亚洲天堂在线视频播放| 一本大道东京热av无码| 无码理论片| 无码黄页| 国产成人精品久久| 囯产精品久久| 丁香色婷婷五月天| 特黄视频| 爱干视频| 在线观看亚洲天堂| 一区二区视频在线| 中文字幕国产AV| 国语操逼| 91无码人妻精品一区二区三区四| 广西少妇BBwBBwBBw| 性A免费在线播放| 五月婷婷在线观看| 黄片免费观看视频| 四川BBB搡BBB搡多人乱| 亚洲AV无一区二区三区久久 | 99精品在线播放| 在线观看中文字幕视频| 在线中文字幕在线观看| 欧美三级在线播放| 黄片视频免费在线观看| 日韩一二三区| 91禁樱桃在线| 91久久久久国产一区二区| 91视频你懂的| 黄色免费无码| 亚洲欧美在线视频免费| 天天草夜夜操| 一本色道久久88综合无码 | 午夜国产在线视频| 老司机午夜电影| 日韩在线欧美在线| 日韩成人精品中文字幕| 南京搡BBBB搡BBBB| www.91爱爱,com| av一级片| 精品视频国产| 日韩特级毛片| 麻豆传媒电影| av无码免费观看| 日本一级婬片免费放| 手机看片亚洲| ThePorn精品无码| 国产香蕉AV| av色图| 久久婷婷影院| 日韩三级在线免费观看| 五月丁香欧美性爱| 大香蕉现在视频中心一| 伊人大香蕉网| 色妹子综合| 99内射| 在线天堂视频| 神马午夜久久| seseav| 午夜不卡视频| 无码狠狠躁久久久久久久91| 日逼精品| 国产日产亚洲精品| JULIA超乳JULIA无码| 亚洲性爱小说| 国产男女视频| yw在线播放| 久久公开视频| 久草视频福利在线| 豆花视频在线看| 福利一区在线观看| 亚洲xx网| 国产无码高清在线观看| 国产日韩二区| 无码国产+白浆| 美女av网站| 日本无码视频在线| 美女黄视频网站| 人妻少妇综合| 国产女人与禽zOz0性| 国产乱子伦| 秘蜜桃色一区二区三区在线观看 | 亚洲午夜福利一区二区三区| 亚洲wwwwww| 久草资源视频| 六月丁香久久| 麻豆毛片| 狼友视频免费| 精品日韩在线视频| 四川揉BBB搡BBB| 伊人久久大香蕉视频| 日本中文字幕乱伦| 午夜激情福利| AV观看免费| 日本少妇BBw| 色播网址| 99久久久精品久久久久久| 在线免费观看黄色网址| 免费污视频在线观看| 夜间福利视频| BBw日本熟妇BBwHD| 人操人操人操| 免费操逼电影| 亚洲在线第一页| 俺去俺来也www色官网黑人| 爆乳一区二区三区| 超碰97免费在线| 亚州天堂| 精品国产精品| 日韩精品成人无码免费| 天天操一操| av久草| 免费看一级一级人妻片| 97干干| 精品在线播放| 久久777| 日本三级片在线动| 午夜免费播放观看在线视频| 成人黄色性视频| 成人午夜视频精品一区| 精品国产午夜福利| 在线成人毛片| 亚洲精品白浆高清久久久久久| 玖玖爱这里只有精品| AV在线小说| 中文字幕在线观看亚洲| 日韩网站在线| 欧美日韩亚洲中文字幕| 水蜜桃一区二区| 丁香婷婷社区| 丁香五月激情啪啪啪| 国产成人免费| 人人综合网| 国产一级a毛一级做a爱| 欧美爱爱免费看| 精品久久电影| 色天使青青草| 欧美日韩不卡视频| 一区二区不卡| 中文无码一区二区三区四区| 五月婷婷在线播放| av天堂小说网| 亚洲av高清无码| 人妖黃色一級A片| 嫩小槡BBBB槡BBBB槡免费-百度 | 亚洲中文字幕不卡| 五月天婷婷乱伦| 亚洲A片一区二区三区电影网| 黄色片在线播放| 免费三级片网址| 毛片在线视频| 亚洲精品一区二区三区四区高清 | 三级在线视频| 欧美高清一区二区| av无码在线播放| 2024无码| 久久综合电影| 精品人妻在线| 在线视频第一页| 国产香蕉视频在线播放| 51妺妺嘿嘿午夜成人A片| 在线看v片| 97超碰大香蕉| 亚洲欧美激情小说另类| 免费黄色网页| 婷婷综合av| 成人免费无码婬片在线观看免费| 无码欧精品亚洲日韩一区| 麻豆免费视频| 亚洲少妇人妻| 精品一二三区| 国产无码小视频| 四虎国产精品成人久久| 黄片99| 国产高清黑人| 91探花国产综合在线精品| 99热999| 天堂视频在线| 国产人妖TS重口系列网站观看| 午夜AV大片| 人成视频在线| 久艹在线视频| 操逼视频国产| 天天草天天撸| 中文字幕视频一区| 日韩免费黄色电影| 日韩在线视频第一页| 超碰c| 成年片| 欧美日韩AV| 久久久福利视频| 天天干天天操天天爽| 国产香蕉视频| 中文字幕+乱码+中文字幕电视剧| 精品国产AV鲁一鲁一区| 天天干女人| 精产国品一区二区三区| 黄工厂精品视频在线播| 人人色视频| 影音先锋蜜桃| 天天看天天干| 天天做夜夜操| 日韩无码福利| 久久精品一区| 一本一道伊人99久久综| 久久免费9| 精品国产99久久久久久www| 黄页网址在线观看| 国产精品嫩草久久久久yw193| 亚洲天堂一区| 激情深爱五月天| 成年片免费观看网站免费观看,亚洲+欧... | 成人无码小电影| 日本黄色免费| 九九精品99| 成人免费无码激情AV片| 日韩三级片网站| 伊人大综合| 国产精品人人| 乳揉みま痴汉电车羽月希免费观看 | 中文字幕有码视频| 国产成人免费做爰视频| 影音先锋91| 女侠吕四娘第二部| 成人福利网| 国产一级a一片成人AV| 久9久9| 欧美综合网| 欧美八区| 天天干人人干| 人人看人人摸人人插| 人人摸人人搞| 亚洲精品一二三区| 午夜综合网| 日本一区二区视频在线观看| 西西444WWW大胆无| 中文AV字幕| 小明看台湾成人永久免费视频网站| 婷婷丁香五月花| 无码高清在线观看| 亚洲一区二区三| 日韩三级av| 一本之道高清数码大全| 西西444大胆无码视频| 一区二区三区免费看| 中文字幕高清无码在线| 精品网站| 老司机AV91| 伊人久操| 国产日韩视频| 国产三级在线免费观看| 99视频+国产日韩欧美| 亚洲天堂人妻少妇| 在线无码一区| 丰满人妻一区二区三区精品高 | 欧美sesese| AAA精品| 成人精品永久免费视频99久久精品| 91在线看| 日韩二区三区| 爱爱成人视频| 97精品欧美91久久久久久久| 亚洲免费观看在线观看| 菊花插综合网| 青青草原亚洲| 老欧性老太色HD大全| 无码爱爱视频| 欧美a片在线观看| 操操操无码| 99色天堂| 亚洲日韩一区二区三区四区| 手机在线小视频| 青青操在线观看| 日本免费a片| 亚洲无码人妻| 亚洲电影AV| 五月天一区二区三区| 国产AV黄| 老熟女--91XX| 中文无码Av| 国产操老女人| 夜夜骚AV一二三区无码| 天天插天天插| 成人网站在线观看视频| 五月天婷婷基地| 欧美三级美国一级| 久久私拍| 精品视频在线观看免费| 韩国无码一区二区| 日韩午夜在线观看| 成人做爱黄片| 亚洲精品另类| 色福利网| 精品无码一区二区人妻久久蜜桃 | 六月丁香五月天| 免费中文视频| 亚洲久久久| 91精品久久久久久| 亚洲日本在线观看| 欧美狠狠操| 大荫蒂HD大荫蒂视频| 国产理论电影在线观看| 黄色片一级| 操bbbb| 暖暖无码| 操操操影院| 福利视频二区| 亚洲成人网在线| 开心深爱激情网| 蜜桃视频一区二区三区四区使用方法 | 自拍视频一区| 欧美热热| 艹逼在线观看| 无码无卡| 精品无码人妻一区二区三区 | 无码不卡在线播放| 天天色天天色| 足交在线播放| 成人丁香五月天| 欧美亚洲在线观看| 欧美性综合网|