easyexcel 设置超链接或附件地址

easyexcel 设置超链接或附件地址

自定义拦截器

package com.alibaba.easyexcel.test.demo.write;

import java.util.List;

import org.apache.poi.common.usermodel.HyperlinkType;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.CreationHelper;
import org.apache.poi.ss.usermodel.Hyperlink;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.alibaba.excel.metadata.CellData;
import com.alibaba.excel.metadata.Head;
import com.alibaba.excel.write.handler.AbstractCellWriteHandler;
import com.alibaba.excel.write.metadata.holder.WriteSheetHolder;
import com.alibaba.excel.write.metadata.holder.WriteTableHolder;

/**
 * 自定义拦截器。对第一行第一列的头超链接到:https://github.com/alibaba/easyexcel
 *
 * @author Jiaju Zhuang
 */
public class CustomCellWriteHandler extends AbstractCellWriteHandler {

    private static final Logger LOGGER = LoggerFactory.getLogger(CustomCellWriteHandler.class);

    @Override
    public void afterCellDispose(WriteSheetHolder writeSheetHolder, WriteTableHolder writeTableHolder,
        List<CellData> cellDataList, Cell cell, Head head, Integer relativeRowIndex, Boolean isHead) {
        // 这里可以对cell进行任何操作
        LOGGER.info("第{}行,第{}列写入完成。", cell.getRowIndex(), cell.getColumnIndex());
        if (isHead && cell.getColumnIndex() == 0) { // 对第一行第一列的头超链接
            CreationHelper createHelper = writeSheetHolder.getSheet().getWorkbook().getCreationHelper();
            Hyperlink hyperlink = createHelper.createHyperlink(HyperlinkType.URL);
            hyperlink.setAddress("https://github.com/alibaba/easyexcel");
            cell.setHyperlink(hyperlink);
        }
        if (!isHead && head.getFieldName().equals("filePath")){ // 头为 filePath 的列设置附件相对地址
            CreationHelper createHelper = writeSheetHolder.getSheet().getWorkbook().getCreationHelper();
            Hyperlink hyperlink = createHelper.createHyperlink(HyperlinkType.FILE); // 类型设置为 FILE
            hyperlink.setAddress("file/tmp/t-1619677433587.xlsx");  // 附件相对地址,必须使用反斜杠
            cell.setHyperlink(hyperlink);
        }
    }

}

测试方法

    @Test
    public void customHandlerWrite() {
        String fileName = TestFileUtil.getPath() + "customHandlerWrite" + System.currentTimeMillis() + ".xlsx";
        System.out.println(fileName);
        // 这里 需要指定写用哪个class去写,然后写到第一个sheet,名字为模板 然后文件流会自动关闭
        EasyExcel.write(fileName, DemoData.class)
            .registerWriteHandler(new CustomCellWriteHandler())
            .sheet("模板").doWrite(data());
    }

结果

在这里插入图片描述
在这里插入图片描述

参考文档:https://www.yuque.com/easyexcel/doc/easyexcel

  • 2
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是使用EasyExcel设置超链接蓝色的示例代码: ```python import com.alibaba.excel.EasyExcel; import com.alibaba.excel.write.builder.ExcelWriterBuilder; import com.alibaba.excel.write.builder.ExcelWriterSheetBuilder; import com.alibaba.excel.write.metadata.style.WriteCellStyle; import com.alibaba.excel.write.style.HorizontalCellStyleStrategy; import org.apache.poi.ss.usermodel.FillPatternType; import org.apache.poi.ss.usermodel.IndexedColors; public class SetHyperlinkColorDemo { public static void main(String[] args) { // 设置超链接样式 WriteCellStyle hyperlinkStyle = new WriteCellStyle(); hyperlinkStyle.setFillForegroundColor(IndexedColors.BLUE.getIndex()); hyperlinkStyle.setFillPatternType(FillPatternType.SOLID_FOREGROUND); // 构建写入器 ExcelWriterBuilder writerBuilder = EasyExcel.write("output.xlsx"); // 构建工作表 ExcelWriterSheetBuilder sheetBuilder = writerBuilder.sheet("Sheet1"); // 设置水平样式策略 HorizontalCellStyleStrategy styleStrategy = new HorizontalCellStyleStrategy(hyperlinkStyle, hyperlinkStyle); // 写入数据并设置超链接样式 sheetBuilder.doWrite(data(), styleStrategy); // 关闭写入器 writerBuilder.finish(); } private static List<List<Object>> data() { // 构造数据 List<List<Object>> data = new ArrayList<>(); for (int i = 0; i < 10; i++) { List<Object> row = new ArrayList<>(); row.add("超链接" + i); row.add("https://www.baidu.com"); data.add(row); } return data; } } ``` 在上述代码中,我们使用了EasyExcel库来写入Excel文件,并使用了`WriteCellStyle`类来设置超链接的样式。我们将超链接的背景颜色设置为蓝色,并将其填充类型设置为实心填充。然后,我们使用`HorizontalCellStyleStrategy`类来设置水平样式策略,并将其传递给`sheetBuilder.doWrite()`方法,以便在写入数据时应用超链接样式。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值