easyExcel导出超链接和批注和公式

本文介绍了如何使用EasyExcel库,结合ApachePOI技术,实现在Excel中导出数据时保留超链接、批注和公式等额外信息,包括代码示例和处理器的实现方法。
摘要由CSDN通过智能技术生成

有时候,需要导出带有额外信息的excel,比如超链接,批注,公式,该怎么实现呢?话不多说,上代码

实体类

 
import com.alibaba.excel.annotation.ExcelProperty;
import com.alibaba.excel.annotation.write.style.ContentStyle;
import com.alibaba.excel.annotation.write.style.HeadRowHeight;
import com.alibaba.excel.enums.BooleanEnum;
import com.alibaba.excel.enums.poi.BorderStyleEnum;
import com.alibaba.excel.enums.poi.VerticalAlignmentEnum;
import com.alibaba.excel.metadata.data.WriteCellData;
import lombok.Data;
 
@Data
@HeadRowHeight(30)
//属性注释在最下
@ContentStyle(wrapped = BooleanEnum.TRUE, verticalAlignment = VerticalAlignmentEnum.CENTER, borderBottom = BorderStyleEnum.THIN, borderLeft = BorderStyleEnum.THIN, borderRight = BorderStyleEnum.THIN, borderTop = BorderStyleEnum.THIN)
public class ExportHeadersLinkExcel {
 
    /**
     * 金
     */
    @ExcelProperty(value = {"七灵图","五行", "金"})
    private String jin;
    /**
     * 木
     */
    @ExcelProperty(value = {"七灵图","五行", "木"})
    private String mu;
    /**
     * 水
     */
    @ExcelProperty(value = {"七灵图","五行", "水"})
    private String shui;
    /**
     * 火
     */
    @ExcelProperty(value = {"七灵图","五行", "火"})
    private String huo;
    /**
     * 土
     */
    @ExcelProperty(value = {"七灵图","五行", "土"})
    private String tu;
    /**
     * 阴
     */
    @ExcelProperty(value = {"七灵图","两仪", "阴"})
    private String yin;
    /**
     * 阳
     */
    @ExcelProperty(value = {"七灵图","两仪", "阳"})
    private String yang;
    /**
     * 超链接
     *
     */
    private WriteCellData<String> hyperlink;
 
    /**
     * 备注
     *
     */
    private WriteCellData<String> commentData;
 
    /**
     * 公式
     *
     */
    private WriteCellData<String> formulaData;
 
    /**
     * 指定单元格的样式。当然样式 也可以用注解等方式。
     *
     */
    private WriteCellData<String> writeCellStyle;
 
    /**
     * 指定一个单元格有多个样式
     *
     */
    private WriteCellData<String> richText;
}

代码

public void exportHeadersValueLink(String path) {
 
        String sheetName = "sheetName";
        ExportHeadersLinkExcel excel = new ExportHeadersLinkExcel();
        excel.setJin("10");
        excel.setMu("2.00");
        excel.setShui("3.00");
        excel.setHuo("4.00");
        excel.setTu("5.00");
        excel.setYin("6.00");
        excel.setYang("7.01");
        // 设置超链接
        WriteCellData<String> hyperlink = new WriteCellData<>("java生成pdf图表链接");
        HyperlinkData hyperlinkData = new HyperlinkData();
        hyperlinkData.setAddress("https://blog.csdn.net/lol19950605/article/details/128929870");
        hyperlinkData.setHyperlinkType(HyperlinkData.HyperlinkType.URL);
        hyperlink.setHyperlinkData(hyperlinkData);
        excel.setHyperlink(hyperlink);
 
        // 设置备注
        WriteCellData<String> comment = new WriteCellData<>("批注的单元格信息");
        CommentData commentData = new CommentData();
        commentData.setAuthor("冥河教主");
        commentData.setRichTextStringData(new RichTextStringData("这是一个批注"));
        // 备注的默认大小是按照单元格的大小 这里想调整到4个单元格那么大 所以向后 向下 各额外占用了一个单元格 但是没生效
        //commentData.setRelativeLastColumnIndex(1);
        //commentData.setRelativeLastRowIndex(1);
        comment.setCommentData(commentData);
        excel.setCommentData(comment);
 
        // 设置公式
        WriteCellData<String> formula = new WriteCellData<>();
        FormulaData formulaData = new FormulaData();
        // 将 123456789 中的第一个数字替换成 2
        // 这里只是例子 如果真的涉及到公式 能内存算好尽量内存算好 公式能不用尽量不用
        //REPLACE(123456789,1,1,2) REPLACE:公式名 123456789:原字符串 第一个1:起始位置  第二个1:字符数 2:要替换的字符串
        formulaData.setFormulaValue("REPLACE(123456789,1,1,2)");
        formula.setFormulaData(formulaData);
        excel.setFormulaData(formula);
 
        List<ExportHeadersLinkExcel> excels = new ArrayList<>();
        excels.add(excel);
        EasyExcel.write(path, ExportHeadersLinkExcel.class)
                .sheet(sheetName)
                .doWrite(excels);
    }

