当前位置:   article > 正文

Java使用POI库对excel进行操作

Java使用POI库对excel进行操作

excel转为图片

这个操作是要根据excel一行一行画出来的

package com.gxuwz.zjh.util;

import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Font;
import java.awt.FontMetrics;
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.text.DecimalFormat;
import java.util.ArrayList;
import java.util.List;
import javax.imageio.ImageIO;
import com.gxuwz.zjh.entity.Grid;
import com.gxuwz.zjh.entity.UserCell;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.CellStyle;
import org.apache.poi.ss.usermodel.CellType;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.ss.util.CellRangeAddress;
import org.apache.poi.xssf.usermodel.XSSFCell;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.springframework.stereotype.Component;

/**
 * @author FangZenglin
 * @date 2023年10月13日16:38
 */
@Component
public class ExcelZhuanTuPian {

    public  void toImage(String dizhipath,String mubiaopath){

        test(dizhipath,mubiaopath);
    }

    public static void test(String path,String mubiaopath)   {
        int sheetNum = 0;
        int imageWidth = 0;
        int imageHeight = 0;
        InputStream inputStream;
        try {
            inputStream = new FileInputStream(path);
            Workbook workbook;
            Sheet sheet;
            List<List<String>> excelList;

            int bgColorFlag = 1;
            if (path.split("\\.")[1].equals("xlsx")) {

                workbook = new XSSFWorkbook(inputStream);

                excelList = readXlsx(path, sheetNum);
            } else {

                workbook = new HSSFWorkbook(inputStream);

                excelList = readXls(path, sheetNum);

                bgColorFlag = 0;
            }
            sheet = workbook.getSheetAt(sheetNum);
            List<CellRangeAddress> rangeAddress = sheet.getMergedRegions();

            int totalRow = excelList.size() + 1;
            int totalCol = excelList.get(0).size();
            UserCell[][] cells = new UserCell[totalRow + 1][totalCol + 1];
            int[] rowPixPos = new int[totalRow + 1];
            rowPixPos[0] = 0;
            int[] colPixPos = new int[totalCol + 1];
            colPixPos[0] = 0;

            for (int i = 0; i < totalRow - 1; i++) {
                for (int j = 0; j < totalCol; j++) {
                    cells[i][j] = new UserCell();
                    cells[i][j].setCell(sheet.getRow(i).getCell(j));
                    cells[i][j].setRow(i);
                    cells[i][j].setCol(j);
                    boolean ifShow = !(sheet.isColumnHidden(j) || sheet.getRow(i)
                            .getZeroHeight());
                    cells[i][j].setShow(ifShow);
                    float widthPix = !ifShow ? 0
                            : (sheet.getColumnWidthInPixels(j));
                    if (i == 0) {
                        imageWidth += widthPix;
                    }
                    colPixPos[j + 1] = (int) (widthPix * 1.15 + colPixPos[j]);
                }
                boolean ifShow = (i >= 0);
                ifShow = ifShow && !sheet.getRow(i).getZeroHeight();
                float heightPoint = !ifShow ? 0 : (sheet.getRow(i).getHeightInPoints());
                imageHeight += heightPoint;
                rowPixPos[i + 1] = (int) (heightPoint * 96 / 72) + rowPixPos[i];
            }
            imageHeight = imageHeight * 96 / 72;
            imageWidth = imageWidth * 115 / 100;
            List<Grid> grids = new ArrayList<Grid>();
            for (int i = 0; i < totalRow - 1; i++) {
                for (int j = 0; j < totalCol; j++) {
                    Grid grid = new Grid();
                    grid.setX(colPixPos[j]);
                    grid.setY(rowPixPos[i]);
                    grid.setWidth(colPixPos[j + 1] - colPixPos[j]);
                    grid.setHeight(rowPixPos[i + 1] - rowPixPos[i]);
                    grid.setRow(cells[i][j].getRow());
                    grid.setCol(cells[i][j].getCol());
                    grid.setShow(cells[i][j].isShow());
                    int[] isInMergedStatus = isInMerged(grid.getRow(),
                            grid.getCol(), rangeAddress);
                    if (isInMergedStatus[0] == 0 && isInMergedStatus[1] == 0) {
                        continue;
                    } else if (isInMergedStatus[0] != -1
                            && isInMergedStatus[1] != -1) {
                        int lastRowPos = isInMergedStatus[0] > totalRow - 1 ? totalRow - 1 : isInMergedStatus[0];
                        int lastColPos = isInMergedStatus[1] > totalCol - 1 ? totalCol - 1 : isInMergedStatus[1];
                        grid.setWidth(colPixPos[lastColPos + 1] - colPixPos[j]);
                        grid.setHeight(rowPixPos[lastRowPos + 1] - rowPixPos[i]);
                    }
                    Cell cell = cells[i][j].getCell();
                    if (cell != null) {
                        CellStyle cs = cell.getCellStyle();
                        grid.setBgColor(cs.getFillForegroundColorColor());
                        org.apache.poi.ss.usermodel.Font font = workbook.getFontAt(cs.getFontIndex());
                        grid.setFont(font);
                        grid.setFtColor(cs.getFillBackgroundColorColor());
                        String strCell;
                        CellType cellType = cell.getCellTypeEnum();
                        switch (cellType) {
                            case STRING:
                                strCell = cell.getStringCellValue();
                                break;
                            case NUMERIC:
                                String str = String.valueOf(cell.getNumericCellValue());
                                if(str.contains("E")){
                                    String LeftEStr = str.toString().split("E")[0];
                                    strCell = LeftEStr.split("\\.")[0]+LeftEStr.split("\\.")[1];
                                }else{
                                    strCell = String.valueOf(cell.getNumericCellValue());
                                }
                                break;
                            case BLANK:
                                strCell = "";
                                break;
                            case FORMULA:
                                try {
                                    strCell = String.valueOf(cell.getNumericCellValue());
                                } catch (IllegalStateException e) {
                                    strCell = String.valueOf(cell.getRichStringCellValue());
                                }
                                break;
                            default:
                                strCell = "";
                                break;
                        }
                        if (cell.getCellStyle().getDataFormatString()
                                .contains("0.00%")) {
                            try {
                                double dbCell = Double.valueOf(strCell);
                                strCell = new DecimalFormat("0.00").format(dbCell * 100) + "%";
                            } catch (NumberFormatException e) {
                            }
                        }
                        grid.setText(strCell.matches("\\w*\\.0") ? strCell
                                .substring(0, strCell.length() - 2) : strCell);
                    }
                    grids.add(grid);
                }
            }

            BufferedImage image = new BufferedImage(imageWidth, imageHeight,BufferedImage.TYPE_INT_RGB);
            Graphics2D g2d = image.createGraphics();

            g2d.setColor(Color.white);
            g2d.fillRect(0, 0, imageWidth, imageHeight);
            g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_ON);
            g2d.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING,RenderingHints.VALUE_TEXT_ANTIALIAS_ON);
            g2d.setRenderingHint(RenderingHints.KEY_STROKE_CONTROL,RenderingHints.VALUE_STROKE_NORMALIZE);
            g2d.setRenderingHint(RenderingHints.KEY_TEXT_LCD_CONTRAST, 140);
            g2d.setRenderingHint(RenderingHints.KEY_FRACTIONALMETRICS,RenderingHints.VALUE_FRACTIONALMETRICS_ON);
            g2d.setRenderingHint(RenderingHints.KEY_RENDERING,RenderingHints.VALUE_RENDER_QUALITY);
            for (Grid g : grids) {
                if (!g.isShow()) {
                    continue;
                }
                // 绘制背景色
                if (bgColorFlag == 1) {
                    // Excel2010以及更高-->使用原单元格背景色
                    g2d.setColor(g.getBgColor() == null ? Color.white : g.getBgColor());
                } else {
                    // Excel2007以及更低-->使用白色作为背景色
                    g2d.setColor(Color.white);
                }
                g2d.fillRect(g.getX(), g.getY(), g.getWidth(), g.getHeight());
                g2d.setColor(Color.black);
                g2d.setStroke(new BasicStroke(1));
                g2d.drawRect(g.getX(), g.getY(), g.getWidth(), g.getHeight());
                g2d.setColor(g.getFtColor());
                Font font = g.getFont();
                if (font == null) {
                    continue;
                }
                FontMetrics fm = g2d.getFontMetrics(font);
                int strWidth = fm.stringWidth(g.getText());
                g2d.setFont(font);
                g2d.drawString(
                        g.getText(),
                        g.getX() + (g.getWidth() - strWidth) / 2,
                        g.getY() + (g.getHeight() - font.getSize()) / 2+ font.getSize());
            }
            // 表格最后一行有可能不显示,手动画上一行
            g2d.drawLine(0, imageHeight - 1, imageWidth - 4, imageHeight - 1);

