java实现写入excel数据,或者前端导出excel都可以

首先处理excel表,制作一个模板(按照需求修改标题的属性值)

在这里插入图片描述

下面直接上java代码

1.依赖

<!-- 引入poi,解析workbook视图 -->
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi</artifactId>
            <version>3.16</version>
        </dependency>
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi-ooxml</artifactId>
            <version>3.14</version>
        </dependency>

2.下面是用例:
(1)普通写入excel

package com.example.demo.utils;


import com.example.demo.entity.CountAttendanceEntity;
import org.springframework.core.io.ClassPathResource;

import java.io.*;
import java.util.HashMap;
import java.util.List;
import java.util.Map;


/**
 * @author wangchang
 * @Description TODO
 * @createTime 2022年01月12日
 */

public class WriteExcel {

    /**
     * 写数据
     *
     * @param countAttendanceEntityList
     * @param str1
     * @param str2
     * @throws IOException
     *
     */
    public void writeExcel(List<CountAttendanceEntity> countAttendanceEntityList, String str1, String str2) throws IOException {
        Map<String, String> map = new HashMap<String, String>();
        ClassPathResource resource = new ClassPathResource("/BOOT-INF/classes/countAttendance1.xlsx");
        InputStream fis = resource.getInputStream();
        SheetProcessor processor = (SheetProcessor) TemplateProcessorFactory.getSheetProcessorFromStream(fis);
        processor.writeEntry(map);
        for (CountAttendanceEntity entity : countAttendanceEntityList) {
            Map<String, String> entry = new HashMap<String, String>();
            entry.put("xh", entity.getXh());
            entry.put("name", entity.getName());
            entry.put("orgName", entity.getOrgName());
            entry.put("startWorkTime", entity.getStartWorkTime());
            entry.put("endWorkTime", entity.getEndWorkTime());
            entry.put("workTime", entity.getWorkTime());
            entry.put("addWorkTime", entity.getAddWorkTime());
            entry.put("addWorkCS", entity.getAddWorkCS());
            entry.put("noWorkTime", entity.getNoWorkTime());
            entry.put("noWorkTS", entity.getNoWorkTS());
            entry.put("totalWorkTime", entity.getTotalWorkTime());
            entry.put("forgetDKCS", entity.getForgetDKCS());
            entry.put("lateWorkCS", entity.getLateWorkCS());
            processor.writeEntry(entry);
        }
        String filename = str1 + "年" + str2 + "月考勤表.xlsx";
        OutputStream out = null;
        try {
            out = new FileOutputStream(filename);
            processor.write(out);
            out.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

(2)导出exel

 @GetMapping()
    public void exportExcel(HttpServletRequest req, HttpServletResponse resp, PageExportParam pageExportParam) throws IOException, ParseException {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        PageParam pageInfo = new PageParam();
        pageInfo.setPageSize(10000);
        pageInfo.setPage(1);
        pageInfo.setTime(sdf.parse(pageExportParam.getTime()));
        pageInfo.setType(pageExportParam.getType());
        List<Sort.Order> orders = new ArrayList<>();
        orders.add(new Sort.Order(Sort.Direction.DESC, "checkinTime"));
        orders.add(new Sort.Order(Sort.Direction.ASC, "userId"));
        Sort sort = new Sort(orders);
        PageRequest page = new PageRequest(pageInfo.getPage() - 1, pageInfo.getPageSize(), sort);
        List<AttendanceDetail> resultList = new ArrayList<AttendanceDetail>();
        if (pageInfo.getType().equals("选项1")) {
            Page<AttendanceDetail> result = countAttendanceService.queryAllAttendance(page);
            resultList = result.getContent();
        } else if (pageInfo.getType().equals("选项3")) {
            Paging<AttendanceDetail> list = countAttendanceService.queryByWeek(pageInfo);
            resultList = list.getData();
        } else {
            Page<AttendanceDetail> list = countAttendanceService.queryByTime(page, pageInfo.getType(), pageInfo.getTime());
            resultList = list.getContent();
        }


        Map<String, String> map = new HashMap<String, String>();
        String date = sdf.format(pageInfo.getTime());

        if (pageInfo.getType().equals("选项1")) {
            date = "全部";
        } else if (pageInfo.getType().equals("选项3")) {
            date = getWeeks(date);
        } else if (pageInfo.getType().equals("选项4")) {
            date=date.substring(0,7);
        }
        map.put("titleName", "考勤数据" + date);

        req.setCharacterEncoding("UTF-8");
        String path = req.getServletContext().getRealPath("/WEB-INF/classes/attendance.xls");
        FileInputStream ipst = new FileInputStream(path);
        SheetProcessor processor = (SheetProcessor) TemplateProcessorFactory.getSheetProcessorFromStream(ipst);
        processor.writeEntry(map);
        for (AttendanceDetail entity : resultList) {
            Map<String, String> entry = new HashMap<String, String>();
            entry.put("userId", entity.getUserId());
            entry.put("userName", entity.getUserName());
            entry.put("groupName", entity.getGroupName());
            entry.put("checkinType", entity.getCheckinType());
            entry.put("exceptionType", entity.getExceptionType());
            entry.put("checkinTime", entity.getCheckinTime());
            entry.put("schCheckinTime", entity.getSchCheckinTime());
            entry.put("locationTitle", entity.getLocationTitle());
            entry.put("locationDetail", entity.getLocationDetail());
            entry.put("wifiName", entity.getWifiName());
            entry.put("notes", entity.getNotes());
            processor.writeEntry(entry);
        }
        resp.setContentType("application/octet-stream");
        resp.setHeader("Content-Disposition",
                "attachment; filename=" + java.net.URLEncoder.encode("考勤数据" + "(" + date + ")" + ".xlsx", "UTF-8"));
        processor.write(resp.getOutputStream());
    }

3.工具类

package com.example.demo.utils;

import java.io.IOException;
import java.io.OutputStream;
import java.util.Map;

public interface SheetProcessor {

	void writeEntry(Map<String, String> map);
	
	void write(OutputStream out) throws IOException;
}

package com.example.demo.utils;

import org.apache.poi.hssf.util.AreaReference;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.ss.util.CellReference;

import java.io.IOException;
import java.io.OutputStream;
import java.util.Map;
import java.util.Map.Entry;

public class SheetProcessorImpl implements SheetProcessor {

    private Workbook workbook;

    private int rowIdx = 0;

    public SheetProcessorImpl(Workbook workbook) {

        super();

        this.workbook = workbook;

    }

    @Override
    public void writeEntry(Map<String, String> map) {

        for (Entry<String, String> entry : map.entrySet()) {

            try {
                AreaReference areaReference = new AreaReference(workbook.getName(entry.getKey()).getRefersToFormula());

                CellReference cellRef = areaReference.getFirstCell();

                CellStyle cellStyle = workbook.createCellStyle();
                Font font = workbook.createFont();
                if (rowIdx == 0) {
                    font.setFontName("宋体");
                    font.setFontHeightInPoints((short) 13);
                    font.setBoldweight(Font.BOLDWEIGHT_BOLD);
                    cellStyle.setFont(font);
                }
                font.setFontName("楷体_GB2312");
                font.setFontHeightInPoints((short) 13);
                cellStyle.setFont(font);
                cellStyle.setBorderBottom(CellStyle.BORDER_THIN); // 下边框
                cellStyle.setBorderLeft(CellStyle.BORDER_THIN);// 左边框
                cellStyle.setBorderTop(CellStyle.BORDER_THIN);// 上边框
                cellStyle.setBorderRight(CellStyle.BORDER_THIN);// 右边框
                cellStyle.setAlignment(CellStyle.ALIGN_CENTER); // 居中

                Sheet sheet = workbook.getSheet(cellRef.getSheetName());
                Row row = sheet.getRow(cellRef.getRow() + rowIdx);
                if (row == null) {
                    row = sheet.createRow(cellRef.getRow() + rowIdx);
                }
                Cell cell = row.createCell(cellRef.getCol());
                cell.setCellStyle(cellStyle);
                cell.setCellValue(entry.getValue());
            } catch (NullPointerException e) {

            }

        }

        rowIdx++;

    }

    @Override
    public void write(OutputStream out) throws IOException {
        workbook.write(out);
    }

}
package com.example.demo.utils;

import org.apache.poi.EncryptedDocumentException;
import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
import org.apache.poi.ss.usermodel.WorkbookFactory;

import java.io.IOException;
import java.io.InputStream;

public class TemplateProcessorFactory {
	
	public static SheetProcessor getSheetProcessorFromStream(InputStream sheetInputStream) {
		try {
			return new SheetProcessorImpl(WorkbookFactory.create(sheetInputStream));
		} catch (EncryptedDocumentException | InvalidFormatException | IOException e) {
			throw new RuntimeException(e);
		}
	}

}

直接可以用的,用不了的可以滴滴我!!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Java中生成一个可以前端导出Excel的代码,你可以使用以下的示例代码: ```java import org.apache.poi.ss.usermodel.*; import org.apache.poi.xssf.usermodel.XSSFWorkbook; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.io.OutputStream; public class ExcelExporter { public static void exportDataToExcel(HttpServletResponse response) { Workbook workbook = new XSSFWorkbook(); Sheet sheet = workbook.createSheet("Sheet1"); // 创建行对象 Row row = sheet.createRow(0); // 创建单元格样式 CellStyle headerCellStyle = workbook.createCellStyle(); headerCellStyle.setFillForegroundColor(IndexedColors.GREY_25_PERCENT.getIndex()); headerCellStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND); // 创建标题行 Cell cell = row.createCell(0); cell.setCellValue("姓名"); cell.setCellStyle(headerCellStyle); cell = row.createCell(1); cell.setCellValue("年龄"); cell.setCellStyle(headerCellStyle); // 写入数据行 row = sheet.createRow(1); row.createCell(0).setCellValue("张三"); row.createCell(1).setCellValue(25); row = sheet.createRow(2); row.createCell(0).setCellValue("李四"); row.createCell(1).setCellValue(30); // 调整列宽 sheet.autoSizeColumn(0); sheet.autoSizeColumn(1); try { // 设置响应头 response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"); response.setHeader("Content-Disposition", "attachment; filename=\"output.xlsx\""); // 获取输出流 OutputStream outputStream = response.getOutputStream(); workbook.write(outputStream); workbook.close(); outputStream.close(); System.out.println("Excel导出成功!"); } catch (IOException e) { e.printStackTrace(); } } } ``` 这段代码生成了一个Excel文件,并将其写入到HttpServletResponse的输出流中。通过设置响应头,浏览器会将该文件作为下载文件处理。你可以在Java Web应用中调用`exportDataToExcel`方法,传入`HttpServletResponse`对象,实现前端导出Excel的功能。 请注意,这段代码是基于Java Web应用的场景,需要确保在Web容器中正确配置响应头,并在合适的时机调用`exportDataToExcel`方法。 希望这段代码能够满足你的需求!如果有任何问题,请随时提问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

王之蔑视.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值