最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

使用Java編寫導(dǎo)出不確定行數(shù)列數(shù)數(shù)據(jù)的工具類

 更新時(shí)間:2024年03月15日 16:14:17   作者:IT行業(yè)小趴菜  
這篇文章主要為大家詳細(xì)介紹了如何使用Java編寫導(dǎo)出不確定行數(shù)列數(shù)數(shù)據(jù)的工具類,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下

前言

這是導(dǎo)出不確定行數(shù)列數(shù)數(shù)據(jù)的導(dǎo)出工具類,導(dǎo)出的文件直接在瀏覽器下載,直接全部復(fù)制使用,下面有導(dǎo)出的數(shù)據(jù)樣式

一、導(dǎo)出的文件樣式

表頭不是固定的,可以根據(jù)需求,增加表頭和與之對(duì)應(yīng)的列數(shù)據(jù),詳情代碼看下面

二、工具類的入?yún)⒃斍?/h2>

這是表頭

這是具體的每一行數(shù)據(jù)

三、具體代碼(直接復(fù)制使用)

這個(gè)是業(yè)務(wù)層 使用可以copy到你的業(yè)務(wù)層方法內(nèi),然后進(jìn)行修修改改。

    public void export(ExportExcelDto dto, HttpServletResponse response) {

        XSSFWorkbook wb = null;
        try {
        	//假設(shè)這一是查詢數(shù)據(jù)庫拿到的數(shù)據(jù)
            List<MonitorDataImportQueryVo> vos = new ArrayList<>();

            if (CollectionUtils.isEmpty(vos)) return;
//          文件名根據(jù)時(shí)間戳生成
            String fileName = DateUtil.currentSeconds() + ".xlsx";
//          表頭
            ArrayList<String> header = Lists.newArrayList(READ_HEAD1, READ_HEAD2, READ_HEAD3, READ_HEAD4);
            //時(shí)間的動(dòng)態(tài)表頭
            List<String> collect = vos.stream()
            	.map(e -> e.getMonitorTime())
            	.distinct()
            	.sorted()
            	.collect(Collectors.toList());
            //放到表頭list后面	
            header.addAll(collect);
//          創(chuàng)建一個(gè)導(dǎo)出的數(shù)據(jù)list
            List<List> dataList = Lists.newArrayList();
            
//			根據(jù)查詢的數(shù)據(jù)進(jìn)行分組戰(zhàn)后(根據(jù)你的業(yè)務(wù)去處理)
            Map<String, List<MonitorDataImportQueryVo>> map = vos.stream()
            	.collect(Collectors.groupingBy(e -> e.getMonitorNumber()));
//			遍歷放入導(dǎo)出數(shù)據(jù)list里面(根據(jù)你的業(yè)務(wù)去處理)
            for (String s : keySet) {
                List<MonitorDataImportQueryVo> singleData = map.get(s);
                List<String> data = new ArrayList<>();
                data.add(singleData.get(0).getMonitorNumber());
                data.add(singleData.get(0).getMileage());
                data.add(singleData.get(0).getLink());
                data.add(singleData.get(0).getInitialValue());
                for (String thisValue : singleData.stream()
                	.map(e -> e.getThisValue())
                	.collect(Collectors.toList())) {
                    data.add(thisValue);
                }
                dataList.add(data);
            }
//			調(diào)用工具類
            wb = ExportExcelUtil.getXSSFWorkbook("監(jiān)測數(shù)據(jù)", header, dataList);
            ExportExcelUtil.buildExcelDocument(fileName, wb, response);

        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if (null != wb) {
                try {
                    wb.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }

            }
        }
    }

具體的工具類,無需修改,也可根據(jù)需求改改

import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.xssf.usermodel.*;

import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.net.URLEncoder;
import java.util.List;

/**
 * @Description: 導(dǎo)出工具類
 * @Param:
 * @return:
 * @Author: 楊永卓
 * @Date: 2021/9/26 15:47
 */
public class ExportExcelUtil {

