操屁眼的视频在线免费看,日本在线综合一区二区,久久在线观看免费视频,欧美日韩精品久久综

新聞資訊

    日常在做后臺系統(tǒng)的時候會很頻繁的遇到Excel導(dǎo)入導(dǎo)出的問題,正好這次在做一個后臺系統(tǒng),就想著寫一個公用工具來進(jìn)行Excel的導(dǎo)入導(dǎo)出。

    一般我們在導(dǎo)出的時候都是導(dǎo)出的前端表格,而前端表格同時也會對應(yīng)的在后臺有一個映射類。

    所以在寫這個工具的時候我們先理一下我們需要實(shí)現(xiàn)的效果:

    實(shí)現(xiàn)過程:

    首先需要創(chuàng)建三個注解

    一個是 ,必須有這個注解才能導(dǎo)出

    /**
    * 設(shè)置允許導(dǎo)出
    */
    @Target(ElementType.TYPE)
    @Retention(RetentionPolicy.RUNTIME)
    public @interface EnableExport {
    String fileName;
    }

    然后就是dbf文件導(dǎo)出到excel行不夠,有這個注解的字段才會導(dǎo)出到Excel里面,并且可以設(shè)置列寬

    /**
    * 設(shè)置該字段允許導(dǎo)出
    * 并且可以設(shè)置寬度
    */
    @Target(ElementType.FIELD)
    @Retention(RetentionPolicy.RUNTIME)
    public @interface EnableExportField {
    int colWidth default 100;
    String colName;
    }

    再就是,導(dǎo)入的時候設(shè)置Excel中的列對應(yīng)的序號

    /**
    * 導(dǎo)入時索引
    */
    @Target(ElementType.FIELD)
    @Retention(RetentionPolicy.RUNTIME)
    public @interface ImportIndex { intindex ;
    }

    注解使用示例

    三個注解創(chuàng)建好之后就需要開始操作Excel了

    首先,導(dǎo)入方法。在后臺接收到前端上傳的Excel文件之后,使用poi來讀取Excel文件

    sqlserver導(dǎo)出dbf文件_dbf文件導(dǎo)出到excel行不夠_oracle 導(dǎo)出dbf文件

    我們根據(jù)傳入的類型上面的字段注解的順序來分別為不同的字段賦值,然后存入集合中,再返回

    代碼如下:

    /**
    * 將Excel轉(zhuǎn)換為對象集合
    * @param excel Excel 文件
    * @param clazz pojo類型
    * @return
    */
    public static List parseExcelToList(File excel,Class clazz){
    List res = new ArrayList<>;
    // 創(chuàng)建輸入流,讀取Excel
    InputStream is = ;
    Sheet sheet = ;
    try {
    is = new FileInputStream(excel.getAbsolutePath);
    if (is != ) {
    Workbook workbook = WorkbookFactory.create(is);
    //默認(rèn)只獲取第一個工作表
    sheet = workbook.getSheetAt(0);
    if (sheet != ) {
    //前兩行是標(biāo)題
    int i = 2;
    String values ;
    Row row = sheet.getRow(i);
    while (row != ) {
    //獲取單元格數(shù)目
    int cellNum = row.getPhysicalNumberOfCells;
    values = new String[cellNum];
    for (int j = 0; j <= cellNum; j  ) {
    Cell cell = row.getCell(j);
    if (cell != ) {
    //設(shè)置單元格內(nèi)容類型
    cell.setCellType(Cell.CELL_TYPE_STRING );
    //獲取單元格值
    String value = cell.getStringCellValue == ? : cell.getStringCellValue;
    values[j]=value;
    }
    

    oracle 導(dǎo)出dbf文件_dbf文件導(dǎo)出到excel行不夠_sqlserver導(dǎo)出dbf文件

    } Field fields = clazz.getDeclaredFields; Object obj = clazz.newInstance; for(Field f : fields){ if(f.isAnnotationPresent(ImportIndex.class)){ ImportIndex annotation = f.getDeclaredAnnotation(ImportIndex.class); int index = annotation.index; f.setAccessible(true); //此處使用了阿里巴巴的fastjson包里面的一個類型轉(zhuǎn)換工具類 Object val =TypeUtils.cast(values[index],f.getType,); f.set(obj,val); } } res.add(obj); i ; row=sheet.getRow(i); } } } } catch (Exception e) { e.printStackTrace; } return res; }

    接下來就是導(dǎo)出方法。

    導(dǎo)出分為幾個步驟:

    建立一個工作簿,也就是類型新建一個Excel文件

    建立一張sheet表

    設(shè)置標(biāo)的行高和列寬

    繪制標(biāo)題和表頭

    這兩個方法是自定義方法dbf文件導(dǎo)出到excel行不夠,代碼會貼在后面

    寫入數(shù)據(jù)到Excel

    oracle 導(dǎo)出dbf文件_dbf文件導(dǎo)出到excel行不夠_sqlserver導(dǎo)出dbf文件

    創(chuàng)建下拉列表

    寫入文件到

    到這里導(dǎo)出工作就完成了

    下面是一些自定義方法的代碼

    /**
    * 獲取一個基本的帶邊框的單元格
    * @param workbook
    * @return
    */
    private static HSSFCellStyle getBasicCellStyle(HSSFWorkbook workbook){
    HSSFCellStyle hssfcellstyle = workbook.createCellStyle;
    hssfcellstyle.setBorderLeft(HSSFCellStyle.BORDER_THIN);
    hssfcellstyle.setBorderBottom(HSSFCellStyle.BORDER_THIN);
    hssfcellstyle.setBorderRight(HSSFCellStyle.BORDER_THIN);
    hssfcellstyle.setBorderTop(HSSFCellStyle.BORDER_THIN);
    hssfcellstyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);
    hssfcellstyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);
    hssfcellstyle.setWrapText(true);
    return hssfcellstyle;
    }
    /**
    * 獲取帶有背景色的標(biāo)題單元格
    * @param workbook
    * @return
    */
    private static HSSFCellStyle getTitleCellStyle(HSSFWorkbook workbook){
    HSSFCellStyle hssfcellstyle = getBasicCellStyle(workbook);
    hssfcellstyle.setFillForegroundColor((short) HSSFColor.CORNFLOWER_BLUE.index); // 設(shè)置背景色
    hssfcellstyle.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);
    return hssfcellstyle;
    }
    /**
    

    dbf文件導(dǎo)出到excel行不夠_oracle 導(dǎo)出dbf文件_sqlserver導(dǎo)出dbf文件

    * 創(chuàng)建一個跨列的標(biāo)題行 * @param workbook * @param hssfRow * @param hssfcell * @param hssfsheet * @param allColNum * @param title */ privatestaticvoidcreateTitle(HSSFWorkbook workbook, HSSFRow hssfRow , HSSFCell hssfcell, HSSFSheet hssfsheet,int allColNum,String title){ //在sheet里增加合并單元格 CellRangeAddress cra = new CellRangeAddress(0, 0, 0, allColNum); hssfsheet.addMergedRegion(cra); // 使用RegionUtil類為合并后的單元格添加邊框 RegionUtil.setBorderBottom(1, cra, hssfsheet, workbook); // 下邊框 RegionUtil.setBorderLeft(1, cra, hssfsheet, workbook); // 左邊框 RegionUtil.setBorderRight(1, cra, hssfsheet, workbook); // 有邊框 RegionUtil.setBorderTop(1, cra, hssfsheet, workbook); // 上邊框 //設(shè)置表頭 hssfRow = hssfsheet.getRow(0); hssfcell = hssfRow.getCell(0); hssfcell.setCellStyle( getTitleCellStyle(workbook)); hssfcell.setCellType(HSSFCell.CELL_TYPE_STRING); hssfcell.setCellValue(title); } /** * 設(shè)置表頭標(biāo)題欄以及表格高度 * @param workbook * @param hssfRow * @param hssfcell * @param hssfsheet * @param colNames */ privatestaticvoidcreateHeadRow(HSSFWorkbook workbook,HSSFRow hssfRow , HSSFCell hssfcell,HSSFSheet hssfsheet,List colNames){ //插入標(biāo)題行 hssfRow = hssfsheet.createRow(1); for (int i = 0; i < colNames.size; i ) { hssfcell = hssfRow.createCell(i);

    oracle 導(dǎo)出dbf文件_sqlserver導(dǎo)出dbf文件_dbf文件導(dǎo)出到excel行不夠

    hssfcell.setCellStyle(getTitleCellStyle(workbook)); hssfcell.setCellType(HSSFCell.CELL_TYPE_STRING); hssfcell.setCellValue(colNames.get(i)); } } /** * excel添加下拉數(shù)據(jù)校驗(yàn) * @param sheet 哪個 sheet 頁添加校驗(yàn) * @return */ publicstaticvoidcreateDataValidation(Sheet sheet,Map selectListMap) { if(selectListMap!=) { selectListMap.forEach( // 第幾列校驗(yàn)(0開始)key 數(shù)據(jù)源數(shù)組value (key, value) -> { if(value.length>0) { CellRangeAddressList cellRangeAddressList = new CellRangeAddressList(2, 65535, key, key); DataValidationHelper helper = sheet.getDataValidationHelper; DataValidationConstraint constraint = helper.createExplicitListConstraint(value); DataValidation dataValidation = helper.createValidation(constraint, cellRangeAddressList); //處理Excel兼容性問題 if (dataValidation instanceof XSSFDataValidation) { dataValidation.setSuppressDropDownArrow(true); dataValidation.setShowErrorBox(true); } else { dataValidation.setSuppressDropDownArrow(false); } dataValidation.setEmptyCellAllowed(true); dataValidation.setShowPromptBox(true); dataValidation.createPromptBox("提示", "只能選擇下拉框里面的數(shù)據(jù)"); sheet.addValidationData(dataValidation); } } ); } }

    使用實(shí)例

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

    導(dǎo)入數(shù)據(jù)(返回對象List)

    網(wǎng)站首頁   |    關(guān)于我們   |    公司新聞   |    產(chǎn)品方案   |    用戶案例   |    售后服務(wù)   |    合作伙伴   |    人才招聘   |   

    友情鏈接: 餐飲加盟

    地址:北京市海淀區(qū)    電話:010-     郵箱:@126.com

    備案號:冀ICP備2024067069號-3 北京科技有限公司版權(quán)所有