效果

超链接

批注

公式

如果想要用处理器来实现的话,也可以

EasyExcel.write(path, ExportHeadersLinkExcel.class)
        .registerWriteHandler(new WriteRowHandler())
        .sheet(sheetName)
        .doWrite(excels);

处理器代码

 
import com.alibaba.excel.metadata.Head;
import com.alibaba.excel.write.handler.CellWriteHandler;
import com.alibaba.excel.write.metadata.holder.WriteSheetHolder;
import com.alibaba.excel.write.metadata.holder.WriteTableHolder;
import lombok.extern.slf4j.Slf4j;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Comment;
import org.apache.poi.ss.usermodel.Drawing;
import org.apache.poi.xssf.usermodel.XSSFClientAnchor;
import org.apache.poi.xssf.usermodel.XSSFRichTextString;
 
 
/**
 * @author 冥河教主
 * @Date 2021/02/08 16:00
 */
@Slf4j
public class WriteRowHandler implements CellWriteHandler {
    @Override
    public void afterCellCreate(WriteSheetHolder writeSheetHolder, WriteTableHolder writeTableHolder, Cell cell,
                                Head head, Integer relativeRowIndex, Boolean isHead) {
        if (isHead) {
            Drawing<?> drawingPatriarch = writeSheetHolder.getSheet().createDrawingPatriarch();
            // 在第一行 第二列创建一个批注
            Comment comment;
            int columnIndex = cell.getColumnIndex();
            switch (columnIndex){
                case 1:
                    comment =drawingPatriarch.createCellComment(new XSSFClientAnchor(0, 0, 0, 0,
                            cell.getColumnIndex(), cell.getRowIndex(),cell.getColumnIndex()+1,cell.getRowIndex()+1));
                    // 输入批注信息
                    comment.setString(new XSSFRichTextString("创建批注!"));
                    break;
                default:
                    break;
            }
 
        }
    }
}

 git仓库:导入导出: 导入导出的实例

更多导出场景:多场景easyExcel导出excel文件(一)-CSDN博客

读取excel场景:多场景easyExcel读取excel文件(二)-CSDN博客

根据模板填充excel:多场景easyExcel根据模板填充excel文件(三)-CSDN博客

  • 9
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要使用EasyExcel实现导出超链接,你可以按照以下步骤进行操作: 第一步:引入EasyExcel的jar包。在你的项目中添加以下依赖: ```xml <dependency> <groupId>com.alibaba</groupId> <artifactId>easyexcel</artifactId> <version>3.1.1</version> </dependency> ``` 第二步:准备测试数据。可以创建一个对象类,用于表示要导出的数据。 第三步:编写代码实现导出超链接。你可以使用EasyExcel的API来生成exl文档,并设置样式等。在生成每个单元格时,通过设置超链接的地址实现超链接功能。 以下是一个示例代码: ```java import com.alibaba.excel.EasyExcel; public class ExportExcel { public static void main(String[] args) { // 准备测试数据 List<TestData> dataList = new ArrayList<>(); // 添加数据到dataList... // 导出excel文件 String fileName = "test.xlsx"; String sheetName = "Sheet1"; EasyExcel.write(fileName, TestData.class).sheet(sheetName) .doWrite(dataList, writeSheet -> { // 设置超链接 writeSheet.setWriteHandler(new WriteHandler() { @Override public void sheet(int sheetNo, Sheet sheet) { // 设置某个坐标的单元格为超链接 Cell cell = sheet.getRow(0).getCell(0); Hyperlink hyperlink = createHyperlink(cell.getCellStyle().getFont().getColor()); cell.setHyperlink(hyperlink); } @Override public void row(int rowNum, Row row) { } @Override public void cell(int cellNum, Cell cell) { } private Hyperlink createHyperlink(IndexedColors color) { CreationHelper creationHelper = cell.getSheet().getWorkbook().getCreationHelper(); Hyperlink hyperlink = creationHelper.createHyperlink(HyperlinkType.URL); hyperlink.setAddress("https://www.example.com"); hyperlink.setTooltip("Click to open website"); hyperlink.setLabel("Website"); // 设置超链接颜色为单元格字体颜色 hyperlink.setFillColor(color.getIndex()); return hyperlink; } }); }); } } ``` 请注意,上述代码为示例代码,你需要根据你的实际需求进行修改和调整。同时,你可能还需要设置其他样式和属性来满足你的导出需求。 参考资料: <span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [快速批量导出excel超链接](https://blog.csdn.net/gongchenyu/article/details/126234626)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [EasyExcel生成exl文档,某列有下拉框、坐标超链接](https://blog.csdn.net/C__jx/article/details/127400774)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [springboot 使用 easyexcel 导入导出](https://blog.csdn.net/weixin_35756130/article/details/129573863)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值