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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

报表技术2(百万数据导入导出,POI操作word)

發(fā)布時(shí)間:2024/1/8 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 报表技术2(百万数据导入导出,POI操作word) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

POI模板導(dǎo)出,操作word

  • 導(dǎo)出用戶詳情數(shù)據(jù)(圖片,公式處理)
    • 使用模板導(dǎo)出用戶詳細(xì)信息
    • 使用模板引擎
      • 1.編寫模板引擎
      • 2.使用模板引擎
  • 百萬數(shù)據(jù)導(dǎo)出
    • 代碼實(shí)現(xiàn):
  • 百萬數(shù)據(jù)導(dǎo)入
    • 步驟分析:
    • 1.自定義處理器
    • 2.自定義解析
    • 3.測試
  • CSV文件
    • 導(dǎo)出csv文件:
    • 讀取csv文件
  • POI導(dǎo)出Word(.docx)
    • API介紹
    • 思路分析
    • 代碼實(shí)現(xiàn)

Java-報(bào)表技術(shù)1-POI:https://blog.csdn.net/weixin_43994244/article/details/126227702

導(dǎo)出用戶詳情數(shù)據(jù)(圖片,公式處理)

模板樣式

使用模板導(dǎo)出用戶詳細(xì)信息

//日期格式化private SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");/*** 導(dǎo)出用戶詳細(xì)信息--使用模板* @param id* @param response* @throws Exception*/public void downLoadUserInfoByTemplate(Long id, HttpServletResponse response) throws Exception {//1.讀取模板//獲取項(xiàng)目的根目錄,創(chuàng)建目錄---獲取絕對路徑File rootPath = new File(ResourceUtils.getURL("classpath:").getPath());File templateFile = new File(rootPath.getAbsolutePath(), "/excel_template/userInfo.xlsx");//創(chuàng)建有模板的工作簿Workbook workbook = new XSSFWorkbook(templateFile);Sheet sheet = workbook.getSheetAt(0);//2.獲取用戶數(shù)據(jù)User user = userMapper.selectByPrimaryKey(id);//3.數(shù)據(jù)放入模板---存入哪一行哪個(gè)單元格//用戶名 第2行第2列sheet.getRow(1).getCell(1).setCellValue(user.getUserName());//手機(jī)號 第3行第2列sheet.getRow(2).getCell(1).setCellValue(user.getPhone());//生日 第4行第2列sheet.getRow(3).getCell(1).setCellValue(simpleDateFormat.format(user.getBirthday()));//工資 第5行第2列sheet.getRow(4).getCell(1).setCellValue(user.getSalary());//入職日期 第6行第2列sheet.getRow(5).getCell(1).setCellValue(simpleDateFormat.format(user.getHireDate()));//省份 第7行第2列sheet.getRow(6).getCell(1).setCellValue(user.getProvince());//城市 第7行第4列sheet.getRow(6).getCell(3).setCellValue(user.getCity());//現(xiàn)住址 第8行第1列---合并單元格sheet.getRow(7).getCell(1).setCellValue(user.getAddress());//司齡 第6行第4列---導(dǎo)出公式(入職時(shí)間到現(xiàn)在)// --填入excel的公式=CONCATENATE(DATEDIF(B6,TODAY(),"Y"),"年",DATEDIF(B6,TODAY(),"YM"),"個(gè)月")sheet.getRow(5).getCell(3).setCellFormula("CONCATENATE(DATEDIF(B6,TODAY(),\"Y\"),\"年\",DATEDIF(B6,TODAY(),\"YM\"),\"個(gè)月\")");//圖片處理開始//照片--第二行到第五行,第三列到第四列--合并單元格String userPhoto = user.getPhoto();//先創(chuàng)建一個(gè)字節(jié)輸出流ByteArrayOutputStream outputStream = new ByteArrayOutputStream();//優(yōu)化,獲取拓展名,根據(jù)不同拓展名String extName = userPhoto.substring(userPhoto.lastIndexOf(".") + 1).toUpperCase();//讀取圖片,放入一個(gè)帶有緩沖區(qū)的圖片類中,主要作用是將一副圖片加載到內(nèi)存中BufferedImage bufferedImage = ImageIO.read(new File(rootPath+user.getPhoto()));//把圖片寫入到字節(jié)輸出流中ImageIO.write(bufferedImage,extName,outputStream);//Patriarch圖片寫入Drawing patriarch = sheet.createDrawingPatriarch();//ClientAnchor指定圖片位置--后四起始列,起始行,結(jié)束列,結(jié)束行,前四個(gè)參數(shù),左上角向x,y偏離多少,右下角向x,y偏離多少(偏移單位-1cm=36w) 不占滿表格ClientAnchor clientAnchor = new XSSFClientAnchor(0, 0, 0, 0, 2, 1, 4, 5);//優(yōu)化int format = 0;switch (extName){case "JPG":{format = XSSFWorkbook.PICTURE_TYPE_JPEG;} case "JPEG":{format = XSSFWorkbook.PICTURE_TYPE_JPEG;} case "PNG":{format = XSSFWorkbook.PICTURE_TYPE_PNG;}}//開始把圖片寫入到sheet指定的位置patriarch.createPicture(clientAnchor,workbook.addPicture(outputStream.toByteArray(),format));//圖片處理結(jié)束//4.下載//一個(gè)流兩個(gè)頭String fileName = "員工("+user.getUserName()+")詳細(xì)數(shù)據(jù).xlsx";response.setHeader("content-disposition","attachment;filename="+new String(fileName.getBytes(),"ISO8859-1"));response.setContentType("application/vnd.ms-excel");response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");//執(zhí)行workbook.write(response.getOutputStream());}

使用模板引擎

前提:導(dǎo)出代碼時(shí),必須要提前知道要導(dǎo)出數(shù)據(jù)在哪一行哪一個(gè)單元格,但是模板一旦發(fā)生調(diào)整,java代碼也要修改,所以可以自定義引擎,有了引擎即使模板修改了java代碼也不用修改。
思路:在制作模板時(shí),在需要插入數(shù)據(jù)的位置做上標(biāo)記,在導(dǎo)出時(shí),對象的屬性和標(biāo)記做對應(yīng),如果對應(yīng)匹配一樣,就把值賦值到相應(yīng)的位置。

模板:

工具類: bean和map轉(zhuǎn)換
可以借用hutool的BeanUtil里的方法:

