日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

JAVA连接Excel最好用的开源项目EasyExcel,官方使用文档及.jar包下载

發(fā)布時(shí)間:2023/12/15 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 JAVA连接Excel最好用的开源项目EasyExcel,官方使用文档及.jar包下载 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

EasyExcel是一個(gè)基于Java的簡(jiǎn)單、省內(nèi)存的讀寫Excel的開(kāi)源項(xiàng)目。在盡可能節(jié)約內(nèi)存的情況下支持讀寫百M(fèi)的Excel。
github地址:https://github.com/alibaba/easyexcel
開(kāi)源項(xiàng)目不容易,如果覺(jué)得本項(xiàng)目對(duì)您的工作還是有幫助的話,請(qǐng)?jiān)趲兔υ趃ithub star點(diǎn)個(gè)★Star。

我使用后,覺(jué)得阿里確實(shí)很用心,使用簡(jiǎn)單,速度還快,這個(gè)?可以給。
如果以下內(nèi)容還是看不懂,給他們點(diǎn)個(gè)小星星,然后我教你,嘻嘻。

jar下載地址:https://share.weiyun.com/5ADw1oz

讀excel的DEMO文檔

package com.alibaba.easyexcel.test.demo.read;import java.io.File; import java.util.List; import java.util.Map;import org.junit.Ignore; import org.junit.Test; import org.slf4j.Logger; import org.slf4j.LoggerFactory;import com.alibaba.easyexcel.test.util.TestFileUtil; import com.alibaba.excel.EasyExcel; import com.alibaba.excel.ExcelReader; import com.alibaba.excel.annotation.ExcelProperty; import com.alibaba.excel.annotation.format.DateTimeFormat; import com.alibaba.excel.annotation.format.NumberFormat; import com.alibaba.excel.converters.DefaultConverterLoader; import com.alibaba.excel.enums.CellExtraTypeEnum; import com.alibaba.excel.read.metadata.ReadSheet; import com.alibaba.fastjson.JSON;/*** 讀的常見(jiàn)寫法** @author Jiaju Zhuang*/ @Ignore public class ReadTest {private static final Logger LOGGER = LoggerFactory.getLogger(ReadTest.class);/*** 最簡(jiǎn)單的讀* <p>* 1. 創(chuàng)建excel對(duì)應(yīng)的實(shí)體對(duì)象 參照{(diào)@link DemoData}* <p>* 2. 由于默認(rèn)一行行的讀取excel,所以需要?jiǎng)?chuàng)建excel一行一行的回調(diào)監(jiān)聽(tīng)器,參照{(diào)@link DemoDataListener}* <p>* 3. 直接讀即可*/@Testpublic void simpleRead() {// 有個(gè)很重要的點(diǎn) DemoDataListener 不能被spring管理,要每次讀取excel都要new,然后里面用到spring可以構(gòu)造方法傳進(jìn)去// 寫法1:String fileName = TestFileUtil.getPath() + "demo" + File.separator + "demo.xlsx";// 這里 需要指定讀用哪個(gè)class去讀,然后讀取第一個(gè)sheet 文件流會(huì)自動(dòng)關(guān)閉EasyExcel.read(fileName, DemoData.class, new DemoDataListener()).sheet().doRead();// 寫法2:fileName = TestFileUtil.getPath() + "demo" + File.separator + "demo.xlsx";ExcelReader excelReader = EasyExcel.read(fileName, DemoData.class, new DemoDataListener()).build();ReadSheet readSheet = EasyExcel.readSheet(0).build();excelReader.read(readSheet);// 這里千萬(wàn)別忘記關(guān)閉,讀的時(shí)候會(huì)創(chuàng)建臨時(shí)文件,到時(shí)磁盤會(huì)崩的excelReader.finish();}/*** 指定列的下標(biāo)或者列名** <p>* 1. 創(chuàng)建excel對(duì)應(yīng)的實(shí)體對(duì)象,并使用{@link ExcelProperty}注解. 參照{(diào)@link IndexOrNameData}* <p>* 2. 由于默認(rèn)一行行的讀取excel,所以需要?jiǎng)?chuàng)建excel一行一行的回調(diào)監(jiān)聽(tīng)器,參照{(diào)@link IndexOrNameDataListener}* <p>* 3. 直接讀即可*/@Testpublic void indexOrNameRead() {String fileName = TestFileUtil.getPath() + "demo" + File.separator + "demo.xlsx";// 這里默認(rèn)讀取第一個(gè)sheetEasyExcel.read(fileName, IndexOrNameData.class, new IndexOrNameDataListener()).sheet().doRead();}/*** 讀多個(gè)或者全部sheet,這里注意一個(gè)sheet不能讀取多次,多次讀取需要重新讀取文件* <p>* 1. 創(chuàng)建excel對(duì)應(yīng)的實(shí)體對(duì)象 參照{(diào)@link DemoData}* <p>* 2. 由于默認(rèn)一行行的讀取excel,所以需要?jiǎng)?chuàng)建excel一行一行的回調(diào)監(jiān)聽(tīng)器,參照{(diào)@link DemoDataListener}* <p>* 3. 直接讀即可*/@Testpublic void repeatedRead() {String fileName = TestFileUtil.getPath() + "demo" + File.separator + "demo.xlsx";// 讀取全部sheet// 這里需要注意 DemoDataListener的doAfterAllAnalysed 會(huì)在每個(gè)sheet讀取完畢后調(diào)用一次。然后所有sheet都會(huì)往同一個(gè)DemoDataListener里面寫EasyExcel.read(fileName, DemoData.class, new DemoDataListener()).doReadAll();// 讀取部分sheetfileName = TestFileUtil.getPath() + "demo" + File.separator + "demo.xlsx";ExcelReader excelReader = EasyExcel.read(fileName).build();// 這里為了簡(jiǎn)單 所以注冊(cè)了 同樣的head 和Listener 自己使用功能必須不同的ListenerReadSheet readSheet1 =EasyExcel.readSheet(0).head(DemoData.class).registerReadListener(new DemoDataListener()).build();ReadSheet readSheet2 =EasyExcel.readSheet(1).head(DemoData.class).registerReadListener(new DemoDataListener()).build();// 這里注意 一定要把sheet1 sheet2 一起傳進(jìn)去,不然有個(gè)問(wèn)題就是03版的excel 會(huì)讀取多次,浪費(fèi)性能excelReader.read(readSheet1, readSheet2);// 這里千萬(wàn)別忘記關(guān)閉,讀的時(shí)候會(huì)創(chuàng)建臨時(shí)文件,到時(shí)磁盤會(huì)崩的excelReader.finish();}/*** 日期、數(shù)字或者自定義格式轉(zhuǎn)換* <p>* 默認(rèn)讀的轉(zhuǎn)換器{@link DefaultConverterLoader#loadDefaultReadConverter()}* <p>* 1. 創(chuàng)建excel對(duì)應(yīng)的實(shí)體對(duì)象 參照{(diào)@link ConverterData}.里面可以使用注解{@link DateTimeFormat}、{@link NumberFormat}或者自定義注解* <p>* 2. 由于默認(rèn)一行行的讀取excel,所以需要?jiǎng)?chuàng)建excel一行一行的回調(diào)監(jiān)聽(tīng)器,參照{(diào)@link ConverterDataListener}* <p>* 3. 直接讀即可*/@Testpublic void converterRead() {String fileName = TestFileUtil.getPath() + "demo" + File.separator + "demo.xlsx";// 這里 需要指定讀用哪個(gè)class去讀,然后讀取第一個(gè)sheetEasyExcel.read(fileName, ConverterData.class, new ConverterDataListener())// 這里注意 我們也可以registerConverter來(lái)指定自定義轉(zhuǎn)換器, 但是這個(gè)轉(zhuǎn)換變成全局了, 所有java為string,excel為string的都會(huì)用這個(gè)轉(zhuǎn)換器。// 如果就想單個(gè)字段使用請(qǐng)使用@ExcelProperty 指定converter// .registerConverter(new CustomStringStringConverter())// 讀取sheet.sheet().doRead();}/*** 多行頭** <p>* 1. 創(chuàng)建excel對(duì)應(yīng)的實(shí)體對(duì)象 參照{(diào)@link DemoData}* <p>* 2. 由于默認(rèn)一行行的讀取excel,所以需要?jiǎng)?chuàng)建excel一行一行的回調(diào)監(jiān)聽(tīng)器,參照{(diào)@link DemoDataListener}* <p>* 3. 設(shè)置headRowNumber參數(shù),然后讀。 這里要注意headRowNumber如果不指定, 會(huì)根據(jù)你傳入的class的{@link ExcelProperty#value()}里面的表頭的數(shù)量來(lái)決定行數(shù),* 如果不傳入class則默認(rèn)為1.當(dāng)然你指定了headRowNumber不管是否傳入class都是以你傳入的為準(zhǔn)。*/@Testpublic void complexHeaderRead() {String fileName = TestFileUtil.getPath() + "demo" + File.separator + "demo.xlsx";// 這里 需要指定讀用哪個(gè)class去讀,然后讀取第一個(gè)sheetEasyExcel.read(fileName, DemoData.class, new DemoDataListener()).sheet()// 這里可以設(shè)置1,因?yàn)轭^就是一行。如果多行頭,可以設(shè)置其他值。不傳入也可以,因?yàn)槟J(rèn)會(huì)根據(jù)DemoData 來(lái)解析,他沒(méi)有指定頭,也就是默認(rèn)1行.headRowNumber(1).doRead();}/*** 讀取表頭數(shù)據(jù)** <p>* 1. 創(chuàng)建excel對(duì)應(yīng)的實(shí)體對(duì)象 參照{(diào)@link DemoData}* <p>* 2. 由于默認(rèn)一行行的讀取excel,所以需要?jiǎng)?chuàng)建excel一行一行的回調(diào)監(jiān)聽(tīng)器,參照{(diào)@link DemoHeadDataListener}* <p>* 3. 直接讀即可*/@Testpublic void headerRead() {String fileName = TestFileUtil.getPath() + "demo" + File.separator + "demo.xlsx";// 這里 需要指定讀用哪個(gè)class去讀,然后讀取第一個(gè)sheetEasyExcel.read(fileName, DemoData.class, new DemoHeadDataListener()).sheet().doRead();}/*** 額外信息(批注、超鏈接、合并單元格信息讀取)* <p>* 由于是流式讀取,沒(méi)法在讀取到單元格數(shù)據(jù)的時(shí)候直接讀取到額外信息,所以只能最后通知哪些單元格有哪些額外信息** <p>* 1. 創(chuàng)建excel對(duì)應(yīng)的實(shí)體對(duì)象 參照{(diào)@link DemoExtraData}* <p>* 2. 由于默認(rèn)異步讀取excel,所以需要?jiǎng)?chuàng)建excel一行一行的回調(diào)監(jiān)聽(tīng)器,參照{(diào)@link DemoExtraListener}* <p>* 3. 直接讀即可** @since 2.2.0-beat1*/@Testpublic void extraRead() {String fileName = TestFileUtil.getPath() + "demo" + File.separator + "extra.xlsx";// 這里 需要指定讀用哪個(gè)class去讀,然后讀取第一個(gè)sheetEasyExcel.read(fileName, DemoExtraData.class, new DemoExtraListener())// 需要讀取批注 默認(rèn)不讀取.extraRead(CellExtraTypeEnum.COMMENT)// 需要讀取超鏈接 默認(rèn)不讀取.extraRead(CellExtraTypeEnum.HYPERLINK)// 需要讀取合并單元格信息 默認(rèn)不讀取.extraRead(CellExtraTypeEnum.MERGE).sheet().doRead();}/*** 讀取公式和單元格類型** <p>* 1. 創(chuàng)建excel對(duì)應(yīng)的實(shí)體對(duì)象 參照{(diào)@link CellDataReadDemoData}* <p>* 2. 由于默認(rèn)一行行的讀取excel,所以需要?jiǎng)?chuàng)建excel一行一行的回調(diào)監(jiān)聽(tīng)器,參照{(diào)@link DemoHeadDataListener}* <p>* 3. 直接讀即可** @since 2.2.0-beat1*/@Testpublic void cellDataRead() {String fileName = TestFileUtil.getPath() + "demo" + File.separator + "cellDataDemo.xlsx";// 這里 需要指定讀用哪個(gè)class去讀,然后讀取第一個(gè)sheetEasyExcel.read(fileName, CellDataReadDemoData.class, new CellDataDemoHeadDataListener()).sheet().doRead();}/*** 數(shù)據(jù)轉(zhuǎn)換等異常處理** <p>* 1. 創(chuàng)建excel對(duì)應(yīng)的實(shí)體對(duì)象 參照{(diào)@link ExceptionDemoData}* <p>* 2. 由于默認(rèn)一行行的讀取excel,所以需要?jiǎng)?chuàng)建excel一行一行的回調(diào)監(jiān)聽(tīng)器,參照{(diào)@link DemoExceptionListener}* <p>* 3. 直接讀即可*/@Testpublic void exceptionRead() {String fileName = TestFileUtil.getPath() + "demo" + File.separator + "demo.xlsx";// 這里 需要指定讀用哪個(gè)class去讀,然后讀取第一個(gè)sheetEasyExcel.read(fileName, ExceptionDemoData.class, new DemoExceptionListener()).sheet().doRead();}/*** 同步的返回,不推薦使用,如果數(shù)據(jù)量大會(huì)把數(shù)據(jù)放到內(nèi)存里面*/@Testpublic void synchronousRead() {String fileName = TestFileUtil.getPath() + "demo" + File.separator + "demo.xlsx";// 這里 需要指定讀用哪個(gè)class去讀,然后讀取第一個(gè)sheet 同步讀取會(huì)自動(dòng)finishList<DemoData> list = EasyExcel.read(fileName).head(DemoData.class).sheet().doReadSync();for (DemoData data : list) {LOGGER.info("讀取到數(shù)據(jù):{}", JSON.toJSONString(data));}// 這里 也可以不指定class,返回一個(gè)list,然后讀取第一個(gè)sheet 同步讀取會(huì)自動(dòng)finishList<Map<Integer, String>> listMap = EasyExcel.read(fileName).sheet().doReadSync();for (Map<Integer, String> data : listMap) {// 返回每條數(shù)據(jù)的鍵值對(duì) 表示所在的列 和所在列的值LOGGER.info("讀取到數(shù)據(jù):{}", JSON.toJSONString(data));}}/*** 不創(chuàng)建對(duì)象的讀*/@Testpublic void noModelRead() {String fileName = TestFileUtil.getPath() + "demo" + File.separator + "demo.xlsx";// 這里 只要,然后讀取第一個(gè)sheet 同步讀取會(huì)自動(dòng)finishEasyExcel.read(fileName, new NoModelDataListener()).sheet().doRead();} }

寫excel的DEMO文檔

package com.alibaba.easyexcel.test.demo.write;import java.io.File; import java.io.InputStream; import java.net.URL; import java.util.ArrayList; import java.util.Date; import java.util.HashSet; import java.util.List; import java.util.Set;import org.apache.poi.ss.usermodel.FillPatternType; import org.apache.poi.ss.usermodel.IndexedColors; import org.apache.poi.xssf.streaming.SXSSFSheet; import org.junit.Ignore; import org.junit.Test;import com.alibaba.easyexcel.test.util.TestFileUtil; import com.alibaba.excel.EasyExcel; import com.alibaba.excel.ExcelWriter; import com.alibaba.excel.annotation.ExcelProperty; import com.alibaba.excel.annotation.format.DateTimeFormat; import com.alibaba.excel.annotation.format.NumberFormat; import com.alibaba.excel.annotation.write.style.ColumnWidth; import com.alibaba.excel.annotation.write.style.ContentRowHeight; import com.alibaba.excel.annotation.write.style.HeadRowHeight; import com.alibaba.excel.util.FileUtils; import com.alibaba.excel.write.merge.LoopMergeStrategy; import com.alibaba.excel.write.metadata.WriteSheet; import com.alibaba.excel.write.metadata.WriteTable; import com.alibaba.excel.write.metadata.style.WriteCellStyle; import com.alibaba.excel.write.metadata.style.WriteFont; import com.alibaba.excel.write.style.HorizontalCellStyleStrategy; import com.alibaba.excel.write.style.column.LongestMatchColumnWidthStyleStrategy;/*** 寫的常見(jiàn)寫法** @author Jiaju Zhuang*/ @Ignore public class WriteTest {/*** 最簡(jiǎn)單的寫* <p>* 1. 創(chuàng)建excel對(duì)應(yīng)的實(shí)體對(duì)象 參照{(diào)@link DemoData}* <p>* 2. 直接寫即可*/@Testpublic void simpleWrite() {// 寫法1String fileName = TestFileUtil.getPath() + "simpleWrite" + System.currentTimeMillis() + ".xlsx";// 這里 需要指定寫用哪個(gè)class去寫,然后寫到第一個(gè)sheet,名字為模板 然后文件流會(huì)自動(dòng)關(guān)閉// 如果這里想使用03 則 傳入excelType參數(shù)即可EasyExcel.write(fileName, DemoData.class).sheet("模板").doWrite(data());// 寫法2fileName = TestFileUtil.getPath() + "simpleWrite" + System.currentTimeMillis() + ".xlsx";// 這里 需要指定寫用哪個(gè)class去寫ExcelWriter excelWriter = EasyExcel.write(fileName, DemoData.class).build();WriteSheet writeSheet = EasyExcel.writerSheet("模板").build();excelWriter.write(data(), writeSheet);/// 千萬(wàn)別忘記finish 會(huì)幫忙關(guān)閉流excelWriter.finish();}/*** 根據(jù)參數(shù)只導(dǎo)出指定列* <p>* 1. 創(chuàng)建excel對(duì)應(yīng)的實(shí)體對(duì)象 參照{(diào)@link DemoData}* <p>* 2. 根據(jù)自己或者排除自己需要的列* <p>* 3. 直接寫即可** @since 2.1.1*/@Testpublic void excludeOrIncludeWrite() {String fileName = TestFileUtil.getPath() + "excludeOrIncludeWrite" + System.currentTimeMillis() + ".xlsx";// 根據(jù)用戶傳入字段 假設(shè)我們要忽略 dateSet<String> excludeColumnFiledNames = new HashSet<String>();excludeColumnFiledNames.add("date");// 這里 需要指定寫用哪個(gè)class去寫,然后寫到第一個(gè)sheet,名字為模板 然后文件流會(huì)自動(dòng)關(guān)閉EasyExcel.write(fileName, DemoData.class).excludeColumnFiledNames(excludeColumnFiledNames).sheet("模板").doWrite(data());fileName = TestFileUtil.getPath() + "excludeOrIncludeWrite" + System.currentTimeMillis() + ".xlsx";// 根據(jù)用戶傳入字段 假設(shè)我們只要導(dǎo)出 dateSet<String> includeColumnFiledNames = new HashSet<String>();includeColumnFiledNames.add("date");// 這里 需要指定寫用哪個(gè)class去寫,然后寫到第一個(gè)sheet,名字為模板 然后文件流會(huì)自動(dòng)關(guān)閉EasyExcel.write(fileName, DemoData.class).includeColumnFiledNames(includeColumnFiledNames).sheet("模板").doWrite(data());}/*** 指定寫入的列* <p>* 1. 創(chuàng)建excel對(duì)應(yīng)的實(shí)體對(duì)象 參照{(diào)@link IndexData}* <p>* 2. 使用{@link ExcelProperty}注解指定寫入的列* <p>* 3. 直接寫即可*/@Testpublic void indexWrite() {String fileName = TestFileUtil.getPath() + "indexWrite" + System.currentTimeMillis() + ".xlsx";// 這里 需要指定寫用哪個(gè)class去寫,然后寫到第一個(gè)sheet,名字為模板 然后文件流會(huì)自動(dòng)關(guān)閉EasyExcel.write(fileName, IndexData.class).sheet("模板").doWrite(data());}/*** 復(fù)雜頭寫入* <p>* 1. 創(chuàng)建excel對(duì)應(yīng)的實(shí)體對(duì)象 參照{(diào)@link ComplexHeadData}* <p>* 2. 使用{@link ExcelProperty}注解指定復(fù)雜的頭* <p>* 3. 直接寫即可*/@Testpublic void complexHeadWrite() {String fileName = TestFileUtil.getPath() + "complexHeadWrite" + System.currentTimeMillis() + ".xlsx";// 這里 需要指定寫用哪個(gè)class去寫,然后寫到第一個(gè)sheet,名字為模板 然后文件流會(huì)自動(dòng)關(guān)閉EasyExcel.write(fileName, ComplexHeadData.class).sheet("模板").doWrite(data());}/*** 重復(fù)多次寫入* <p>* 1. 創(chuàng)建excel對(duì)應(yīng)的實(shí)體對(duì)象 參照{(diào)@link ComplexHeadData}* <p>* 2. 使用{@link ExcelProperty}注解指定復(fù)雜的頭* <p>* 3. 直接調(diào)用二次寫入即可*/@Testpublic void repeatedWrite() {// 方法1 如果寫到同一個(gè)sheetString fileName = TestFileUtil.getPath() + "repeatedWrite" + System.currentTimeMillis() + ".xlsx";// 這里 需要指定寫用哪個(gè)class去寫ExcelWriter excelWriter = EasyExcel.write(fileName, DemoData.class).build();// 這里注意 如果同一個(gè)sheet只要?jiǎng)?chuàng)建一次WriteSheet writeSheet = EasyExcel.writerSheet("模板").build();// 去調(diào)用寫入,這里我調(diào)用了五次,實(shí)際使用時(shí)根據(jù)數(shù)據(jù)庫(kù)分頁(yè)的總的頁(yè)數(shù)來(lái)for (int i = 0; i < 5; i++) {// 分頁(yè)去數(shù)據(jù)庫(kù)查詢數(shù)據(jù) 這里可以去數(shù)據(jù)庫(kù)查詢每一頁(yè)的數(shù)據(jù)List<DemoData> data = data();excelWriter.write(data, writeSheet);}/// 千萬(wàn)別忘記finish 會(huì)幫忙關(guān)閉流excelWriter.finish();// 方法2 如果寫到不同的sheet 同一個(gè)對(duì)象fileName = TestFileUtil.getPath() + "repeatedWrite" + System.currentTimeMillis() + ".xlsx";// 這里 指定文件excelWriter = EasyExcel.write(fileName, DemoData.class).build();// 去調(diào)用寫入,這里我調(diào)用了五次,實(shí)際使用時(shí)根據(jù)數(shù)據(jù)庫(kù)分頁(yè)的總的頁(yè)數(shù)來(lái)。這里最終會(huì)寫到5個(gè)sheet里面for (int i = 0; i < 5; i++) {// 每次都要?jiǎng)?chuàng)建writeSheet 這里注意必須指定sheetNo 而且sheetName必須不一樣writeSheet = EasyExcel.writerSheet(i, "模板" + i).build();// 分頁(yè)去數(shù)據(jù)庫(kù)查詢數(shù)據(jù) 這里可以去數(shù)據(jù)庫(kù)查詢每一頁(yè)的數(shù)據(jù)List<DemoData> data = data();excelWriter.write(data, writeSheet);}/// 千萬(wàn)別忘記finish 會(huì)幫忙關(guān)閉流excelWriter.finish();// 方法3 如果寫到不同的sheet 不同的對(duì)象fileName = TestFileUtil.getPath() + "repeatedWrite" + System.currentTimeMillis() + ".xlsx";// 這里 指定文件excelWriter = EasyExcel.write(fileName).build();// 去調(diào)用寫入,這里我調(diào)用了五次,實(shí)際使用時(shí)根據(jù)數(shù)據(jù)庫(kù)分頁(yè)的總的頁(yè)數(shù)來(lái)。這里最終會(huì)寫到5個(gè)sheet里面for (int i = 0; i < 5; i++) {// 每次都要?jiǎng)?chuàng)建writeSheet 這里注意必須指定sheetNo 而且sheetName必須不一樣。這里注意DemoData.class 可以每次都變,我這里為了方便 所以用的同一個(gè)class 實(shí)際上可以一直變writeSheet = EasyExcel.writerSheet(i, "模板" + i).head(DemoData.class).build();// 分頁(yè)去數(shù)據(jù)庫(kù)查詢數(shù)據(jù) 這里可以去數(shù)據(jù)庫(kù)查詢每一頁(yè)的數(shù)據(jù)List<DemoData> data = data();excelWriter.write(data, writeSheet);}/// 千萬(wàn)別忘記finish 會(huì)幫忙關(guān)閉流excelWriter.finish();}/*** 日期、數(shù)字或者自定義格式轉(zhuǎn)換* <p>* 1. 創(chuàng)建excel對(duì)應(yīng)的實(shí)體對(duì)象 參照{(diào)@link ConverterData}* <p>* 2. 使用{@link ExcelProperty}配合使用注解{@link DateTimeFormat}、{@link NumberFormat}或者自定義注解* <p>* 3. 直接寫即可*/@Testpublic void converterWrite() {String fileName = TestFileUtil.getPath() + "converterWrite" + System.currentTimeMillis() + ".xlsx";// 這里 需要指定寫用哪個(gè)class去寫,然后寫到第一個(gè)sheet,名字為模板 然后文件流會(huì)自動(dòng)關(guān)閉EasyExcel.write(fileName, ConverterData.class).sheet("模板").doWrite(data());}/*** 圖片導(dǎo)出* <p>* 1. 創(chuàng)建excel對(duì)應(yīng)的實(shí)體對(duì)象 參照{(diào)@link ImageData}* <p>* 2. 直接寫即可*/@Testpublic void imageWrite() throws Exception {String fileName = TestFileUtil.getPath() + "imageWrite" + System.currentTimeMillis() + ".xlsx";// 如果使用流 記得關(guān)閉InputStream inputStream = null;try {List<ImageData> list = new ArrayList<ImageData>();ImageData imageData = new ImageData();list.add(imageData);String imagePath = TestFileUtil.getPath() + "converter" + File.separator + "img.jpg";// 放入五種類型的圖片 實(shí)際使用只要選一種即可imageData.setByteArray(FileUtils.readFileToByteArray(new File(imagePath)));imageData.setFile(new File(imagePath));imageData.setString(imagePath);inputStream = FileUtils.openInputStream(new File(imagePath));imageData.setInputStream(inputStream);imageData.setUrl(new URL("https://raw.githubusercontent.com/alibaba/easyexcel/master/src/test/resources/converter/img.jpg"));EasyExcel.write(fileName, ImageData.class).sheet().doWrite(list);} finally {if (inputStream != null) {inputStream.close();}}}/*** 根據(jù)模板寫入* <p>* 1. 創(chuàng)建excel對(duì)應(yīng)的實(shí)體對(duì)象 參照{(diào)@link IndexData}* <p>* 2. 使用{@link ExcelProperty}注解指定寫入的列* <p>* 3. 使用withTemplate 寫取模板* <p>* 4. 直接寫即可*/@Testpublic void templateWrite() {String templateFileName = TestFileUtil.getPath() + "demo" + File.separator + "demo.xlsx";String fileName = TestFileUtil.getPath() + "templateWrite" + System.currentTimeMillis() + ".xlsx";// 這里 需要指定寫用哪個(gè)class去寫,然后寫到第一個(gè)sheet,名字為模板 然后文件流會(huì)自動(dòng)關(guān)閉EasyExcel.write(fileName, DemoData.class).withTemplate(templateFileName).sheet().doWrite(data());}/*** 列寬、行高* <p>* 1. 創(chuàng)建excel對(duì)應(yīng)的實(shí)體對(duì)象 參照{(diào)@link WidthAndHeightData}* <p>* 2. 使用注解{@link ColumnWidth}、{@link HeadRowHeight}、{@link ContentRowHeight}指定寬度或高度* <p>* 3. 直接寫即可*/@Testpublic void widthAndHeightWrite() {String fileName = TestFileUtil.getPath() + "widthAndHeightWrite" + System.currentTimeMillis() + ".xlsx";// 這里 需要指定寫用哪個(gè)class去寫,然后寫到第一個(gè)sheet,名字為模板 然后文件流會(huì)自動(dòng)關(guān)閉EasyExcel.write(fileName, WidthAndHeightData.class).sheet("模板").doWrite(data());}/*** 注解形式自定義樣式* <p>* 1. 創(chuàng)建excel對(duì)應(yīng)的實(shí)體對(duì)象 參照{(diào)@link DemoStyleData}* <p>* 3. 直接寫即可** @since 2.2.0-beta1*/@Testpublic void annotationStyleWrite() {String fileName = TestFileUtil.getPath() + "annotationStyleWrite" + System.currentTimeMillis() + ".xlsx";// 這里 需要指定寫用哪個(gè)class去寫,然后寫到第一個(gè)sheet,名字為模板 然后文件流會(huì)自動(dòng)關(guān)閉EasyExcel.write(fileName, DemoStyleData.class).sheet("模板").doWrite(data());}/*** 攔截器形式自定義樣式* <p>* 1. 創(chuàng)建excel對(duì)應(yīng)的實(shí)體對(duì)象 參照{(diào)@link DemoData}* <p>* 2. 創(chuàng)建一個(gè)style策略 并注冊(cè)* <p>* 3. 直接寫即可*/@Testpublic void handlerStyleWrite() {String fileName = TestFileUtil.getPath() + "handlerStyleWrite" + System.currentTimeMillis() + ".xlsx";// 頭的策略WriteCellStyle headWriteCellStyle = new WriteCellStyle();// 背景設(shè)置為紅色headWriteCellStyle.setFillForegroundColor(IndexedColors.RED.getIndex());WriteFont headWriteFont = new WriteFont();headWriteFont.setFontHeightInPoints((short)20);headWriteCellStyle.setWriteFont(headWriteFont);// 內(nèi)容的策略WriteCellStyle contentWriteCellStyle = new WriteCellStyle();// 這里需要指定 FillPatternType 為FillPatternType.SOLID_FOREGROUND 不然無(wú)法顯示背景顏色.頭默認(rèn)了 FillPatternType所以可以不指定contentWriteCellStyle.setFillPatternType(FillPatternType.SOLID_FOREGROUND);// 背景綠色contentWriteCellStyle.setFillForegroundColor(IndexedColors.GREEN.getIndex());WriteFont contentWriteFont = new WriteFont();// 字體大小contentWriteFont.setFontHeightInPoints((short)20);contentWriteCellStyle.setWriteFont(contentWriteFont);// 這個(gè)策略是 頭是頭的樣式 內(nèi)容是內(nèi)容的樣式 其他的策略可以自己實(shí)現(xiàn)HorizontalCellStyleStrategy horizontalCellStyleStrategy =new HorizontalCellStyleStrategy(headWriteCellStyle, contentWriteCellStyle);// 這里 需要指定寫用哪個(gè)class去寫,然后寫到第一個(gè)sheet,名字為模板 然后文件流會(huì)自動(dòng)關(guān)閉EasyExcel.write(fileName, DemoData.class).registerWriteHandler(horizontalCellStyleStrategy).sheet("模板").doWrite(data());}/*** 合并單元格* <p>* 1. 創(chuàng)建excel對(duì)應(yīng)的實(shí)體對(duì)象 參照{(diào)@link DemoData} {@link DemoMergeData}* <p>* 2. 創(chuàng)建一個(gè)merge策略 并注冊(cè)* <p>* 3. 直接寫即可** @since 2.2.0-beta1*/@Testpublic void mergeWrite() {// 方法1 注解String fileName = TestFileUtil.getPath() + "mergeWrite" + System.currentTimeMillis() + ".xlsx";// 在DemoStyleData里面加上ContentLoopMerge注解// 這里 需要指定寫用哪個(gè)class去寫,然后寫到第一個(gè)sheet,名字為模板 然后文件流會(huì)自動(dòng)關(guān)閉EasyExcel.write(fileName, DemoMergeData.class).sheet("模板").doWrite(data());// 方法2 自定義合并單元格策略fileName = TestFileUtil.getPath() + "mergeWrite" + System.currentTimeMillis() + ".xlsx";// 每隔2行會(huì)合并 把eachColumn 設(shè)置成 3 也就是我們數(shù)據(jù)的長(zhǎng)度,所以就第一列會(huì)合并。當(dāng)然其他合并策略也可以自己寫LoopMergeStrategy loopMergeStrategy = new LoopMergeStrategy(2, 0);// 這里 需要指定寫用哪個(gè)class去寫,然后寫到第一個(gè)sheet,名字為模板 然后文件流會(huì)自動(dòng)關(guān)閉EasyExcel.write(fileName, DemoData.class).registerWriteHandler(loopMergeStrategy).sheet("模板").doWrite(data());}/*** 使用table去寫入* <p>* 1. 創(chuàng)建excel對(duì)應(yīng)的實(shí)體對(duì)象 參照{(diào)@link DemoData}* <p>* 2. 然后寫入table即可*/@Testpublic void tableWrite() {String fileName = TestFileUtil.getPath() + "tableWrite" + System.currentTimeMillis() + ".xlsx";// 這里直接寫多個(gè)table的案例了,如果只有一個(gè) 也可以直一行代碼搞定,參照其他案例// 這里 需要指定寫用哪個(gè)class去寫ExcelWriter excelWriter = EasyExcel.write(fileName, DemoData.class).build();// 把sheet設(shè)置為不需要頭 不然會(huì)輸出sheet的頭 這樣看起來(lái)第一個(gè)table 就有2個(gè)頭了WriteSheet writeSheet = EasyExcel.writerSheet("模板").needHead(Boolean.FALSE).build();// 這里必須指定需要頭,table 會(huì)繼承sheet的配置,sheet配置了不需要,table 默認(rèn)也是不需要WriteTable writeTable0 = EasyExcel.writerTable(0).needHead(Boolean.TRUE).build();WriteTable writeTable1 = EasyExcel.writerTable(1).needHead(Boolean.TRUE).build();// 第一次寫入會(huì)創(chuàng)建頭excelWriter.write(data(), writeSheet, writeTable0);// 第二次寫如也會(huì)創(chuàng)建頭,然后在第一次的后面寫入數(shù)據(jù)excelWriter.write(data(), writeSheet, writeTable1);/// 千萬(wàn)別忘記finish 會(huì)幫忙關(guān)閉流excelWriter.finish();}/*** 動(dòng)態(tài)頭,實(shí)時(shí)生成頭寫入* <p>* 思路是這樣子的,先創(chuàng)建List<String>頭格式的sheet僅僅寫入頭,然后通過(guò)table 不寫入頭的方式 去寫入數(shù)據(jù)** <p>* 1. 創(chuàng)建excel對(duì)應(yīng)的實(shí)體對(duì)象 參照{(diào)@link DemoData}* <p>* 2. 然后寫入table即可*/@Testpublic void dynamicHeadWrite() {String fileName = TestFileUtil.getPath() + "dynamicHeadWrite" + System.currentTimeMillis() + ".xlsx";EasyExcel.write(fileName)// 這里放入動(dòng)態(tài)頭.head(head()).sheet("模板")// 當(dāng)然這里數(shù)據(jù)也可以用 List<List<String>> 去傳入.doWrite(data());}/*** 自動(dòng)列寬(不太精確)* <p>* 這個(gè)目前不是很好用,比如有數(shù)字就會(huì)導(dǎo)致?lián)Q行。而且長(zhǎng)度也不是剛好和實(shí)際長(zhǎng)度一致。 所以需要精確到剛好列寬的慎用。 當(dāng)然也可以自己參照* {@link LongestMatchColumnWidthStyleStrategy}重新實(shí)現(xiàn).* <p>* poi 自帶{@link SXSSFSheet#autoSizeColumn(int)} 對(duì)中文支持也不太好。目前沒(méi)找到很好的算法。 有的話可以推薦下。** <p>* 1. 創(chuàng)建excel對(duì)應(yīng)的實(shí)體對(duì)象 參照{(diào)@link LongestMatchColumnWidthData}* <p>* 2. 注冊(cè)策略{@link LongestMatchColumnWidthStyleStrategy}* <p>* 3. 直接寫即可*/@Testpublic void longestMatchColumnWidthWrite() {String fileName =TestFileUtil.getPath() + "longestMatchColumnWidthWrite" + System.currentTimeMillis() + ".xlsx";// 這里 需要指定寫用哪個(gè)class去寫,然后寫到第一個(gè)sheet,名字為模板 然后文件流會(huì)自動(dòng)關(guān)閉EasyExcel.write(fileName, LongestMatchColumnWidthData.class).registerWriteHandler(new LongestMatchColumnWidthStyleStrategy()).sheet("模板").doWrite(dataLong());}/*** 下拉,超鏈接等自定義攔截器(上面幾點(diǎn)都不符合但是要對(duì)單元格進(jìn)行操作的參照這個(gè))* <p>* demo這里實(shí)現(xiàn)2點(diǎn)。1. 對(duì)第一行第一列的頭超鏈接到:https://github.com/alibaba/easyexcel 2. 對(duì)第一列第一行和第二行的數(shù)據(jù)新增下拉框,顯示 測(cè)試1 測(cè)試2* <p>* 1. 創(chuàng)建excel對(duì)應(yīng)的實(shí)體對(duì)象 參照{(diào)@link DemoData}* <p>* 2. 注冊(cè)攔截器 {@link CustomCellWriteHandler} {@link CustomSheetWriteHandler}* <p>* 2. 直接寫即可*/@Testpublic void customHandlerWrite() {String fileName = TestFileUtil.getPath() + "customHandlerWrite" + System.currentTimeMillis() + ".xlsx";// 這里 需要指定寫用哪個(gè)class去寫,然后寫到第一個(gè)sheet,名字為模板 然后文件流會(huì)自動(dòng)關(guān)閉EasyExcel.write(fileName, DemoData.class).registerWriteHandler(new CustomSheetWriteHandler()).registerWriteHandler(new CustomCellWriteHandler()).sheet("模板").doWrite(data());}/*** 插入批注* <p>* 1. 創(chuàng)建excel對(duì)應(yīng)的實(shí)體對(duì)象 參照{(diào)@link DemoData}* <p>* 2. 注冊(cè)攔截器 {@link CommentWriteHandler}* <p>* 2. 直接寫即可*/@Testpublic void commentWrite() {String fileName = TestFileUtil.getPath() + "commentWrite" + System.currentTimeMillis() + ".xlsx";// 這里 需要指定寫用哪個(gè)class去寫,然后寫到第一個(gè)sheet,名字為模板 然后文件流會(huì)自動(dòng)關(guān)閉// 這里要注意inMemory 要設(shè)置為true,才能支持批注。目前沒(méi)有好的辦法解決 不在內(nèi)存處理批注。這個(gè)需要自己選擇。EasyExcel.write(fileName, DemoData.class).inMemory(Boolean.TRUE).registerWriteHandler(new CommentWriteHandler()).sheet("模板").doWrite(data());}/*** 可變標(biāo)題處理(包括標(biāo)題國(guó)際化等)* <p>* 簡(jiǎn)單的說(shuō)用List<List<String>>的標(biāo)題 但是還支持注解* <p>* 1. 創(chuàng)建excel對(duì)應(yīng)的實(shí)體對(duì)象 參照{(diào)@link ConverterData}* <p>* 2. 直接寫即可*/@Testpublic void variableTitleWrite() {// 寫法1String fileName = TestFileUtil.getPath() + "variableTitleWrite" + System.currentTimeMillis() + ".xlsx";// 這里 需要指定寫用哪個(gè)class去寫,然后寫到第一個(gè)sheet,名字為模板 然后文件流會(huì)自動(dòng)關(guān)閉EasyExcel.write(fileName, ConverterData.class).head(variableTitleHead()).sheet("模板").doWrite(data());}/*** 不創(chuàng)建對(duì)象的寫*/@Testpublic void noModelWrite() {// 寫法1String fileName = TestFileUtil.getPath() + "noModelWrite" + System.currentTimeMillis() + ".xlsx";// 這里 需要指定寫用哪個(gè)class去寫,然后寫到第一個(gè)sheet,名字為模板 然后文件流會(huì)自動(dòng)關(guān)閉EasyExcel.write(fileName).head(head()).sheet("模板").doWrite(dataList());}private List<LongestMatchColumnWidthData> dataLong() {List<LongestMatchColumnWidthData> list = new ArrayList<LongestMatchColumnWidthData>();for (int i = 0; i < 10; i++) {LongestMatchColumnWidthData data = new LongestMatchColumnWidthData();data.setString("測(cè)試很長(zhǎng)的字符串測(cè)試很長(zhǎng)的字符串測(cè)試很長(zhǎng)的字符串" + i);data.setDate(new Date());data.setDoubleData(1000000000000.0);list.add(data);}return list;}private List<List<String>> variableTitleHead() {List<List<String>> list = new ArrayList<List<String>>();List<String> head0 = new ArrayList<String>();head0.add("string" + System.currentTimeMillis());List<String> head1 = new ArrayList<String>();head1.add("number" + System.currentTimeMillis());List<String> head2 = new ArrayList<String>();head2.add("date" + System.currentTimeMillis());list.add(head0);list.add(head1);list.add(head2);return list;}private List<List<String>> head() {List<List<String>> list = new ArrayList<List<String>>();List<String> head0 = new ArrayList<String>();head0.add("字符串" + System.currentTimeMillis());List<String> head1 = new ArrayList<String>();head1.add("數(shù)字" + System.currentTimeMillis());List<String> head2 = new ArrayList<String>();head2.add("日期" + System.currentTimeMillis());list.add(head0);list.add(head1);list.add(head2);return list;}private List<List<Object>> dataList() {List<List<Object>> list = new ArrayList<List<Object>>();for (int i = 0; i < 10; i++) {List<Object> data = new ArrayList<Object>();data.add("字符串" + i);data.add(new Date());data.add(0.56);list.add(data);}return list;}private List<DemoData> data() {List<DemoData> list = new ArrayList<DemoData>();for (int i = 0; i < 10; i++) {DemoData data = new DemoData();data.setString("字符串" + i);data.setDate(new Date());data.setDoubleData(0.56);list.add(data);}return list;}}


寫在最后:
我叫風(fēng)骨散人,名字的意思是我多想可以不低頭的自由生活,可現(xiàn)實(shí)卻不是這樣。家境貧寒,總得向這個(gè)世界低頭,所以我一直在奮斗,想改變我的命運(yùn)給親人好的生活,希望同樣被生活綁架的你可以通過(guò)自己的努力改變現(xiàn)狀,深知成年人的世界里沒(méi)有容易二字。目前是一名在校大學(xué)生,預(yù)計(jì)考研,熱愛(ài)編程,熱愛(ài)技術(shù),喜歡分享,知識(shí)無(wú)界,希望我的分享可以幫到你!
如果有什么想看的,可以私信我,如果在能力范圍內(nèi),我會(huì)發(fā)布相應(yīng)的博文!
感謝大家的閱讀!😘你的點(diǎn)贊、收藏、關(guān)注是對(duì)我最大的鼓勵(lì)!

總結(jié)

以上是生活随笔為你收集整理的JAVA连接Excel最好用的开源项目EasyExcel,官方使用文档及.jar包下载的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

91桃色在线观看视频 | 西西444www大胆高清图片 | 成av人电影 | 99久久久成人国产精品 | 精品一二 | 18久久久 | 欧美日韩精品在线播放 | 国产另类xxxxhd高清 | 国产一区 在线播放 | 91亚洲精品乱码久久久久久蜜桃 | 九九热视频在线 | 国产一区二区三区免费在线观看 | 青青草国产免费 | 欧美 日韩 性| 久久伦理影院 | 日韩av免费网站 | 国产精品岛国久久久久久久久红粉 | 999久久久国产精品 高清av免费观看 | 一区二区三区在线看 | 色婷婷激情四射 | 亚洲国产精品成人av | 久久久久久免费 | 2024国产精品视频 | 免费精品视频在线 | 2020天天干夜夜爽 | 中文字幕第一页在线 | 在线日韩一区 | 精品免费在线视频 | 亚洲综合国产精品 | 精品视频区 | 国产日产精品一区二区三区四区 | 中文字幕欧美日韩va免费视频 | 久久久999精品视频 国产美女免费观看 | 亚洲欧美视频在线观看 | 久久久麻豆精品一区二区 | 色99在线| 男女激情片在线观看 | 欧美一级片免费在线观看 | 免费看的黄网站软件 | 激情五月婷婷丁香 | 又黄又爽又湿又无遮挡的在线视频 | 色爱区综合激月婷婷 | 免费看成人a | 亚洲精品国产精品乱码在线观看 | 手机av资源 | 免费视频久久久久久久 | 天天干天天玩天天操 | 国产成人av电影在线观看 | 亚洲做受高潮欧美裸体 | 97国产在线 | 欧美日韩在线免费观看视频 | 免费在线观看视频a | 欧美性生交大片免网 | 日韩精品一区二区三区免费视频观看 | 国产亚洲婷婷 | 亚洲永久精品在线 | www.香蕉视频 | 欧美日韩国产一区 | 色婷婷综合久久久 | 在线黄色国产 | 黄色一级影院 | 九九热在线视频免费观看 | 婷婷去俺也去六月色 | 天天爽夜夜爽人人爽一区二区 | 精品国产诱惑 | 国内精品久久久久久久久 | 日p视频| 欧美伦理一区二区三区 | 8x成人免费视频 | 久久综合久久久久88 | 99精品视频在线观看 | 免费看日韩片 | 韩国视频一区二区三区 | 午夜久久久影院 | 欧美激情视频在线观看免费 | 国产午夜精品在线 | 婷婷在线网 | 国产美女无遮挡永久免费 | 麻豆视频大全 | av高清一区二区三区 | www.狠狠操.com| 91热爆在线观看 | 视频在线观看亚洲 | 三级午夜片 | 久久a v视频 | 手机成人av在线 | 久久a免费视频 | 亚洲精品啊啊啊 | 日韩激情视频 | 国产日韩精品一区二区 | 在线观看亚洲成人 | 日p视频在线观看 | 天天天综合网 | a黄色片 | 亚洲欧美一区二区三区孕妇写真 | 国产一区电影在线观看 | 日日日网 | 亚洲美女精品区人人人人 | 99久久er热在这里只有精品15 | 91精品小视频| 亚洲激情一区二区三区 | 五月开心色| 麻豆视频91| 久久久国产精品网站 | 91精品一区在线观看 | 2021久久| 91av精品 | 一本一本久久a久久精品综合 | 国产三级精品三级在线观看 | 久久黄页| 成人久久久久久久久久 | 日韩中文字幕在线看 | 精品国产综合区久久久久久 | 日本黄色a级大片 | 偷拍精品一区二区三区 | 久久久久网站 | 久久最新视频 | 玖玖视频 | 麻豆免费视频网站 | 久久天天躁夜夜躁狠狠躁2022 | 最新动作电影 | 精品国产一区二区三区在线观看 | 亚洲午夜精品福利 | 欧美久久久影院 | 久久在线精品视频 | 在线观看精品国产 | 日韩电影在线观看中文字幕 | 一区二区三区中文字幕在线 | 中文字幕视频在线播放 | 久久精品日产第一区二区三区乱码 | 五月天久久久 | 久久国产精品99国产精 | 久久一区国产 | 五月婷婷综合在线观看 | 四虎8848免费高清在线观看 | 国产午夜精品久久 | 99久热在线精品视频成人一区 | 中文字幕在线日 | 日躁夜躁狠狠躁2001 | 久久一区二区三区四区 | 密桃av在线 | 右手影院亚洲欧美 | 欧美精品久久久久性色 | 久久久精品福利视频 | 日韩精品视频在线观看免费 | 青草视频在线看 | 久久丁香| 成 人 a v天堂 | 国产美女视频网站 | 色婷婷激婷婷情综天天 | 欧美一级片在线 | 中文永久字幕 | 中文字幕av最新 | av福利网址导航 | 天堂av免费| 免费观看的av | 日韩在线免费不卡 | 亚洲黄a | 亚洲成a人片77777kkkk1在线观看 | 欧美日韩高清一区二区三区 | 免费一级特黄毛大片 | 精品国产乱码久久久久久天美 | 91av在线电影 | 91九色视频网站 | 久久最新网址 | 亚洲一区天堂 | 在线看片一区 | 五月天婷婷综合 | 精品视频成人 | 国产亚洲欧洲 | 国产男女无遮挡猛进猛出在线观看 | 亚洲欧美婷婷六月色综合 | 国产精品一区二区吃奶在线观看 | 国产午夜一区二区 | 2021国产视频 | 欧美性受极品xxxx喷水 | 中文字幕在线字幕中文 | 国产精品不卡视频 | 97在线免费观看 | 精品亚洲va在线va天堂资源站 | 久热色超碰 | 国产午夜亚洲精品 | 91日韩在线播放 | 亚洲 中文 欧美 日韩vr 在线 | 国产精品精品国产色婷婷 | 国产精品国产三级国产aⅴ9色 | 高潮久久久久久 | 99久久99久久精品 | 丝袜网站在线观看 | 国产精品一区二区av麻豆 | 伊人一级 | 中文字幕在线观看一区二区三区 | 国产视频资源在线观看 | 亚洲 中文 欧美 日韩vr 在线 | 免费看污污视频的网站 | 九九九九九九精品任你躁 | 久草视频在线免费看 | 日韩免费一级电影 | 中文字幕第一页在线播放 | 黄色毛片视频免费 | 伊人五月天婷婷 | 国产精品自产拍在线观看桃花 | 一区二区三区免费看 | 欧美调教网站 | 又紧又大又爽精品一区二区 | 国产一区在线看 | 毛片视频网址 | 国产黄色视 | 97视频免费观看 | 国产在线观看污片 | 成年人在线免费看视频 | 99久久爱| 国产成人免费精品 | 欧美a视频在线观看 | 国产一区二区三精品久久久无广告 | 欧美黄色高清 | 日韩电影一区二区在线 | 日韩激情免费视频 | 日韩激情视频 | 午夜三级大片 | 成人香蕉视频 | 蜜桃av人人夜夜澡人人爽 | 天天天天色射综合 | 国产一区二区精品久久91 | 亚洲精品大片www | 99精品在线免费视频 | 天天干,天天射,天天操,天天摸 | 国产精品毛片一区二区在线看 | 日韩精品视频免费专区在线播放 | 午夜精品久久久久久久久久久久 | 在线成人欧美 | 日韩中文字幕免费视频 | 在线免费黄色av | 91丨精品丨蝌蚪丨白丝jk | 色婷婷综合久色 | 五月天婷婷综合 | 久久欧洲视频 | 中文字幕日韩无 | 最近av在线| 国产福利免费在线观看 | 成年人看片 | 日本中文字幕在线观看 | 国产91国语对白在线 | 国产在线观看你懂的 | 国产视频在线免费 | 亚洲国产视频在线 | 国产视频 亚洲精品 | 亚洲综合激情五月 | 欧美日韩国产高清视频 | 在线成人欧美 | 在线免费观看视频一区二区三区 | 美女精品网站 | 成人毛片在线观看 | 亚洲专区路线二 | 天天色天天射天天干 | 成人香蕉视频 | 九九天堂 | 精品视频国产一区 | 国产精品成人久久久久久久 | 五月色婷 | 99福利片| www日韩在线观看 | 三上悠亚一区二区在线观看 | 久久成人精品视频 | 亚洲人成网站精品片在线观看 | 亚洲91精品在线观看 | 日本久久久影视 | 久久99精品波多结衣一区 | 亚洲丝袜一区二区 | 亚洲va综合va国产va中文 | 久久精品超碰 | 91成人精品在线 | 国产免费资源 | 日韩精品免费一区二区三区 | 黄色av一级片 | 久久av免费观看 | 黄av免费在线观看 | 天堂网av在线 | 成人av电影在线播放 | 亚洲在线资源 | 深爱五月激情五月 | 国产精品国产毛片 | 九九国产精品视频 | aⅴ视频在线 | 久久精品永久免费 | 最新av在线播放 | 国产精品久久久一区二区 | 插婷婷| 国产亚洲精品久久久久久久久久 | 国产中文字幕免费 | 中文字幕在线观看av | 国产馆在线播放 | 日韩精品最新在线观看 | 激情久久一区二区三区 | 欧美日韩中文视频 | 国产不卡在线播放 | 国产91对白在线播 | 最近中文字幕高清字幕在线视频 | 日本精油按摩3 | 久久久久久久久免费 | 91成人免费 | 欧美日韩国产一区二区三区 | 人人爱人人添 | 91原创在线观看 | 精品视频久久久 | 久久免费视频3 | 黄色av网站在线观看 | 中文字幕乱在线伦视频中文字幕乱码在线 | 国产高清久久 | 精品久久久久久亚洲 | 国产精品美女久久久网av | 国产日韩欧美中文 | 探花视频网站 | 99久久久久国产精品免费 | 国内外激情视频 | 成人免费视频在线观看 | 香蕉97视频观看在线观看 | 久久激情小视频 | 成人小电影在线看 | 久久免费激情视频 | 成人a毛片| 亚洲国产成人精品久久 | 久久人人爽人人爽人人片av免费 | 日韩成人精品一区二区三区 | 亚洲一区二区三区精品在线观看 | 天天射成人| av再线观看 | 国产美女精品视频 | 成人久久亚洲 | 黄色avwww | 最新国产一区二区三区 | 久久久官网 | 人人干网站| 干天天| 免费观看一级一片 | 在线免费观看国产精品 | 久久久国产精品人人片99精片欧美一 | 四虎影视精品 | 国产精品免费高清 | 亚洲aaa毛片| 精品女同一区二区三区在线观看 | 免费色视频| 色香蕉网| 久久精品婷婷 | 国产精品成人一区二区三区吃奶 | 国产一卡久久电影永久 | a久久免费视频 | 9幺看片 | 国产亚洲视频在线观看 | 日本黄色免费看 | 免费看的黄色录像 | 日韩一区二区免费在线观看 | 九九99视频 | 日韩精品免费一线在线观看 | 999视频在线观看 | 欧美黑人猛交 | 免费高清影视 | 日日草天天草 | 欧美一区影院 | 黄色美女免费网站 | 国产99久久精品一区二区永久免费 | av不卡免费在线观看 | www五月天com | 中文伊人 | 五月香视频在线观看 | 天天激情在线 | 激情喷水 | 最近久乱中文字幕 | 精品国产一区二区三区久久久蜜月 | 日韩a在线播放 | 欧美日韩高清一区二区 | 亚洲国产精品电影在线观看 | 成人av资源在线 | 久久综合九色欧美综合狠狠 | 午夜在线看片 | 成人观看视频 | 九九热在线免费观看 | 狠狠色伊人亚洲综合网站野外 | 国产精品久久久久久电影 | 日韩一区二区免费视频 | 在线蜜桃视频 | 成年人网站免费观看 | 97成人精品区在线播放 | 91精品国产欧美一区二区 | 国产精品久久一 | 91亚洲精品在线 | 国产99久久精品一区二区永久免费 | 九九三级毛片 | 在线激情小视频 | 国产不卡av在线 | av超碰免费在线 | 欧美大片在线观看一区 | 激情深爱.com | 免费人做人爱www的视 | 丁香av| 成人黄色免费在线观看 | 狠狠干综合网 | 又湿又紧又大又爽a视频国产 | 99精品免费视频 | 午夜色站 | 激情五月视频 | 久久久久久久久久久久久久免费看 | 午夜精品一区二区国产 | 国产精品久久久久久久久久三级 | 91看片黄色 | 久久综合毛片 | 超碰在线色 | www.色婷婷.com | 亚洲精品综合一二三区在线观看 | 国内精品久久久久久久影视简单 | 国产xx视频 | 久久久网址 | 在线精品视频在线观看高清 | 亚洲综合激情五月 | 久久精品站 | 精品伊人久久久 | 97精品国产97久久久久久春色 | 久久久免费精品国产一区二区 | 久久精品艹 | 最新午夜电影 | 国产免费一区二区三区最新6 | 欧美日韩91 | 丁香综合五月 | 手机看片中文字幕 | 成年人电影毛片 | 瑞典xxxx性hd极品 | 国产福利91精品一区 | 久久欧美综合 | 国产精品久久久99 | 日本免费一二三区 | 久久国产欧美日韩 | 国产原创在线 | 亚洲一级电影在线观看 | 九九av| 国产精品国产三级国产aⅴ9色 | 青青网视频 | 日韩三级在线观看 | 午夜在线免费观看视频 | 国产福利在线 | 在线免费色视频 | 成人免费看片98欧美 | 欧美日韩中文在线 | 中文字幕麻豆 | 综合五月| 国产精品视频大全 | 在线视频黄 | 在线看片中文字幕 | 国产精品一区二区免费在线观看 | 欧美日韩一区久久 | 久草 | 国产亚洲精品久久久久久久久久 | 久久综合九色综合97_ 久久久 | 成人在线观看你懂的 | 二区三区中文字幕 | 韩日精品在线 | 美女亚洲精品 | 国产精品美女www爽爽爽视频 | 国产一区二三区好的 | 久久免费视频2 | 免费av观看网站 | 日韩aⅴ视频 | 中文字幕视频网 | 天天干天天爽 | 国产精品18久久久 | 欧美在线观看视频一区二区三区 | 玖操| 亚洲另类视频在线观看 | 久久免费激情视频 | 九九精品毛片 | 制服丝袜欧美 | 亚洲免费成人 | 最新av网址在线 | 国产黑丝一区二区三区 | 中日韩欧美精彩视频 | 亚洲狠狠婷婷综合久久久 | 毛片美女网站 | 夜夜躁日日躁狠狠久久88av | 国产欧美在线一区 | 亚洲成av片人久久久 | 婷婷六月色 | 日韩视频免费 | 在线观看国产中文字幕 | 久久狠狠一本精品综合网 | 中文字幕丰满人伦在线 | 免费日韩三级 | 在线成人短视频 | 久久精品一区二 | 91视频91色 | 美女精品在线观看 | 久久精品国产亚洲 | 国产91aaa| av网站地址| 免费看三级网站 | 九九热久久久 | 亚洲天天综合网 | 天天天操天天天干 | 精品在线观看国产 | 人人草在线视频 | 中文字幕在线看视频国产中文版 | 91人人网 | 免费三级黄色片 | 黄色网在线免费观看 | 国产精品不卡在线播放 | 国产在线高清精品 | 亚洲永久免费av | 色欧美综合 | 96亚洲精品久久 | 在线免费看黄网站 | 激情av一区二区 | 欧美va在线观看 | 精品国产a| 日韩理论电影在线观看 | 免费看污在线观看 | 日本性生活免费看 | 欧美另类视频 | 91精品秘密在线观看 | 久久久穴 | 在线免费观看羞羞视频 | 黄色aaa毛片 | 丁香花中文在线免费观看 | 精品国产乱码久久久久久浪潮 | 成人一区二区三区在线观看 | 日韩久久精品一区二区 | 欧美亚洲另类在线视频 | 又爽又黄在线观看 | 911精品视频 | 激情av资源网 | 香蕉久久久久久av成人 | 96视频在线| 国产男男gay做爰 | 色黄www小说| 亚洲 欧美 变态 国产 另类 | 国产精品女人网站 | 国产精品久久久久一区 | 国产黄色网 | 国产精品福利在线观看 | 久久久久电影 | 欧美日韩在线免费观看 | 99成人精品 | 欧美日韩不卡一区 | 国产小视频你懂的 | 九九有精品 | 欧美一二三视频 | 91在线一区| www黄色软件 | 蜜臀av性久久久久蜜臀aⅴ涩爱 | 久久国产精品成人免费浪潮 | 丝袜美腿av | 欧洲精品视频一区二区 | 嫩模bbw搡bbbb搡bbbb | 91视频电影| 国产成人久久久77777 | 天天色天天草天天射 | 日韩不卡高清 | 天天摸天天操天天爽 | 91大神视频网站 | 激情丁香综合五月 | 麻豆免费观看视频 | 色综合小说| 免费高清在线一区 | 久久狠狠一本精品综合网 | 日本大片免费观看在线 | 国内三级在线观看 | 97在线观看免费观看高清 | 五月天高清欧美mv | 亚洲夜夜爽 | av福利超碰网站 | 免费人成在线观看 | 中文国产在线观看 | 最新极品jizzhd欧美 | 日韩字幕 | 亚洲 欧美 日韩 综合 | 日日夜夜人人精品 | 三级免费黄色 | 亚洲春色奇米影视 | 久久久69 | 日韩三级免费 | 黄色电影小说 | 欧美在线观看视频免费 | 91在线小视频 | 欧美日韩免费在线视频 | 日韩中文字幕免费在线播放 | 福利区在线观看 | 久久这里| 免费av片在线 | 亚洲免费观看视频 | 国产精品夜夜夜一区二区三区尤 | 五月亚洲综合 | av色网站 | 操操碰| 久久视频免费在线 | 天天曰天天曰 | 91黄色免费网站 | 天天综合导航 | 视频在线播放国产 | 国产一二三四在线视频 | 欧美 激情 国产 91 在线 | 久久伦理电影 | 久久激情视频 久久 | 久久久久久毛片 | 成人动漫一区二区三区 | 欧美在线观看视频 | 激情综合网五月婷婷 | www.夜夜操.com | 久精品视频在线观看 | 亚洲综合在 | 国产一区二区三区在线免费观看 | 人人澡人人舔 | 日韩欧美一区二区在线播放 | 日韩av在线资源 | 欧美日产在线观看 | 韩国精品在线观看 | 91高清不卡 | 永久免费视频国产 | 中文一区在线观看 | 国产专区日韩专区 | 日韩黄色免费电影 | 黄色网址av| 婷婷色影院 | 国产免费久久久久 | 99久久精品国产系列 | 中文字幕在线观看视频网站 | 中文字幕乱码在线播放 | 99精品免费久久久久久久久日本 | 又爽又黄又刺激的视频 | 成年人免费看的视频 | 中文字幕xxxx | 97成人精品视频在线观看 | 五月婷婷综合在线观看 | 91丨九色丨国产在线 | 欧产日产国产69 | 日本二区三区在线 | 天天久久综合 | 色天堂在线视频 | 日韩国产欧美在线播放 | 欧美 日韩 成人 | www.97色.com| 激情综合网婷婷 | 久草在线视频首页 | 成人欧美一区二区三区在线观看 | www.av免费 | 99精品欧美一区二区三区黑人哦 | 91中文字幕 | 欧美精品中文在线免费观看 | 在线成人免费av | 免费看成人av| 国产精品久久久久久久久久了 | 久黄色| 91成人网在线观看 | 国产免码va在线观看免费 | 国产真实精品久久二三区 | 久久69精品久久久久久久电影好 | 久久亚洲美女 | 欧美精品视 | 国产在线国产 | 天天综合导航 | 日韩h在线观看 | 欧美激情精品久久久久久变态 | 99国内精品久久久久久久 | 九九久久久| 久草在线观看视频免费 | 亚洲欧美日韩国产一区二区 | 黄色www| 97视频在线播放 | 欧美精品亚洲精品日韩精品 | 成av人电影 | 久久66热这里只有精品 | 午夜国产福利在线观看 | 91精品国产亚洲 | 精品国产乱码久久久久久浪潮 | 日本三级中文字幕在线观看 | 中文字幕av最新更新 | 麻豆一精品传二传媒短视频 | 片黄色毛片黄色毛片 | 黄av在线| 超碰久热 | 久草影视在线观看 | 日韩在线观看中文字幕 | 天天摸夜夜添 | 99热这里只有精品1 av中文字幕日韩 | 亚洲一级国产 | 国产一级免费在线观看 | 国产一区二区电影在线观看 | 九九久久成人 | 日韩av播放在线 | 婷婷5月色| 99久久精品久久久久久清纯 | 国产一区免费在线 | 亚洲综合在线播放 | 国产1区2 | 五月婷婷综合色拍 | 91成人区 | 综合网婷婷 | 一级片色播影院 | 91黄色在线视频 | 亚洲观看黄色网 | 国产色爽 | 97在线视频观看 | 久久精品91视频 | 免费网站看v片在线a | 婷婷六月综合网 | 日日干视频 | 视频一区二区在线 | 少妇精品久久久一区二区免费 | 国产精品免费在线视频 | 99热在线观看 | 麻豆传媒一区二区 | 成人免费看片98欧美 | 国产人成一区二区三区影院 | 国产69精品久久99不卡的观看体验 | 久久久久国产精品免费网站 | 国产精品成人一区二区 | 一区二区三区日韩视频在线观看 | 中文字幕第一页在线播放 | 在线日韩精品视频 | 成人app在线免费观看 | 欧美日韩国产精品一区二区三区 | 狠狠色丁香婷婷综合最新地址 | 在线之家免费在线观看电影 | 午夜精品一区二区三区在线播放 | 激情开心站 | 日本丰满少妇免费一区 | 五月婷av | 四虎在线免费观看 | 久久国产精品视频观看 | 欧美极品少妇xbxb性爽爽视频 | 亚洲成人动漫在线观看 | 黄色三级免费片 | 青青河边草免费直播 | 四虎国产精品永久在线国在线 | 国产精品久久电影网 | 日韩欧美在线一区 | 欧美日比视频 | 欧美激情视频免费看 | 亚洲综合在线五月天 | 精品一二三区 | 精品久久久久久亚洲 | 欧美少妇xxxxxx| 91香蕉视频 | 亚洲小视频在线 | 有码中文字幕在线观看 | 三上悠亚在线免费 | 亚洲精品中文在线 | 成人av影院在线观看 | 一本一道久久a久久综合蜜桃 | 综合婷婷丁香 | 国产精品黄网站在线观看 | av在线网站免费观看 | 欧美在线观看视频一区二区三区 | 免费视频 你懂的 | 午夜久久久久久久 | 狠狠色丁香婷婷综合久小说久 | 国产视频网站在线观看 | 伊人干综合 | 九九亚洲视频 | 日韩大片在线 | 成人av在线影院 | 国产精品一区二区精品视频免费看 | 天天射日 | 久草视频中文在线 | 日韩精选在线观看 | 日本久久久亚洲精品 | 91在线看黄 | 亚洲精品视频 | 国产999在线 | 成人在线观看资源 | 在线超碰av | 成x99人av在线www| 国产裸体bbb视频 | 精品美女久久久久久免费 | 久久久久久久久久久网 | 中文字幕免费高清在线观看 | 精品在线免费观看 | 久久成人人人人精品欧 | 亚洲不卡123 | 亚洲成人免费在线观看 | 久久中文欧美 | 久久99视频免费 | 欧美小视频在线 | 中文国产在线观看 | 亚洲黄色片一级 | 国产麻豆传媒 | 日韩精品久久久久久中文字幕8 | 久久精品久久99精品久久 | 国产精品中文字幕av | 91探花国产综合在线精品 | 91久久国产自产拍夜夜嗨 | 亚洲理论在线观看 | av免费电影网站 | 久久精品96 | 久久优| 国产免费小视频 | 国产亚洲精品日韩在线tv黄 | 精品一区久久 | 国产一级片一区二区三区 | 狠狠干2018 | 日韩国产高清在线 | 国产一区二区免费在线观看 | 亚洲成年人在线播放 | 久久国产精品精品国产色婷婷 | 亚洲精品国产精品国自产在线 | 天天操天天射天天插 | 久久国产精品久久国产精品 | 九九精品在线观看 | 在线电影a | 欧美一级久久久久 | 在线免费观看黄 | 日韩高清国产精品 | 成人av电影免费观看 | 在线精品一区二区 | 国内三级在线观看 | 四虎在线免费观看 | 精品国产中文字幕 | 日韩精品无 | 亚洲国产手机在线 | 国产成人在线网站 | 久久久久国产精品厨房 | 亚洲激情校园春色 | 日韩欧美视频一区二区 | 狠狠色噜噜狠狠狠合久 | 亚洲香蕉在线观看 | 久久精品4 | 欧美最爽乱淫视频播放 | 日日爱网站 | 国产亚洲精品久久久久久 | 国产一区在线播放 | 天天操天天干天天干 | 久久精品123 | 国产精品久久久久aaaa九色 | 在线观看免费国产小视频 | 日韩久久精品一区二区 | 国产xx视频 | 亚洲一区二区视频在线播放 | 成年人免费在线观看网站 | 亚洲成年人免费网站 | 中文字幕在线视频免费播放 | 日韩欧美高清免费 | 三级a毛片 | 日本夜夜草视频网站 | 四虎成人精品在永久免费 | 久久久久久久久免费视频 | 中文字幕在线网 | 97成人啪啪网 | 欧美激情视频一区二区三区免费 | 六月激情婷婷 | 国产精品久久久久婷婷二区次 | 欧美午夜一区二区福利视频 | 亚洲一片黄 | 久久久资源 | 午夜视频在线观看一区 | 色婷婷啪啪免费在线电影观看 | 91精品老司机久久一区啪 | 青青草华人在线视频 | 久草资源免费 | 国产精品丝袜久久久久久久不卡 | a在线观看免费视频 | 久久精品国产精品亚洲 | 91久久久国产精品 | 婷婷新五月 | 久久久首页 | 久久99久久99精品中文字幕 | 欧美调教网站 | 日韩中文在线视频 | 亚洲成人免费 | 亚洲一区二区精品在线 | 中文字幕久久网 | 色综合久久综合中文综合网 | 九七视频在线观看 | 91视频在线免费观看 | 国产视频黄 | 五月亚洲婷婷 | 欧美性春潮 | 国产在线精 | 欧美91精品国产自产 | 免费a级毛片在线看 | 久久综合九色99 | 免费视频你懂的 | 亚洲人成免费 | 一级a性色生活片久久毛片波多野 | 婷婷丁香色综合狠狠色 | 操夜夜操 | 天天综合天天做天天综合 | 天堂av观看| 国产精品va在线观看入 | 久操中文字幕在线观看 | 亚洲国产午夜精品 | 99人成在线观看视频 | 成人91av | 国产手机av在线 | 91在线看视频 | 香蕉视频在线网站 | 欧美日韩破处 | 99精品免费久久久久久久久 | 国产精品久久久久久69 | 999久久久 | 毛片久久久| 国产视频1区2区3区 久久夜视频 | 久久99精品热在线观看 | 狠狠干天天 | 国产激情小视频在线观看 | 日韩av在线免费播放 | 免费看一及片 | 欧美91精品久久久久国产性生爱 | av超碰在线| 麻豆成人精品视频 | 亚洲视频在线观看网站 | a午夜在线| 亚州人成在线播放 | 在线视频黄 | 久久久www免费电影网 | 91在线精品播放 | 456免费视频 | 日韩高清不卡在线 | 美女久久视频 | 色吧av色av | 免费视频黄色 | 日韩视频在线观看视频 | 午夜私人影院久久久久 | 在线免费看黄色 | 99精品国产免费久久久久久下载 | 人人超在线公开视频 | 国产精品国内免费一区二区三区 | 成人精品视频 | 天天爱天天操天天干 | 久草视频在线观 | 国产精品免费在线播放 | 久久久香蕉视频 | 午夜精品久久久久久久99无限制 | 一区二区三区 中文字幕 | 97碰碰精品嫩模在线播放 | 日韩成人精品一区二区 | 久久久久国产一区二区三区 | 草免费视频 | 99热手机在线观看 | 97在线观看免费视频 | 久久涩涩网站 | 久久深夜 | 免费看久久 | 欧美久草在线 | 日日日日干 | 麻豆传媒精品 | 欧美日韩91 | 久久成人国产精品 | 六月丁香伊人 | 日韩毛片久久久 | 国产在线视频一区二区三区 | 97视频中文字幕 | a爱爱视频 | 午夜精品一区二区三区四区 | 国产一区视频在线观看免费 | 久久久久高清 | 狠狠操综合网 | 久久国产精品久久w女人spa | 免费精品 | 中文字幕亚洲精品日韩 | 久久久免费av | 亚洲无线视频 | av高清一区| 国产小视频免费在线观看 | 在线高清av| aaa日本高清在线播放免费观看 | 国产一区欧美二区 | 麻豆一精品传二传媒短视频 | 国产aa精品| 欧美日韩视频在线观看免费 | 色婷婷骚婷婷 | 久久久黄色 | 在线观看免费一级片 | 中文字幕亚洲国产 | 激情综合网婷婷 | 亚洲免费av在线播放 | 国产福利91精品一区 | 国产视频精品在线 | 岛国一区在线 | 久久久久亚洲精品成人网小说 | 日韩精品观看 | 69夜色精品国产69乱 | 一级黄色免费网站 | 精品免费久久久久 | 少妇bbb | 在线观看 国产 | 亚a在线 | 国产美女久久 | 在线观看岛国 | 免费看色网站 | 国产精品久久网站 | 国产a级精品 | 久久久久久久久久网站 | 国产免费一区二区三区最新6 | 久精品视频 | 97超碰影视 | 91天堂在线观看 | 亚洲成a人片在线观看中文 中文字幕在线视频第一页 狠狠色丁香婷婷综合 | av网站免费线看精品 | 日韩av电影国产 | 色www. | 开心激情五月网 | 欧美日韩大片在线观看 |