            g2d.drawLine(imageWidth-1 , 0, imageWidth-1 , imageHeight-1);
            g2d.dispose();
            ImageIO.write(image, "png", new File(mubiaopath));
            workbook.close();
        } catch (FileNotFoundException e1) {
            e1.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        System.out.println("----Output to PNG file Success!----");
    }

    /**
     * 判断Excel中的单元格是否为合并单元格
     *
     * @param row
     * @param col
     * @param rangeAddress
     * @return 如果不是合并单元格返回{-1,-1},如果是合并单元格并且是一个单元格返回{lastRow,lastCol},
     *         如果是合并单元格并且不是第一个格子返回{0,0}
     */
    private static int[] isInMerged(int row, int col,
                                    List<CellRangeAddress> rangeAddress) {
        int[] isInMergedStatus = { -1, -1 };
        for (CellRangeAddress cra : rangeAddress) {
            if (row == cra.getFirstRow() && col == cra.getFirstColumn()) {
                isInMergedStatus[0] = cra.getLastRow();
                isInMergedStatus[1] = cra.getLastColumn();
                return isInMergedStatus;
            }
            if (row >= cra.getFirstRow() && row <= cra.getLastRow()) {
                if (col >= cra.getFirstColumn() && col <= cra.getLastColumn()) {
                    isInMergedStatus[0] = 0;
                    isInMergedStatus[1] = 0;
                    return isInMergedStatus;
                }
            }
        }
        return isInMergedStatus;
    }

    public static List<List<String>> readXlsx(String path, int pageNum)   {
        List<List<String>> resultList = new ArrayList<List<String>>();
        InputStream in;
        XSSFWorkbook xssfWorkbook;
        try {
            in = new FileInputStream(path);
            xssfWorkbook = new XSSFWorkbook(in);
            XSSFSheet xssfSheet = xssfWorkbook.getSheetAt(pageNum);
            if (xssfSheet != null) {
                for (int rowNum = 0; rowNum < xssfSheet.getLastRowNum() + 1; rowNum++) {
                    XSSFRow xssfRow = xssfSheet.getRow(rowNum);
                    int minColIX = xssfRow.getFirstCellNum();
                    int maxColIX = xssfRow.getLastCellNum();
                    List<String> rowList = new ArrayList<String>();
                    for (int colIX = minColIX; colIX < maxColIX; colIX++) {
                        XSSFCell cell = xssfRow.getCell(colIX);
                        if (cell != null) {
                            rowList.add(cell.toString());
                        }
                    }
                    resultList.add(rowList);
                }
            }
            xssfWorkbook.close();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return resultList;
    }

    // 读取xls文件内容
    public static List<List<String>> readXls(String path, int num)  {
        List<List<String>> resultList = new ArrayList<List<String>>();
        InputStream in;
        HSSFWorkbook hssfWorkbook;
        try {
            in = new FileInputStream(path);
            hssfWorkbook = new HSSFWorkbook(in);
            HSSFSheet hssfSheet = hssfWorkbook.getSheetAt(num);// 获取当前页
            if (hssfSheet != null) {
                for (int rowNum = 0; rowNum < hssfSheet.getLastRowNum() + 1; rowNum++) {
                    HSSFRow hssfRow = hssfSheet.getRow(rowNum);// 获取行数据
                    int minColIX = hssfRow.getFirstCellNum();// 第一行数据
                    int maxColIX = hssfRow.getLastCellNum();// 总行数
                    List<String> rowList = new ArrayList<String>();
                    // 遍历该行,处理该行数据
                    for (int colIX = minColIX; colIX < maxColIX; colIX++) {
                        HSSFCell cell = hssfRow.getCell(colIX);// 获取单元格
                        if (cell != null) {
                            rowList.add(cell.toString());
                        }
                    }
                    resultList.add(rowList);
                }
            }
            hssfWorkbook.close();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return resultList;
    }
}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97
  • 98
  • 99
  • 100
  • 101
  • 102
  • 103
  • 104
  • 105
  • 106
  • 107
  • 108
  • 109
  • 110
  • 111
  • 112
  • 113
  • 114
  • 115
  • 116
  • 117
  • 118
  • 119
  • 120
  • 121
  • 122
  • 123
  • 124
  • 125
  • 126
  • 127
  • 128
  • 129
  • 130
  • 131
  • 132
  • 133
  • 134
  • 135
  • 136
  • 137
  • 138
  • 139
  • 140
  • 141
  • 142
  • 143
  • 144
  • 145
  • 146
  • 147
  • 148
  • 149
  • 150
  • 151
  • 152
  • 153
  • 154
  • 155
  • 156
  • 157
  • 158
  • 159
  • 160
  • 161
  • 162
  • 163
  • 164
  • 165
  • 166
  • 167
  • 168
  • 169
  • 170
  • 171
  • 172
  • 173
  • 174
  • 175
  • 176
  • 177
  • 178
  • 179
  • 180
  • 181
  • 182
  • 183
  • 184
  • 185
  • 186
  • 187
  • 188
  • 189
  • 190
  • 191
  • 192
  • 193
  • 194
  • 195
  • 196
  • 197
  • 198
  • 199
  • 200
  • 201
  • 202
  • 203
  • 204
  • 205
  • 206
  • 207
  • 208
  • 209
  • 210
  • 211
  • 212
  • 213
  • 214
  • 215
  • 216
  • 217
  • 218
  • 219
  • 220
  • 221
  • 222
  • 223
  • 224
  • 225
  • 226
  • 227
  • 228
  • 229
  • 230
  • 231
  • 232
  • 233
  • 234
  • 235
  • 236
  • 237
  • 238
  • 239
  • 240
  • 241
  • 242
  • 243
  • 244
  • 245
  • 246
  • 247
  • 248
  • 249
  • 250
  • 251
  • 252
  • 253
  • 254
  • 255
  • 256
  • 257
  • 258
  • 259
  • 260
  • 261
  • 262
  • 263
  • 264
  • 265
  • 266
  • 267
  • 268
  • 269
  • 270
  • 271
  • 272
  • 273
  • 274
  • 275
  • 276
  • 277
  • 278
  • 279
  • 280
  • 281
  • 282
  • 283
  • 284
  • 285
  • 286
  • 287
  • 288
  • 289
  • 290
  • 291
  • 292
  • 293
  • 294
  • 295
  • 296
  • 297
  • 298
  • 299
  • 300
  • 301
  • 302
  • 303
  • 304
  • 305
  • 306
  • 307
  • 308
  • 309
  • 310
  • 311
  • 312
  • 313
  • 314
  • 315
  • 316
  • 317
  • 318
  • 319
  • 320
  • 321
  • 322
  • 323
  • 324
  • 325
  • 326
  • 327
  • 328
  • 329
  • 330
  • 331
  • 332

图片合并,模拟插入电子公章

package com.gxuwz.zjh.util;

import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;


/**
 * @author FangZenglin
 * @date 2023年10月13日15:30
 */
@Component
@Slf4j
public class ChaGongZhang {
    public static String s = "i61PdAClDxIs/8/6iSGOQQ==";
    public  void chagongzhang_suodui(String path_biao,String path_gongzhang,String path_mubiao) {
        try {

            BufferedImage image1 = ImageIO.read(new File(path_biao));

            BufferedImage image2 = ImageIO.read(new File(path_gongzhang));

            // 加载公章
        //    BufferedImage image3 = ImageIO.read(new File(path_gongzhang.replace("1","2")));

            int maxWidth = Math.max(image1.getWidth(), image2.getWidth());
            int maxHeight = Math.max(image1.getHeight(), image2.getHeight());
            BufferedImage combinedImage = new BufferedImage(maxWidth, maxHeight, BufferedImage.TYPE_INT_ARGB);

            Graphics2D g2d = combinedImage.createGraphics();

            g2d.drawImage(image1, 0, 0, null);

            // 计算第二张图片的位置
            int x = 150;
            int y = 365;//所队部门意见
            /**
             *int x = 480;
             *int y = 350;//人训部门意见
             */
            /**
             *int x = 780;
             *int y = 350;//单位主管领导
             */
            /**
             *int x = 1250;
             *int y = 350;//单位主要领导
             */
            g2d.drawImage(image2, x, y, null);
         //   g2d.drawImage(image3, x, y, null); 公章插入
            ImageIO.write(combinedImage, "png", new File(path_mubiao));
            g2d.dispose();
            log.info("图片合并成功!");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }



    public  void chagongzhang_renxun(String path_biao,String path_gongzhang,String path_mubiao) {
        try {
            // 加载第一张图片
            BufferedImage image1 = ImageIO.read(new File(path_biao));

            // 加载第二张图片
            BufferedImage image2 = ImageIO.read(new File(path_gongzhang));

            // 加载公章
           // BufferedImage image3 = ImageIO.read(new File(path_gongzhang.replace("1","2")));


            int maxWidth = Math.max(image1.getWidth(), image2.getWidth());
            int maxHeight = Math.max(image1.getHeight(), image2.getHeight());
            BufferedImage combinedImage = new BufferedImage(maxWidth, maxHeight, BufferedImage.TYPE_INT_ARGB);

            Graphics2D g2d = combinedImage.createGraphics();

            g2d.drawImage(image1, 0, 0, null);

             int x = 450;
             int y = 380;//人训部门意见

            /**
             *int x = 780;
             *int y = 350;//单位主管领导
             */
            /**
             *int x = 1250;
             *int y = 350;//单位主要领导
             */
            g2d.drawImage(image2, x, y, null);
            //   g2d.drawImage(image3, x, y, null); 公章插入
            ImageIO.write(combinedImage, "png", new File(path_mubiao));
            g2d.dispose();
            log.info("图片合并成功!");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public  void chagongzhang_zhuguanlingdao(String path_biao,String path_gongzhang,String path_mubiao) {
        try {
            // 加载第一张图片
            BufferedImage image1 = ImageIO.read(new File(path_biao));

            // 加载第二张图片
            BufferedImage image2 = ImageIO.read(new File(path_gongzhang));

            // 加载公章
         //   BufferedImage image3 = ImageIO.read(new File(path_gongzhang.replace("1","2")));


            int maxWidth = Math.max(image1.getWidth(), image2.getWidth());
            int maxHeight = Math.max(image1.getHeight(), image2.getHeight());
            BufferedImage combinedImage = new BufferedImage(maxWidth, maxHeight, BufferedImage.TYPE_INT_ARGB);

            Graphics2D g2d = combinedImage.createGraphics();

            g2d.drawImage(image1, 0, 0, null);

             int x = 745;
             int y = 350;//单位主管领导

            /**
             *int x = 1250;
             *int y = 350;//单位主要领导
             */
            g2d.drawImage(image2, x, y, null);
            //   g2d.drawImage(image3, x, y, null); 公章插入
            ImageIO.write(combinedImage, "png", new File(path_mubiao));
            g2d.dispose();
            log.info("图片合并成功!");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public  void chagongzhang_zhuyaolingdao(String path_biao,String path_gongzhang,String path_mubiao) {
        try {
            // 加载第一张图片
            BufferedImage image1 = ImageIO.read(new File(path_biao));

            // 加载第二张图片
            BufferedImage image2 = ImageIO.read(new File(path_gongzhang));

            // 加载公章
        //    BufferedImage image3 = ImageIO.read(new File(path_gongzhang.replace("1","2")));


            int maxWidth = Math.max(image1.getWidth(), image2.getWidth());
            int maxHeight = Math.max(image1.getHeight(), image2.getHeight());
            BufferedImage combinedImage = new BufferedImage(maxWidth, maxHeight, BufferedImage.TYPE_INT_ARGB);

            Graphics2D g2d = combinedImage.createGraphics();

            g2d.drawImage(image1, 0, 0, null);

             int x = 1215;
             int y = 350;//单位主要领导

            g2d.drawImage(image2, x, y, null);
            //   g2d.drawImage(image3, x, y, null); 公章插入
            ImageIO.write(combinedImage, "png", new File(path_mubiao));
            g2d.dispose();
            log.info("图片合并成功!");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97
  • 98
  • 99
  • 100
  • 101
  • 102
  • 103
  • 104
  • 105
  • 106
  • 107
  • 108
  • 109
  • 110
  • 111
  • 112
  • 113
  • 114
  • 115
  • 116
  • 117
  • 118
  • 119
  • 120
  • 121
  • 122
  • 123
  • 124
  • 125
  • 126
  • 127
  • 128
  • 129
  • 130
  • 131
  • 132
  • 133
  • 134
  • 135
  • 136
  • 137
  • 138
  • 139
  • 140
  • 141
  • 142
  • 143
  • 144
  • 145
  • 146
  • 147
  • 148
  • 149
  • 150
  • 151
  • 152
  • 153
  • 154
  • 155
  • 156
  • 157
  • 158
  • 159
  • 160
  • 161
  • 162
  • 163
  • 164
  • 165
  • 166
  • 167
  • 168
  • 169
  • 170
  • 171
  • 172
  • 173
  • 174
  • 175
  • 176
  • 177
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/很楠不爱3/article/detail/532638
推荐阅读
相关标签
  

闽ICP备14008679号