此處是用jdk的API編寫: public class EntityUtils {private static SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");/*** 實(shí)體類轉(zhuǎn)Map* @param object* @return*/public static Map<String, Object> entityToMap(Object object) {Map<String, Object> map = new HashMap();for (Field field : object.getClass().getDeclaredFields()){try {boolean flag = field.isAccessible();field.setAccessible(true);Object o = field.get(object);if(o instanceof Date){o = sdf.format(o);}map.put(field.getName(), o);field.setAccessible(flag);} catch (Exception e) {e.printStackTrace();}}return map;}/*** Map轉(zhuǎn)實(shí)體類* @param map 需要初始化的數(shù)據(jù),key字段必須與實(shí)體類的成員名字一樣,否則賦值為空* @param entity 需要轉(zhuǎn)化成的實(shí)體類* @return*/public static <T> T mapToEntity(Map<String, Object> map, Class<T> entity) {T t = null;try {t = entity.newInstance();for(Field field : entity.getDeclaredFields()) {if (map.containsKey(field.getName())) {boolean flag = field.isAccessible();field.setAccessible(true);Object object = map.get(field.getName());if (object!= null && field.getType().isAssignableFrom(object.getClass())) {field.set(t, object);}field.setAccessible(flag);}}return t;} catch (InstantiationException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (IllegalAccessException e) {// TODO Auto-generated catch blocke.printStackTrace();}return t;} }

1.編寫模板引擎

public class ExcelExportEngine {private static SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");public static Workbook writeToExcel(Object object,Workbook workbook,String photoPath) throws Exception {//把bean轉(zhuǎn)成mapMap<String, Object> map = EntityUtils.entityToMap(object);Sheet sheet = workbook.getSheetAt(0);Row row = null;Cell cell = null;//循環(huán)100行,每一行循環(huán)100個(gè)單元格---定位到具體的cellfor (int i = 0; i < 10; i++) {row = sheet.getRow(i);if(row == null){break;}else {for (int j = 0; j < 10; j++) {cell = row.getCell(j);if(cell != null){//比較單元格中的值,是否和map中的key一致,如果一致向單元格中放入map這個(gè)key對應(yīng)的值writeToCell(cell,map);}}}}//處理圖片if(StringUtils.isNotBlank(photoPath)){//File rootPath = new File(ResourceUtils.getURL("classpath:").getPath()); //SpringBoot項(xiàng)目獲取根目錄的方式ByteArrayOutputStream byteArrayOut = new ByteArrayOutputStream();//BufferedImage是一個(gè)帶緩沖區(qū)圖像類,主要作用是將一幅圖片加載到內(nèi)存中BufferedImage bufferImg = ImageIO.read(new File(photoPath));ImageIO.write(bufferImg, "jpg", byteArrayOut);Drawing patriarch = sheet.createDrawingPatriarch();//獲取模板圖片位置Sheet sheet2 = workbook.getSheetAt(1);row = sheet2.getRow(0);int col1 = ((Double) row.getCell(0).getNumericCellValue()).intValue();int row1 = ((Double) row.getCell(1).getNumericCellValue()).intValue();int col2 = ((Double) row.getCell(2).getNumericCellValue()).intValue();int row2 = ((Double) row.getCell(3).getNumericCellValue()).intValue();//錨點(diǎn),固定點(diǎn)ClientAnchor anchor = new XSSFClientAnchor(0, 0, 0, 0, col1, row1, col2, row2);patriarch.createPicture(anchor, workbook.addPicture(byteArrayOut.toByteArray(), Workbook.PICTURE_TYPE_JPEG));//刪除第二個(gè)sheetworkbook.removeSheetAt(1);}return workbook;}//比較單元格中的值,是否和map中的key一致,如果一致向單元格中放入map這個(gè)key對應(yīng)的值private static void writeToCell(Cell cell, Map<String, Object> map) {CellType cellType = cell.getCellType();//公式的話不處理switch(cellType){case FORMULA:{break;} default:{String cellValue = cell.getStringCellValue();if(StringUtils.isNotBlank(cellValue)){//System.out.println("獲取到的cellValue"+cellValue);for (String key : map.keySet()){if(key.equals(cellValue)){cell.setCellValue(map.get(key).toString());//System.out.println("獲取到的value:"+map.get(key).toString());}}}}}} }

2.使用模板引擎

/*** 導(dǎo)出用戶詳細(xì)信息--使用模板引擎* @param id* @param response* @throws Exception*/public void downLoadUserInfoByTemplate2(Long id, HttpServletResponse response) throws Exception {//1.讀取模板//獲取項(xiàng)目的根目錄,創(chuàng)建目錄---獲取絕對路徑File rootPath = new File(ResourceUtils.getURL("classpath:").getPath());File templateFile = new File(rootPath.getAbsolutePath(), "/excel_template/userInfo2.xlsx");//創(chuàng)建有模板的工作簿Workbook workbook = new XSSFWorkbook(templateFile);Sheet sheet = workbook.getSheetAt(0);//2.獲取用戶數(shù)據(jù)User user = userMapper.selectByPrimaryKey(id);System.out.println("獲取到的用戶信息"+user.toString());//3.通過自定義引擎放入數(shù)據(jù)--圖片的絕對路徑workbook = ExcelExportEngine.writeToExcel(user, workbook,rootPath.getPath()+user.getPhoto());patriarch.createPicture(clientAnchor,workbook.addPicture(outputStream.toByteArray(),format));//圖片處理結(jié)束//4.下載//一個(gè)流兩個(gè)頭String fileName = "員工("+user.getUserName()+")詳細(xì)數(shù)據(jù).xlsx";response.setHeader("content-disposition","attachment;filename="+new String(fileName.getBytes(),"ISO8859-1"));//xls//response.setContentType("application/vnd.ms-excel");//xlsxresponse.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");//執(zhí)行workbook.write(response.getOutputStream());}

百萬數(shù)據(jù)導(dǎo)出

用戶模式: 用戶模式有許多封裝好的方法操作簡單,但創(chuàng)建太多的對象,非常耗內(nèi)存(之前使用的方法)
事件模式: 基于SAX方式解析XML,SAX全稱Simple API for XML,它是一個(gè)接口,也是一個(gè)軟件包。它是一種XML解析的替代方法,不同于DOM解析XML文檔時(shí)把所有內(nèi)容一次性加載到內(nèi)存中的方式,它逐行掃描文檔,一邊掃描,一邊解析。
SXSSF對象:是用來生成海量excel數(shù)據(jù)文件,主要原理是借助臨時(shí)存儲(chǔ)空間生成excel
弊端
1、不能使用模板
2、不能使用太多的樣式
實(shí)現(xiàn)方式:
1.dom4j:一次性加載xml文件再解析
2.SAX:逐行加載,逐行解析
3.SXSSWorkBook:一旦內(nèi)存中的對象的個(gè)數(shù)達(dá)到指定值時(shí),就將內(nèi)存中的這些對象的內(nèi)容寫入到磁盤中,就可以將這些對象從內(nèi)存中銷毀,直至excel導(dǎo)出完成。

代碼實(shí)現(xiàn):

public void downLoadMillion(HttpServletResponse response) throws Exception {//使用sax方式解析Workbook workbook = new SXSSFWorkbook();//導(dǎo)出500w條數(shù)據(jù),一個(gè)sheet只能放100w行//記錄了處理了多少條數(shù)據(jù)int number = 0;//分頁查詢int page = 1;//記錄row的行索引int rowIndex = 1;//創(chuàng)建行Row row = null;Sheet sheet = null;while (true) {List<User> userList = this.findPage(page, 1000000);if (CollectionUtils.isEmpty(userList)) {break;//數(shù)據(jù)為空不再查詢}if (number % 1000000 == 0) {//表示應(yīng)該創(chuàng)建新的標(biāo)題sheet = workbook.createSheet("第" + (number/1000000)+ "個(gè)sheet表");//重置rowIndexrowIndex = 1;//設(shè)置列寬sheet.setColumnWidth(0,8*256);sheet.setColumnWidth(1,12*256);sheet.setColumnWidth(2,15*256);sheet.setColumnWidth(3,15*256);sheet.setColumnWidth(4,30*256);//設(shè)置小標(biāo)題String[] title = new String[]{"編號", "姓名", "手機(jī)號", "入職日期", "現(xiàn)住址"};//創(chuàng)建標(biāo)題行Row titleRow = sheet.createRow(0);for (int i = 0; i < 5; i++) {titleRow.createCell(i).setCellValue(title[i]);}}//向excel中添加內(nèi)容for (User user : userList) {row = sheet.createRow(rowIndex);row.createCell(0).setCellValue(user.getId());row.createCell(1).setCellValue(user.getUserName());row.createCell(2).setCellValue(user.getPhone());row.createCell(3).setCellValue(simpleDateFormat.format(user.getHireDate()));row.createCell(4).setCellValue(user.getAddress());rowIndex++;number++;}page++;//下一頁}//4.下載//一個(gè)流兩個(gè)頭String fileName = "百萬數(shù)據(jù)導(dǎo)出.xlsx";response.setHeader("content-disposition","attachment;filename="+new String(fileName.getBytes(),"ISO8859-1"));response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");//執(zhí)行workbook.write(response.getOutputStream());}

百萬數(shù)據(jù)導(dǎo)入

用戶模式: 加載并讀取Excel時(shí),是通過一次性的將所有數(shù)據(jù)加載到內(nèi)存中再去解析每個(gè)單元格內(nèi)容。當(dāng)Excel數(shù)據(jù)量較大時(shí),由于不同的運(yùn)行環(huán)境可能會(huì)造成內(nèi)存不足甚至OOM異常。
事件模式: 它逐行掃描文檔,一邊掃描一邊解析。由于應(yīng)用程序只是在讀取數(shù)據(jù)時(shí)檢查數(shù)據(jù),因此不需要將數(shù)據(jù)存儲(chǔ)在內(nèi)存中,這對于大型文檔的解析是個(gè)巨大優(yōu)勢。

步驟分析:

1.設(shè)置POI的事件模式

  • 根據(jù)Excel獲取文件流
  • 根據(jù)文件流創(chuàng)建OPCPackage ,用來組合讀取到的xml 組合出來的數(shù)據(jù)占用的空間更小
  • 創(chuàng)建XSSFReader對象

2.Sax解析

  • 自定義Sheet處理器
  • 創(chuàng)建Sax的XmlReader對象
  • 設(shè)置Sheet的事件處理器
  • 逐行讀取

1.自定義處理器

package com.itheima.test;import com.itheima.pojo.User; import org.apache.poi.xssf.eventusermodel.XSSFSheetXMLHandler; import org.apache.poi.xssf.usermodel.XSSFComment;public class SheetHandler implements XSSFSheetXMLHandler.SheetContentsHandler {// 編號 用戶名 手機(jī)號 入職日期 現(xiàn)住址private User user=null;@Overridepublic void startRow(int rowIndex) { //每一行的開始 rowIndex代表的是每一個(gè)sheet的行索引if(rowIndex==0){user = null;}else{user = new User();}}@Override //處理每一行的所有單元格public void cell(String cellName, String cellValue, XSSFComment comment) {if(user!=null){String letter = cellName.substring(0, 1); //每個(gè)單元名稱的首字母 A B Cswitch (letter){case "A":{user.setId(Long.parseLong(cellValue));break;}case "B":{user.setUserName(cellValue);break;}}}}@Overridepublic void endRow(int rowIndex) { //每一行的結(jié)束if(rowIndex!=0){System.out.println(user);}} }

2.自定義解析

package com.itheima.test;import org.apache.poi.openxml4j.opc.OPCPackage; import org.apache.poi.openxml4j.opc.PackageAccess; import org.apache.poi.xssf.eventusermodel.XSSFReader; import org.apache.poi.xssf.eventusermodel.XSSFSheetXMLHandler; import org.apache.poi.xssf.model.SharedStringsTable; import org.apache.poi.xssf.model.StylesTable; import org.xml.sax.InputSource; import org.xml.sax.XMLReader; import org.xml.sax.helpers.XMLReaderFactory;import java.io.InputStream;/*** 自定義Excel解析器*/ public class ExcelParser {public void parse (String path) throws Exception {//1.根據(jù)Excel獲取OPCPackage對象OPCPackage pkg = OPCPackage.open(path, PackageAccess.READ);try {//2.創(chuàng)建XSSFReader對象XSSFReader reader = new XSSFReader(pkg);//3.獲取SharedStringsTable對象SharedStringsTable sst = reader.getSharedStringsTable();//4.獲取StylesTable對象StylesTable styles = reader.getStylesTable();XMLReader parser = XMLReaderFactory.createXMLReader();// 處理公共屬性:Sheet名,Sheet合并單元格parser.setContentHandler(new XSSFSheetXMLHandler(styles,sst, new SheetHandler(), false));XSSFReader.SheetIterator sheets = (XSSFReader.SheetIterator) reader.getSheetsData();while (sheets.hasNext()) {InputStream sheetstream = sheets.next();InputSource sheetSource = new InputSource(sheetstream);try {parser.parse(sheetSource);} finally {sheetstream.close();}}} finally {pkg.close();}} }

3.測試

用戶模式下讀取測試Excel文件直接內(nèi)存溢出,測試Excel文件映射到內(nèi)存中還是占用了不少內(nèi)存;事件模式下可以流暢的運(yùn)行。

public class POIDemo5 {public static void main(String[] args) throws Exception{new ExcelParser().parse("C:\\Users\\syl\\Desktop\\百萬用戶數(shù)據(jù)的導(dǎo)出.xlsx");} }

CSV文件

CSV文件:Comma-Separated Values,中文叫逗號分隔值或者字符分割值,其文件以純文本的形式存儲(chǔ)表格數(shù)據(jù)。該文件是一個(gè)字符序列,可以由任意數(shù)目的記錄組成,記錄間以某種換行符分割。每條記錄由字段組成,字段間的分隔符是其他字符或者字符串。所有的記錄都有完全相同的字段序列,相當(dāng)于一個(gè)結(jié)構(gòu)化表的純文本形式。

用文本文件、excel或者類似與文本文件的編輯器都可以打開CSV文件。

使用opencsv類庫來導(dǎo)出csv文
依賴:

<dependency><groupId>com.opencsv</groupId><artifactId>opencsv</artifactId><version>4.5</version> </dependency>

opencsv常用API:

寫入到csv文件會(huì)用到CSVWriter對象,創(chuàng)建此對象常見API如下:
CSVWriter(Writer writer);
CSVWriter(Writer writer, char separator);
CSVWriter(Writer writer, char separator, char quotechar);

構(gòu)造器涉及到的三個(gè)參數(shù):

  • reader:讀取文件的流對象,常有的是BufferedReader,InputStreamReader。
  • separator:用于定義前面提到的分割符,默認(rèn)為逗號CSVWriter.DEFAULT_SEPARATOR用于分割各列。
  • quotechar:用于定義各個(gè)列的引號,有時(shí)候csv文件中會(huì)用引號或者其它符號將一個(gè)列引起來,例如一行可能是:“1”,“2”,“3”,如果想讀出的字符不包含引號,就可以把參數(shù)設(shè)為:"CSVWriter.NO_QUOTE_CHARACTER "
  • 使用CSVWriter對象寫入數(shù)據(jù)常用的方法如下:
    writerAll(List<String[]> allLines);
    writerNext(String… nextLine);

    讀取csv文件會(huì)用到CSVReader對象,創(chuàng)建此對象常見API如下:
    CSVReader(Reader reader)
    CSVReader(Reader reader, char separator)
    CSVReader(Reader reader, char separator, char quotechar)

    導(dǎo)出csv文件:

    /*** 導(dǎo)出百萬數(shù)據(jù)到CSV文件* @param response* @throws Exception*/public void downLoadCSV(HttpServletResponse response) throws Exception {ServletOutputStream outputStream = response.getOutputStream();//導(dǎo)出String fileName = "csv百萬數(shù)據(jù)導(dǎo)出.csv";response.setHeader("content-disposition","attachment;filename="+new String(fileName.getBytes(),"ISO8859-1"));response.setContentType("text/csv");//寫文件CSVWriter csvWriter = new CSVWriter(new OutputStreamWriter(outputStream,"UTF-8"));//寫第一行//設(shè)置小標(biāo)題String[] title = new String[]{"編號", "姓名", "手機(jī)號", "入職日期", "現(xiàn)住址"};csvWriter.writeNext(title);int page = 1;while (true) {List<User> userList = this.findPage(1, 2000000);if(CollectionUtils.isEmpty(userList)){break;}for(User user : userList){csvWriter.writeNext(new String[]{user.getId().toString(),user.getUserName(),user.getPhone(),simpleDateFormat.format(user.getHireDate()),user.getAddress()});}page++;csvWriter.flush();}csvWriter.close();}

    讀取csv文件

    import com.opencsv.CSVReader;import java.io.FileReader; import java.text.SimpleDateFormat; import java.time.Year; import java.util.List;//讀取百萬級數(shù)據(jù)的csv文件 public class CsvDemo {`在這里插入代碼片`private static SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");public static void main(String[] args) throws Exception {CSVReader csvReader = new CSVReader(new FileReader("d:\\百萬用戶數(shù)據(jù)的導(dǎo)出.csv"));String[] titles = csvReader.readNext(); //讀取到第一行 是小標(biāo)題 // "編號","姓名","手機(jī)號","入職日期","現(xiàn)住址"User user = null;while (true){user = new User();String[] content = csvReader.readNext();if(content==null){break;}user.setId(Long.parseLong(content[0]));user.setUserName(content[1]);user.setPhone(content[2]);user.setHireDate(simpleDateFormat.parse(content[3]));user.setAddress(content[4]);System.out.println(user);}} }

    POI導(dǎo)出Word(.docx)

    API介紹

    XWPFDocument代表一個(gè)docx文檔,其可以用來讀docx文檔,也可以用來寫docx文檔

    一個(gè)文檔包含多個(gè)段落,一個(gè)段落包含多個(gè)Runs文本,一個(gè)Runs包含多個(gè)Run,Run是文檔的最小單元

    獲取所有段落:List paragraphs = word.getParagraphs();

    獲取一個(gè)段落中的所有片段Runs:List xwpfRuns = xwpfParagraph.getRuns();

    獲取一個(gè)Runs中的一個(gè)Run:XWPFRun run = xwpfRuns.get(index);

    2、poi操作word中的表格

    一個(gè)文檔包含多個(gè)表格,一個(gè)表格包含多行,一行包含多列單元格

    獲取所有表格:List xwpfTables = doc.getTables();

    獲取一個(gè)表格中的所有行:List xwpfTableRows = xwpfTable.getRows();

    獲取一行中的所有列:List xwpfTableCells = xwpfTableRow.getTableCells();

    獲取一格里的內(nèi)容:List paragraphs = xwpfTableCell.getParagraphs();

    之后和正文段落一樣

    思路分析

    制作一個(gè)word模板,把動(dòng)態(tài)的內(nèi)容先寫特殊字符然后替換,表格自己創(chuàng)建然后向表格中放內(nèi)容

    代碼實(shí)現(xiàn)

    1.準(zhǔn)備方法:一個(gè)是想指定的單元格中放入圖片,另一個(gè)是 復(fù)制word中表格的行

    /*** 向單元格寫入圖片*/private void setCellImage(XWPFTableCell cell, File imageFile) {XWPFRun run = cell.getParagraphs().get(0).createRun();//流會(huì)自動(dòng)關(guān)閉try(FileInputStream inputStream = new FileInputStream(imageFile)) {//輸入流,圖片類型,文件名,高度,寬度(圖片擴(kuò)大倍數(shù))run.addPicture(inputStream,XWPFDocument.PICTURE_TYPE_JPEG,imageFile.getName(), Units.toEMU(100), Units.toEMU(50));} catch (Exception e) {e.printStackTrace();}}/*** 用戶深復(fù)制行*/private void copyRow(XWPFTable table, XWPFTableRow sourceRow, int rowIndex) {XWPFTableRow targetRow = table.insertNewTableRow(rowIndex);//設(shè)置行屬性targetRow.getCtRow().setTrPr(sourceRow.getCtRow().getTrPr());//獲取源行的單元格--設(shè)置單元格屬性List<XWPFTableCell> cells = sourceRow.getTableCells();//if(CollectionUtils.isEmpty(cells)){return;}XWPFTableCell targetCell = null;for (XWPFTableCell cell : cells) {targetCell = targetRow.addNewTableCell();//附上單元格的樣式//單元格的樣式targetCell.getCTTc().setTcPr(cell.getCTTc().getTcPr());//單元個(gè)中段落屬性targetCell.getParagraphs().get(0).getCTP().setPPr(cell.getParagraphs().get(0).getCTP().getPPr());}}

    2.下載用戶合同

    /*** 下載用戶合同* @param id*/public void downloadContract(Long id,HttpServletResponse response) throws Exception {//1.讀取到模板//獲取項(xiàng)目的根目錄,創(chuàng)建目錄---獲取絕對路徑File rootPath = new File(ResourceUtils.getURL("classpath:").getPath());File templateFile = new File(rootPath.getAbsolutePath(), "word_template/contract_template.docx");XWPFDocument document = new XWPFDocument(new FileInputStream(templateFile));//2.查詢當(dāng)前用戶--->map方便操作User user = this.findById(id);HashMap<String, String> hashMap = new HashMap<>();hashMap.put("userName",user.getUserName());hashMap.put("hireDate",simpleDateFormat.format(user.getHireDate()));hashMap.put("address",user.getAddress());//3.1.替換數(shù)據(jù)--處理正文List<XWPFParagraph> paragraphs = document.getParagraphs();for (XWPFParagraph paragraph : paragraphs) {List<XWPFRun> runs = paragraph.getRuns();for (XWPFRun run : runs) {String text = run.getText(0);//循環(huán)遍歷是否包含map的keyfor (String key : hashMap.keySet()) {if(text.contains(key)){//如果包含,替換掉run.setText(text.replaceAll(key,hashMap.get(key)),0);}}}}//3.2.表格數(shù)據(jù)List<Resource> resources = user.getResourceList();//獲取表格XWPFTable table = document.getTables().get(0);//獲取模板的第一行XWPFTableRow row = table.getRow(0);//存放東西,向表格中添加行int rowIndex = 1;for (Resource resource : resources) {//添加行//table.addRow(row);copyRow(table,row,rowIndex);XWPFTableRow tableRow = table.getRow(rowIndex);tableRow.getCell(0).setText(resource.getName());tableRow.getCell(1).setText(resource.getPrice().toString());tableRow.getCell(2).setText(resource.getNeedReturn()?"需要":"不需要");//照片處理File imageFile = new File(rootPath, "/static"+resource.getPhoto());setCellImage(tableRow.getCell(3),imageFile);rowIndex++;}//4.導(dǎo)出wordString fileName = "員工"+user.getUserName()+"合同.docx";response.setHeader("content-disposition","attachment;filename="+new String(fileName.getBytes(),"ISO8859-1"));response.setContentType("application/vnd.openxmlformats-officedocument.wordprocessingml.document");document.write(response.getOutputStream());}

    總結(jié)

    以上是生活随笔為你收集整理的报表技术2(百万数据导入导出,POI操作word)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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

    国产午夜不卡 | 久久精品成人 | 不卡日韩av | 国产精品久久久久久五月尺 | 99久久精品免费看国产 | 久久天堂影院 | 国内精品久久久久影院优 | 久久电影国产免费久久电影 | 亚洲五月婷婷 | 美女视频黄是免费的 | 欧美激情奇米色 | 99精品欧美一区二区 | 久久久久久久久久久高潮一区二区 | 青青河边草免费 | a黄色一级 | 久免费视频 | 国产手机av在线 | 久久精品99北条麻妃 | av电影在线观看完整版一区二区 | 国语精品免费视频 | 久久久久免费精品 | 久久国产精品电影 | 国产夫妻自拍av | 国产亚州精品视频 | 国产成人av| 在线免费观看涩涩 | 99精品在线看 | 欧美日韩久久一区 | av在线一| 欧美在线一 | 婷婷丁香激情 | 毛片1000部免费看 | 色久天| 伊人小视频 | 婷婷六月综合网 | 欧美一区二区三区在线看 | 精品亚洲男同gayvideo网站 | 蜜臀aⅴ精品一区二区三区 久久视屏网 | 国产成人久久精品77777 | 国产精品精品视频 | 久久久电影网站 | 看v片 | 超碰午夜| 亚洲热久久 | 国产亚洲综合性久久久影院 | 99日精品 | www.少妇| 一级黄色片在线观看 | 91在线在线观看 | 91精品视频免费观看 | 国产成人黄色网址 | 日韩最新理论电影 | 黄在线免费看 | 亚洲人成人在线 | 国产护士在线 | 欧美性色19p| 国产一级电影免费观看 | 免费男女羞羞的视频网站中文字幕 | 欧美日韩亚洲在线观看 | 麻豆成人网 | 午夜免费视频网站 | 五月开心六月伊人色婷婷 | 五月婷婷激情综合 | 久久精品99国产精品 | 久久婷婷五月综合色丁香 | 国产成年免费视频 | 狠狠色伊人亚洲综合网站野外 | 国内精品久久久久久久久久久 | 黄色片网站 | 超碰午夜 | 国产无遮挡猛进猛出免费软件 | 日韩精品2区 | 伊甸园永久入口www 99热 精品在线 | 少妇搡bbb| 一区二区三区四区五区在线 | 激情欧美一区二区三区免费看 | 久久爽久久爽久久av东京爽 | 91女神的呻吟细腰翘臀美女 | 国产精品大片免费观看 | 波多野结衣一区二区三区中文字幕 | 狠狠色狠狠色综合日日小说 | 欧美亚洲另类在线视频 | 日韩经典一区二区三区 | 亚洲伦理一区二区 | 久久精品国产精品亚洲精品 | 午夜av网站 | 超碰.com| 亚洲激精日韩激精欧美精品 | 精品久久久免费视频 | 一区二区三区四区五区在线 | 久久久综合 | 国产精品永久久久久久久久久 | 午夜国产一区二区 | 九月婷婷综合网 | 四虎成人精品永久免费av | 久久久久久久久久久久久9999 | 9在线观看免费高清完整 | 精品国产免费av | 夜夜躁日日躁狠狠久久av | 国产精品一区二区在线免费观看 | 久久伦理 | 日本公妇在线观看 | av免费在线观 | 国产高清久久 | 久久久久国产精品厨房 | 99re久久资源最新地址 | 国产精品久久久久久久久久久免费看 | 欧美另类一二三四区 | 在线观看中文字幕第一页 | 日韩高清黄色 | 日韩网站在线看片你懂的 | 中文在线最新版天堂 | 日韩在线观看中文 | 在线观看黄色小视频 | 成人一级免费电影 | 一区二区三区在线视频观看58 | 国际精品久久 | 成人一级在线观看 | 免费在线日韩 | 色a在线观看 | 中文字幕在线视频网站 | 一区二区三区四区精品 | 96视频免费在线观看 | 亚洲精品www.| 一级性av | 国产成人精品久久亚洲高清不卡 | 国产原创在线 | 久久av免费 | 97精品超碰一区二区三区 | 狠狠色丁香久久婷婷综合丁香 | 青春草国产视频 | 91香蕉视频好色先生 | 天天干天天做天天爱 | 蜜臀av性久久久久蜜臀aⅴ流畅 | 国产夫妻性生活自拍 | 久久新| 亚洲欧洲日韩 | 精品一区电影国产 | 久久精品这里热有精品 | 国产精品一区二区三区电影 | 成年人在线观看网站 | 亚洲黄色免费网站 | 免费v片| 日日躁夜夜躁xxxxaaaa | 中文字幕一区二区三区四区视频 | 国产二区精品 | 日韩av片在线 | 九色视频网 | 久久久久久蜜av免费网站 | 日日日爽爽爽 | 亚洲欧美综合精品久久成人 | 国产成本人视频在线观看 | 久青草国产在线 | 久久99久久99精品免观看软件 | 激情深爱.com| 日韩欧美高清 | 超碰国产在线 | 精品久久久久久久久久久久 | 亚洲一级片 | 国产精品久久久久久久久久不蜜月 | 国产精品久久久久久久久久白浆 | 13日本xxxxxⅹxxx20 | 日韩精品网址 | 永久免费看av | 91精品国自产在线偷拍蜜桃 | 中文字幕av在线电影 | 欧美资源| 在线观看完整版 | 亚洲无在线 | 免费男女羞羞的视频网站中文字幕 | 成人网色 | 麻豆精品视频在线观看免费 | 一区二区三区日韩在线 | 丝袜制服综合网 | 一级理论片在线观看 | 天天摸天天舔 | 精品国产伦一区二区三区观看说明 | 国产精品入口久久 | 日韩区欠美精品av视频 | 日韩欧美xxxx | 日本三级人妇 | 操少妇视频 | 欧美精品免费一区二区 | 日韩免费av在线 | 久久精品美女 | 在线中文字幕一区二区 | 国精产品999国精产品视频 | 成人影片免费 | 久久视频这里只有精品 | 日韩动态视频 | 91高清免费在线观看 | 日日摸日日碰 | 亚洲国产精品99久久久久久久久 | 日本性生活一级片 | 成人毛片在线观看视频 | 久草免费新视频 | 97超碰人人澡人人 | 成人免费视频播放 | 亚洲午夜精品久久久久久久久 | 国产在线p| 久久国产精品免费观看 | 99r国产精品| 日韩网站中文字幕 | 免费视频一级片 | 国产精品久久在线 | 成人a级网站| 精选久久| 免费av在线网站 | 国产精品色在线 | 人人爱在线视频 | 九九激情视频 | 久草com | 99久久99久久精品免费 | 欧美在线视频免费 | 日一日干一干 | 成人免费观看视频网站 | 日韩黄色一级电影 | 久久夜色精品亚洲噜噜国4 午夜视频在线观看欧美 | 国产又粗又猛又黄又爽的视频 | 在线视频麻豆 | 久久99久久99精品中文字幕 | 高清av在线免费观看 | 免费看成人av| 国产精品久久久精品 | 精品少妇一区二区三区在线 | 欧美视频在线观看免费网址 | 日韩欧美综合视频 | 国产精品系列在线播放 | 国产在线不卡精品 | 日韩av手机在线看 | 天天天天射 | 国产美女久久 | 免费日韩 精品中文字幕视频在线 | 欧美日本日韩aⅴ在线视频 插插插色综合 | 日韩av在线资源 | 婷婷精品国产一区二区三区日韩 | 欧美日韩中文视频 | 免费观看一区二区 | 高清av中文在线字幕观看1 | 人人爱人人射 | 亚洲妇女av | 五月激情亚洲 | 亚洲成人精品影院 | 色婷婷国产精品 | 中文字幕在线观看免费高清完整版 | 日韩电影在线观看一区 | 综合网av| 精品成人久久 | 精品综合久久久 | 久草在线观看视频免费 | 精品视频久久 | 欧美性生交大片免网 | 98久9在线 | 免费 | 精品国偷自产国产一区 | 国产精品24小时在线观看 | 一区在线电影 | 欧美激情精品 | 亚洲人成人在线 | 久久夜色精品国产欧美乱 | 久久热首页| 国产精品第三页 | 欧美一二三区在线观看 | 五月天丁香亚洲 | 国产精品综合久久久久 | 丝袜美女在线观看 | 蜜臀av.com| 欧美精品资源 | av一区二区在线观看中文字幕 | 天堂麻豆 | 日本黄区免费视频观看 | 国产一区二区三区高清播放 | 黄网站污| 国产中文字幕亚洲 | av免费在线观 | 四虎视频 | 国产亚洲精品美女久久 | 美女免费视频黄 | 2017狠狠干 | 99re国产视频| 免费十分钟 | www.色午夜,com | 91精品高清 | 日韩色av色资源 | 日韩欧美视频一区二区 | 97国产| 国产三级国产精品国产专区50 | 成人在线观看日韩 | 欧美日韩免费在线视频 | 国产在线观看免费观看 | 日韩欧美高清在线观看 | 182午夜在线观看 | 国产中文字幕一区二区 | 久久99视频免费 | 尤物九九久久国产精品的分类 | 六月色丁| 国产在线不卡视频 | 欧美久久99 | 日本成人黄色片 | 欧美日韩高清免费 | 波多野结衣视频一区 | 亚洲国产精品99久久久久久久久 | 1区2区3区在线观看 三级动图 | 国产资源在线播放 | 中国一级片在线播放 | 99免费在线| 欧美日韩国产精品一区二区三区 | 日韩久久精品一区二区三区 | 在线一区电影 | 色婷婷激情五月 | 91av成人 | 黄色的网站免费看 | 九九99 | 色婷婷婷| 国产专区在线视频 | 激情综合狠狠 | 亚洲国产三级 | 色丁香久久 | www.香蕉视频在线观看 | 天天舔天天搞 | 美女视频黄网站 | 在线观看亚洲a | 欧美特一级| 久久影院亚洲 | 亚洲精品永久免费视频 | 国产91影视 | 天天天色综合a | 国产片免费在线观看视频 | 日韩电影在线一区 | 九九免费在线观看 | 欧美在线1区| 国产精品久久久久av福利动漫 | 少妇视频一区 | 久久精品综合 | 精品a在线 | 欧美日韩中文国产一区发布 | 日本久久成人中文字幕电影 | 国产色视频一区二区三区qq号 | 免费av黄色 | 91自拍成人 | 欧美a级免费视频 | 91精品国产九九九久久久亚洲 | 中文字幕丰满人伦在线 | 亚洲精品啊啊啊 | 久久爱资源网 | 色91在线视频 | 成人精品一区二区三区电影免费 | 亚洲高清激情 | 中文字幕高清av | 人人澡人人干 | 欧美午夜寂寞影院 | 久久91久久久久麻豆精品 | 久久国语露脸国产精品电影 | 久久久国产影视 | 九九免费视频 | 国产精品 中文在线 | 中国精品一区二区 | 色欧美日韩 | 欧美在线99| 欧美在一区 | 久久国产美女 | 国产日韩精品在线观看 | 在线看av的网址 | 国产精品精品久久久久久 | 亚州人成在线播放 | 中文字幕在线观看视频网站 | 欧美精品国产综合久久 | 97精品久久 | 91xav | 国产精品黄色在线观看 | 不卡av电影在线 | 亚洲精品18日本一区app | 五月婷婷深开心 | 成人黄色小说在线观看 | 激情五月综合 | 丁香资源影视免费观看 | 国产又粗又猛又爽又黄的视频先 | 国产午夜免费视频 | 五月婷婷操 | 人人爱夜夜操 | 精品夜夜嗨av一区二区三区 | 精品国产欧美一区二区三区不卡 | 日韩3区 | 国产香蕉久久精品综合网 | 激情开心网站 | 亚洲精品国产综合99久久夜夜嗨 | 日韩精品一区二区在线 | 亚洲资源在线 | 狠狠色丁香婷婷综合视频 | 麻豆91网站 | 西西www444 | 欧美在线aa | 久久a级片 | 久久精品久久精品 | 亚洲黄色av一区 | 国产成人精品av在线观 | 在线观看mv的中文字幕网站 | 中文字幕在线日亚洲9 | 成人中心免费视频 | 一区二区三区免费在线播放 | 精品一区二区在线观看 | 国产福利免费在线观看 | av成人免费 | 99成人精品| 天天干天天操天天拍 | 久久国产精品一区二区三区 | 国产精品麻豆三级一区视频 | 国产在线不卡 | 亚洲国产电影在线观看 | 亚洲成人免费观看 | 99草视频在线观看 | 久久免费av | 国产精品免费不卡 | 色干干 | 一级黄色片网站 | 天天爱天天操 | 国产特级毛片aaaaaaa高清 | 久久久久这里只有精品 | 国产原创中文在线 | 国产正在播放 | 欧美 另类 交 | 五月婷婷激情综合网 | 亚洲成人黄色在线 | 91免费观看国产 | 日韩欧美精品在线视频 | 麻豆 videos | 免费看成人片 | bbw av| 成人在线视频在线观看 | 黄a网站 | 久久伊人爱| 欧美在线视频二区 | 国产精品资源在线观看 | 成年人免费在线 | 永久免费毛片在线观看 | 欧美精品免费在线 | 精品免费久久久久久 | 国产一区二区综合 | 日韩四虎| 国产无遮挡又黄又爽馒头漫画 | 欧美一区二区三区在线视频观看 | 黄污网站在线 | 青青草国产精品视频 | 国产亚洲资源 | 黄色毛片电影 | 国产色婷婷精品综合在线手机播放 | 伊人狠狠色| 亚洲精品欧美专区 | 波多野结衣电影一区二区 | 91在线播放国产 | sesese图片| 丁香久久五月 | 最近中文字幕视频完整版 | 99精品视频免费看 | 国内精品毛片 | 国内精品久久久久 | 久久9999久久免费精品国产 | 亚洲综合在线五月 | 欧洲一区二区三区精品 | 国产精品色婷婷 | 99精品欧美一区二区蜜桃免费 | 麻豆视频国产 | 最新国产福利 | 91精品国产一区 | 一级性av | 亚洲精品久久久蜜臀下载官网 | 波多野结衣在线观看一区二区三区 | 最近更新的中文字幕 | 天天干天天操天天 | 久草精品在线 | 久久成人黄色 | 国产精品麻豆视频 | 91黄色在线看 | 激情中文字幕 | 人人澡人| aa一级片| 狠狠干天天色 | 日韩欧美高清 | 国产资源免费 | 国产精品一区二区在线观看 | 波多野结衣电影一区二区 | 激情视频综合网 | 久久久影院一区二区三区 | 在线看v片成人 | 国产黄色成人av | 久久精品福利视频 | 蜜桃视频精品 | 中文字幕中文字幕在线中文字幕三区 | av成年人电影 | 亚洲电影一区二区 | 国色天香永久免费 | 欧美日韩伦理在线 | 久久综合九色综合97婷婷女人 | 开心色激情网 | 久草在线观 | 五月天丁香综合 | 97国产精品视频 | 国产精品亚州 | 国产在线观看二区 | 久久久免费精品 | 国产成人精品福利 | 日韩精品免费在线观看 | 国产在线观看a | 美女视频国产 | 视频一区在线免费观看 | 狠狠干成人综合网 | 日韩久久午夜一级啪啪 | 日韩精品一区二区在线观看视频 | 国内精品久久久 | 久久免费精品视频 | 三级a视频| 久久久免费视频播放 | 久久亚洲电影 | 国产视| 狠狠色综合欧美激情 | av在线电影播放 | av中文在线影视 | se视频网址 | 黄色一集片 | 国产一区二区电影在线观看 | 久久婷婷一区 | 日韩中文在线观看 | 久久久久免费精品国产小说色大师 | 日韩簧片在线观看 | 亚洲综合视频在线观看 | 日韩电影黄色 | 成人av片免费看 | 欧美另类高清 | 国产免费亚洲高清 | 日韩va欧美va亚洲va久久 | 久久视频精品在线 | 国内久久精品视频 | 日韩av手机在线观看 | 天天操夜夜拍 | 久草在线视频资源 | av网站免费在线 | av黄色av| 国产精品少妇 | 中文字幕在线观看国产 | 在线观看网站黄 | 人人玩人人添人人澡超碰 | 久久99热这里只有精品国产 | 亚洲黄色成人网 | 久久久久福利视频 | a v在线视频 | 丁香激情综合久久伊人久久 | 中文高清av| 中国黄色一级大片 | 久久久久五月 | 日日夜日日干 | 久操伊人| 久久免费看a级毛毛片 | 最近免费中文字幕大全高清10 | 久久人人爽 | 亚洲第一区在线播放 | 精品国产99国产精品 | 欧美日韩精品在线播放 | 亚洲91在线 | 91午夜精品 | www黄色 | 国产色在线 | 奇米777777| 男女拍拍免费视频 | 精品99免费 | 久久久久激情电影 | 久久成人视屏 | 国产成人精品999 | 日韩欧美成 | 日韩a级免费视频 | 99免费在线播放99久久免费 | 在线免费色视频 | 91伊人久久大香线蕉蜜芽人口 | 在线黄色国产电影 | 九九色在线观看 | av网站免费线看精品 | 成人a级大片 | 97人人超碰在线 | 中文字幕色婷婷在线视频 | 免费久久99精品国产婷婷六月 | 久久久久久久久久久国产精品 | 黄av资源 | 四虎欧美 | 国产精品黄色影片导航在线观看 | 久久久www成人免费精品 | 91高清免费在线观看 | 中文区中文字幕免费看 | 免费在线看v | 亚洲一区久久 | 成人av在线电影 | 国产精久久 | 色欧美成人精品a∨在线观看 | 91热爆视频| 亚洲黄色影院 | 狠狠婷婷 | 国产福利电影网址 | 国产精品福利一区 | 国产精品免费视频观看 | 色国产在线| 国产又粗又长的视频 | 97在线观看免费观看高清 | 亚洲精选视频免费看 | 国产伦理久久 | 亚洲一区免费在线 | av软件在线观看 | 韩国精品在线 | 亚洲综合在线发布 | 成人97人人超碰人人99 | 日韩成人精品在线观看 | 欧美成人h版在线观看 | 国产精品com | 国产黄色片一级三级 | 久久精品1区 | 婷婷亚洲最大 | 人人舔人人插 | 中文字幕在线观看网址 | 亚洲精品一区二区三区四区高清 | 国产精品白虎 | 午夜av免费| 九九热1 | 人人插人人玩 | 国产成人一二三 | 黄p网站在线观看 | 欧美日韩精品网站 | 国产一级三级 | 国产精品av免费观看 | 不卡的av电影在线观看 | 欧美成年黄网站色视频 | 91九色视频在线播放 | 欧美99热 | 亚洲国产成人高清精品 | av超碰在线| 日产乱码一二三区别在线 | 久草视频免费在线播放 | 精品久久久久久久久久久久久久久久久久 | 一区二区三区免费网站 | 玖玖999| 久章草在线观看 | 亚洲午夜小视频 | 欧美激情视频在线免费观看 | 不卡的av电影在线观看 | 在线观看日韩精品视频 | 干综合网 | 国产精品久久二区 | 国产黄色片一级三级 | 婷婷视频导航 | 成人av资源 | 97超碰网 | 日韩免费看 | 成片免费| 久久亚洲精品电影 | 亚洲干视频在线观看 | 久久99电影 | 亚洲午夜久久久久久久久电影网 | 久久综合婷婷 | 久久噜噜少妇网站 | 综合久久五月天 | 婷婷深爱网 | 国产精品9999久久久久仙踪林 | 国产在线精品一区 | 麻豆免费精品视频 | 中文字幕在线播放av | 99精品国产在热久久下载 | 色多多在线观看 | 国产福利免费在线观看 | 99久久精品视频免费 | 精品国产精品久久一区免费式 | 狠狠色狠狠色合久久伊人 | 成人免费看片网址 | 日本色小说视频 | 天天曰视频 | 亚洲资源网| 欧美日韩高清一区二区 | 99久精品 | 亚洲一二三久久 | 欧美激情第28页 | 视频国产| 久人人| 久久久久久久久精 | 亚洲一级久久 | 精品1区2区3区 | 日韩精品欧美精品 | 久久久久久久久久久免费视频 | 亚洲理论视频 | 99热 精品在线 | 免费福利视频网站 | 免费观看性生交大片3 | 东方av免费在线观看 | 免费av小说| 欧美男同网站 | 亚洲综合一区二区精品导航 | 狠狠干夜夜操天天爽 | 久久久精品免费观看 | 超碰在线人 | 日韩欧美视频在线观看免费 | 欧美一进一出抽搐大尺度视频 | 在线免费观看国产 | 成人黄色小视频 | 中文字幕有码在线观看 | 国产色拍拍拍拍在线精品 | 国产一区自拍视频 | 狠狠色香婷婷久久亚洲精品 | 97夜夜澡人人爽人人免费 | 国产精品毛片久久蜜 | 国产一区电影在线观看 | 蜜臀av性久久久久av蜜臀三区 | 天天做天天爱夜夜爽 | 亚洲 欧洲 国产 精品 | 免费成人av网站 | 五月婷婷六月丁香在线观看 | 中文字幕第一页在线视频 | 午夜视频久久久 | 久国产在线播放 | 特级毛片在线免费观看 | 2022中文字幕在线观看 | 国产精品字幕 | 久久黄色小说 | 亚洲精品欧美精品 | 操高跟美女| 夜色.com | 69精品视频在线观看 | 免费久久精品视频 | 国产日韩中文字幕 | 免费高清在线观看成人 | 免费观看www视频 | 精品国产一区二区三区日日嗨 | 手机av网站 | 精品一区二区三区四区在线 | 日韩欧美在线视频一区二区 | 久久精品4 | 日韩免费一区二区三区 | 亚洲成av片人久久久 | 午夜在线看片 | av在线网站免费观看 | 国产免费久久 | 九九九热精品免费视频观看 | 日本深夜福利视频 | 又黄又爽又刺激视频 | 国产黄色片网站 | 麻豆国产精品va在线观看不卡 | 99久久精品久久久久久动态片 | 欧美二区视频 | 日韩高清一区在线 | 在线精品视频在线观看高清 | 狠狠操狠狠干天天操 | 在线视频欧美日韩 | 亚洲人成在线电影 | 91色蜜桃 | a√天堂资源 | 欧美一级免费在线 | 久久久伦理 | 久久桃花网 | 五月婷婷免费 | 激情网站网址 | 黄色动态图xx | 麻豆免费视频网站 | 国产精品久久久久久久久久久杏吧 | 中文字幕一区二区三区乱码不卡 | 九九免费精品 | 天天综合久久综合 | 伊人天天操 | 在线免费观看成人 | 色先锋资源网 | 在线免费观看黄色av | 五月婷婷黄色网 | 久久久久久综合网天天 | 中文字幕免费观看视频 | 日韩一级片观看 | 美女视频永久黄网站免费观看国产 | av在线在线 | 国产午夜在线观看视频 | 久久精品一区二区三区中文字幕 | 欧美 另类 交 | 亚洲黄色在线播放 | 奇米网8888 | 亚洲精品日韩一区二区电影 | 日韩va欧美va亚洲va久久 | 中文字幕中文字幕在线中文字幕三区 | av不卡网站| 亚洲资源网| 网站在线观看你们懂的 | 午夜精品久久久99热福利 | 日韩精品视频免费专区在线播放 | 国产123区在线观看 国产精品麻豆91 | 久久视了 | 色六月婷婷 | 色多多在线观看 | 国产高清在线精品 | 444av| 不卡国产视频 | 热九九精品| 国产激情电影综合在线看 | 六月婷婷色 | 久草在线视频国产 | 国产高清在线观看av | 天堂在线一区二区 | 日韩在线中文字幕 | 欧美激情视频在线观看免费 | 精品久久久久久久久中文字幕 | 亚洲精品高清在线 | 国产粉嫩在线观看 | 四虎精品成人免费网站 | 久久久久看片 | 天天爱天天操 | 免费性网站 | 成人a免费视频 | 免费观看的av网站 | 97视频免费在线看 | 亚洲精品在线一区二区 | 天天摸天天操天天爽 | 黄网站免费大全入口 | 亚洲精品国产成人av在线 | 免费看的国产视频网站 | 91av小视频 | 丁香网五月天 | 99国产一区 | 亚洲一区久久久 | 精品视频区 | 日日干天天爽 | 久久成人麻豆午夜电影 | 中文字幕视频一区二区 | 青春草免费在线视频 | 亚洲国产欧美在线看片xxoo | 国产一区二区免费 | 国产精品视频永久免费播放 | 青青河边草手机免费 | 亚洲色视频 | 亚州精品天堂中文字幕 | 国产美女免费看 | 国产一区免费观看 | 午夜三级大片 | 91免费试看 | 日韩av影视在线观看 | 精品国产一区二区三区久久久久久 | av丝袜美腿| 国产成人黄色片 | 麻豆视频免费在线播放 | 激情婷婷欧美 | 黄色aaa级片 | 尤物九九久久国产精品的分类 | 婷婷亚洲五月 | 婷婷色中文字幕 | 欧美性春潮 | 国内精品国产三级国产aⅴ久 | 亚洲精品国产欧美在线观看 | 国产精品一区二区av日韩在线 | 国产欧美久久久精品影院 | 午夜av影院| 丁香婷婷激情国产高清秒播 | 91丨九色丨国产在线 | 99热超碰在线 | 一区二区三区免费在线观看视频 | 亚洲成人av一区二区 | 亚洲日本成人 | 成人网页在线免费观看 | 日韩激情中文字幕 | 久久成人精品电影 | 午夜精品在线看 | 久久国产经典视频 | 日韩午夜一级片 | 在线观看免费视频你懂的 | 999成人免费视频 | 九九热免费视频在线观看 | 夜夜干夜夜 | 日韩欧美高清不卡 | 超级碰碰碰碰 | 成人在线免费观看网站 | 日韩精品一区二区免费视频 | 97国产精品 | 在线观看中文字幕一区二区 | 色网站黄 | 国产黄色大片 | 日本中文在线观看 | 国产中文字幕在线播放 | 日韩激情视频 | 国产成人91| 日批网站免费观看 | 久久99精品国产麻豆宅宅 | 国内精品亚洲 | 中文字幕色婷婷在线视频 | 国产精品高潮呻吟久久av无 | 五月婷婷在线观看视频 | 久草免费新视频 | 国产成人精品一区二区三区福利 | 97人人爽 | 国产成人精品一二三区 | 91视视频在线直接观看在线看网页在线看 | 精品国产日本 | 天天草天天干天天射 | 国产精品一区二区在线播放 | 在线观看日本韩国电影 | 99久在线精品99re8热视频 | 亚洲日本成人网 | 国产精品12 | 97在线观看视频 | 五月婷婷黄色 | 亚洲最快最全在线视频 | 亚洲午夜精品福利 | 婷婷激情网站 | 亚洲网站在线 | 一区二区三区动漫 | 久久久久久高潮国产精品视 | 亚洲aaa级| 亚洲黄色网络 | 麻豆91在线看| 日韩成人精品在线观看 | 五月婷丁香网 | av免费看av | 天天爽人人爽 | 五月婷婷综合在线 | 92av视频 | 日韩av成人免费看 | 97人人看| 亚洲国产小视频在线观看 | 中文在线a天堂 | 亚洲视频 一区 | 中文字幕在线观看91 | 久久国产精品免费一区二区三区 | 久久久亚洲成人 | 久久综合五月婷婷 | 成人久久精品 | 亚洲在线观看av | 久久视频在线观看中文字幕 | a视频在线观看免费 | 日本午夜在线亚洲.国产 | 怡红院av | 在线观看av中文字幕 | 成人午夜剧场在线观看 | 亚洲成a人片77777潘金莲 | 一区中文字幕在线观看 | 五月色综合 | 久久国产精品99久久人人澡 | 亚洲精品久久久蜜臀下载官网 | 色婷婷视频在线观看 | 日韩电影在线一区二区 | 奇米网网址 | 国产69精品久久久久久 | 激情视频一区二区三区 | 激情婷婷在线观看 | 91在线免费播放视频 | 午夜av一区二区三区 | 制服丝袜一区二区 | 碰超在线| 免费精品视频在线观看 | 四虎在线免费观看 | 在线观看视频亚洲 | 丰满少妇在线观看资源站 | 色在线亚洲 | 麻豆一区二区 | 精品久久网站 | 中文字幕4 | 成人黄视频 | 91视频一8mav | 伊人丁香| 最近久乱中文字幕 | 久草在线中文888 | 香蕉视频国产在线观看 | 成人黄色电影在线观看 | 欧美日韩不卡一区二区三区 | 在线观看深夜视频 | 91看片在线 | 91在线视频在线 | 国产亚洲精品女人久久久久久 | 精品亚洲一区二区三区 | 亚洲精品动漫在线 | 成年人免费av网站 | 日韩美女免费线视频 | 久久久国产精品视频 | 青青草在久久免费久久免费 | 五月婷婷狠狠 | 国产成人精品一区二区三区福利 | 黄色电影在线免费观看 | 五月婷婷综合在线视频 | 久久私人影院 | 国产一线二线三线在线观看 | 亚洲精品女 | 国产亚洲成av人片在线观看桃 | 久久精视频 | 狠狠躁日日躁狂躁夜夜躁av | 国产精品夜夜夜一区二区三区尤 | 国产精品理论片在线播放 | 国产在线精品一区二区不卡了 | 久草视频在线播放 | 久久99影院| 99视频精品免费视频 | 又黄又爽免费视频 | 国产欧美精品在线观看 | 国际精品网 | www天天操| 91秒拍国产福利一区 | 丁香六月在线观看 | 亚洲丁香久久久 | 91福利视频免费观看 | 免费国产一区二区视频 | 黄色视屏免费在线观看 | 九九热精品视频在线观看 | 国产中文字幕一区二区三区 | 99久热| 国内成人av| 欧美最猛性xxxxx(亚洲精品) |