    /**
     * @Description: [導(dǎo)出不確定行數(shù)列數(shù)監(jiān)測數(shù)據(jù)]
     * @Param: [sheetName:sheet頁名稱, headers:第一行表頭, data:list里面是每一行數(shù)據(jù)]
     * @return: org.apache.poi.XSSf.usermodel.XSSFWorkbook
     * @Author: 楊永卓
     * @Date: 2021/9/26 16:11
     */
    public static XSSFWorkbook getXSSFWorkbook(String sheetName, List<String> headers, List<List> dataList) {

        XSSFWorkbook workbook = new XSSFWorkbook();
        //新建工作區(qū)并賦名
        XSSFSheet sheet = workbook.createSheet(sheetName);
        XSSFRow row = sheet.createRow(0);

        //設(shè)置樣式
        XSSFCellStyle cellStyle = workbook.createCellStyle();
        //靠左
        cellStyle.setAlignment(XSSFCellStyle.ALIGN_LEFT);
        //垂直居中
        cellStyle.setVerticalAlignment(XSSFCellStyle.VERTICAL_CENTER);
        //設(shè)置邊框
        cellStyle.setBorderBottom(XSSFCellStyle.BORDER_THIN);
        cellStyle.setBorderLeft(XSSFCellStyle.BORDER_THIN);
        cellStyle.setBorderTop(XSSFCellStyle.BORDER_THIN);
        cellStyle.setBorderRight(XSSFCellStyle.BORDER_THIN);
        //還需要設(shè)置其他樣式可在此添加

        //找出最大列數(shù):對(duì)數(shù)據(jù)進(jìn)行排序,獲取最長那一行的size
        int max = 0;
        for (List l : dataList) {
            if (l.size() > max) {
                max = l.size();
            }
        }

        XSSFCell cell = null;
        //設(shè)置列名
        for (int i = 0; i < max; i++) {
            cell = row.createCell(i);
            cell.setCellValue(headers.get(i));
            cell.setCellStyle(cellStyle);
        }

        for (int i = 0; i < dataList.size(); i++) {
            row = sheet.createRow(i + 1);
            //以max作判斷-->實(shí)現(xiàn)空的單元格也有邊框
            for (int j = 0; j < max; j++) {
                cell = row.createCell(j);
                cell.setCellStyle(cellStyle);
                //防止下標(biāo)越界
                if (j < dataList.get(i).size()) {
                    //單元格數(shù)據(jù)類型可自行改變,我這里全部字符串化了
                    cell.setCellValue(dataList.get(i).get(j).toString());
                }
            }
        }

        //列寬自適應(yīng)
        for (int columnNum = 0; columnNum <= max; columnNum++) {
            int columnWidth = sheet.getColumnWidth(columnNum) / 256;
            for (int rowNum = 0; rowNum < sheet.getLastRowNum(); rowNum++) {
                XSSFRow currentRow;
                if (sheet.getRow(rowNum) == null) {
                    currentRow = sheet.createRow(rowNum);
                } else {
                    currentRow = sheet.getRow(rowNum);
                }
                if (currentRow.getCell(columnNum) != null) {
                    XSSFCell currentCell = currentRow.getCell(columnNum);
                    if (currentCell.getCellType() == XSSFCell.CELL_TYPE_STRING) {
                        int length = currentCell.getStringCellValue().getBytes().length;
                        if (columnWidth < length) {
                            columnWidth = length;
                        }
                    }
                }
            }
            sheet.setColumnWidth(columnNum, columnWidth * 256);
        }
        return workbook;
    }
    
	/**
    * @Description: [導(dǎo)出到瀏覽器]
    * @Param: [fileName, wb, response]
    * @return: void
    *
    * @Author: 楊永卓
    * @Date: 2021/9/26 15:47
    */
    public static void buildExcelDocument(String fileName, Workbook wb, HttpServletResponse response) {
        try {
//            response.setContentType(MediaType.APPLICATION_OCTET_STREAM_VALUE);
            // 定義輸出類型
            response.setContentType("application/octet-stream");
            // 可自行定義編碼格式
            response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(fileName, "utf-8"));
            //清除jsp編譯html文件的空白,防止excel出現(xiàn)空行
            response.flushBuffer();
            //寫出
            wb.write(response.getOutputStream());
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

}

到此這篇關(guān)于使用Java編寫導(dǎo)出不確定行數(shù)列數(shù)數(shù)據(jù)的工具類的文章就介紹到這了,更多相關(guān)Java導(dǎo)出數(shù)據(jù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評(píng)論

神木县| 海阳市| 梁山县| 谢通门县| 琼海市| 佛教| 新巴尔虎右旗| 内丘县| 阜新| 阿拉善右旗| 江西省| 桃源县| 南平市| 江门市| 南陵县| 金华市| 延庆县| 嵊州市| 嘉义县| 府谷县| 尉氏县| 邓州市| 福鼎市| 玛沁县| 谷城县| 揭东县| 平度市| 宁城县| 玉林市| 大厂| 湘潭市| 泉州市| 吴桥县| 贡觉县| 成武县| 平乡县| 杨浦区| 华亭县| 福建省| 阿克苏市| 邵阳县|