poi导出excel时带有超链接

两种方式,第一种适合xls,不过当数据量超出五百条后,超链接的样式会不起作用.
第二种比较适合xlsx
两种方式都会或多或少有问题,大家在用的时候需要根据自身情况进行选择和调整,

第一种方式

package test;

import java.io.FileOutputStream;
import java.io.IOException;
import java.sql.Connection;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFCellStyle;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.hssf.util.HSSFColor;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.CellStyle;
import org.apache.poi.ss.usermodel.CreationHelper;
import org.apache.poi.ss.usermodel.Font;
import org.apache.poi.ss.usermodel.Hyperlink;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;

/**
 * poi导出excel待超链接
 * 
 * @author zys2042
 *
 */
public class POIToExcelLink {
	public void toExcel() throws Exception {
		// params为运行本规则时所传入的参数
		// 获取数据
		List<Map> list = getDate();
		String fileName = "";
		String[] cellNameArr = { "姓名", "年龄", "超链接" };
		String[] cellValueArr = { "name", "age", "linkText", "linkAddress" };
		exportXls(list, fileName, cellNameArr, cellValueArr);

	}

	/**
	 * 获取数据
	 * 
	 * @return
	 */
	private List<Map> getDate() {
		// TODO Auto-generated method stub
		return null;
	}

	private String exportXls(List<Map> list, String filename, String[] cellNameArr, String[] cellValueArr) {
		if (list.size() == 0 || list.isEmpty()) {
			return "没有数据,请重新查询!";
		}
		// 生成excel

		// 生成excel文件的头 .xls
		HSSFWorkbook hssfWorkbook = new HSSFWorkbook();
		HSSFSheet sheet = hssfWorkbook.createSheet(filename);
		// 表头

		CellStyle styleHead = getColumnTopStyle(hssfWorkbook);
		CellStyle stylebody = getStyle(hssfWorkbook);

		// 列标题行
		HSSFRow headRow = sheet.createRow(0);
		return setExva(list, filename, cellNameArr, cellValueArr, sheet, styleHead, stylebody, headRow, hssfWorkbook);
	}

	private String setExva(List<Map> list, String filename, String[] cellNameArr, String[] cellValueArr, Sheet sheet,
			CellStyle styleHead, CellStyle stylebody, Row headRow, Workbook hssfWorkbook) {
		// 列名称
		for (int i = 0; i < cellNameArr.length; i++) {
			Cell cell1 = headRow.createCell(i);
			cell1.setCellValue(cellNameArr[i]);
			cell1.setCellStyle(styleHead);
			sheet.setColumnWidth(i, 20 * 256);

		}
		// 列值
		for (Map map : list) {
			Row dataRow = sheet.createRow(sheet.getLastRowNum() + 1);
			for (int i = 0; i < cellValueArr.length; i++) {
				Cell cell1 = dataRow.createCell(i);
				if (i == 2) {
					// 超链接
					cell1.setCellStyle(getLinkStyle(hssfWorkbook));
					cell1.setCellType(HSSFCell.CELL_TYPE_FORMULA);
					CreationHelper createHelper = hssfWorkbook.getCreationHelper();
					Hyperlink hyperlink1 = createHelper.createHyperlink(Hyperlink.LINK_URL);
					cell1.setHyperlink(hyperlink1);
					hyperlink1.setAddress((String) map.get("linkAddress"));
					cell1.setHyperlink(hyperlink1);// 链接

					cell1.setCellValue((String) map.get(cellValueArr[i]));// 文本
				} else {
					// 普通数据
					cell1.setCellValue((String) map.get(cellValueArr[i]));
					cell1.setCellStyle(stylebody);
				}

			}

		}
		return outToEx(filename, hssfWorkbook);
	}

	private String outToEx(String filename, Workbook hssfWorkbook) {
		// 第六步,将文件存到指定位置
		try {

			FileOutputStream fout = new FileOutputStream("文件父路径" + filename + ".xls");

			hssfWorkbook.write(fout);
			fout.close();

			// BeanCtx.out("导出成功");
			return "导出成功!";
		} catch (Exception e) {
			e.printStackTrace();

			return "导出失败!";
		}
	}

	public CellStyle getColumnTopStyle(Workbook workbook) {

		// 设置字体
		Font font = workbook.createFont();
		// 设置字体大小
		font.setFontHeightInPoints((short) 12);
		// 字体加粗
		font.setBoldweight(Font.BOLDWEIGHT_BOLD);
		// 设置字体名字
		font.setFontName("Courier New");

		// int length = str.getBytes().length;
		// sheet.setColumnWidth((short)1,(short)(length*256));
		// 设置样式;
		CellStyle style = workbook.createCellStyle();
		// 设置底边框;
		style.setBorderBottom(HSSFCellStyle.BORDER_THIN);
		// 设置底边框颜色;
		// style.setBottomBorderColor(HSSFColor.BLACK.index);
		// 设置左边框;
		style.setBorderLeft(HSSFCellStyle.BORDER_THIN);
		// 设置左边框颜色;
		// style.setLeftBorderColor(HSSFColor.BLACK.index);
		// 设置右边框;

		style.setBorderRight(HSSFCellStyle.BORDER_THIN); // 设置右边框颜色;
		// style.setRightBorderColor(HSSFColor.BLACK.index); //设置顶边框;
		style.setBorderTop(HSSFCellStyle.BORDER_THIN); // 设置顶边框颜色;
		// style.setTopBorderColor(HSSFColor.BLACK.index);

		// 在样式用应用设置的字体;
		style.setFont(font);
		// 设置自动换行;
		style.setWrapText(true);
		// 设置水平对齐的样式为居中对齐;
		style.setAlignment(HSSFCellStyle.ALIGN_CENTER);
		// 设置垂直对齐的样式为居中对齐;
		style.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);

		return style;

	}

	/*
	 * 列数据信息单元格样式
	 */
	public CellStyle getStyle(Workbook workbook) {
		// 设置字体
		Font font = workbook.createFont();
		// 设置字体大小
		font.setFontHeightInPoints((short) 11);
		// 字体加粗
		// font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
		// 设置字体名字
		font.setFontName("Courier New");
		// 设置样式;
		CellStyle style = workbook.createCellStyle();

		// 设置底边框;
		style.setBorderBottom(HSSFCellStyle.BORDER_THIN); // 设置底边框颜色;
		// style.setBottomBorderColor(HSSFColor.BLACK.index); //设置左边框;
		style.setBorderLeft(HSSFCellStyle.BORDER_THIN); // 设置左边框颜色;
		// style.setLeftBorderColor(HSSFColor.BLACK.index); //设置右边框;
		style.setBorderRight(HSSFCellStyle.BORDER_THIN); // 设置右边框颜色;
		// style.setRightBorderColor(HSSFColor.BLACK.index); //设置顶边框;
		style.setBorderTop(HSSFCellStyle.BORDER_THIN); // 设置顶边框颜色;
		// style.setTopBorderColor(HSSFColor.BLACK.index);

		// 在样式用应用设置的字体;
		style.setFont(font);
		// 设置自动换行;
		style.setWrapText(true);
		// 设置水平对齐的样式为居中对齐;
		style.setAlignment(HSSFCellStyle.ALIGN_CENTER);
		// 设置垂直对齐的样式为居中对齐;
		style.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);

		return style;

	}

	public CellStyle getLinkStyle(Workbook workbook) {
		// 设置字体
		Font font = workbook.createFont();
		// 设置字体大小
		font.setFontHeightInPoints((short) 11);
		// 字体加粗
		// font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
		// 设置字体名字
		font.setFontName("Courier New");
		font.setColor(HSSFColor.BLUE.index);
		// 设置样式;
		CellStyle style = workbook.createCellStyle();

		// 设置底边框;
		style.setBorderBottom(HSSFCellStyle.BORDER_THIN); // 设置底边框颜色;
		// style.setBottomBorderColor(HSSFColor.BLACK.index); //设置左边框;
		style.setBorderLeft(HSSFCellStyle.BORDER_THIN); // 设置左边框颜色;
		// style.setLeftBorderColor(HSSFColor.BLACK.index); //设置右边框;
		style.setBorderRight(HSSFCellStyle.BORDER_THIN); // 设置右边框颜色;
		// style.setRightBorderColor(HSSFColor.BLACK.index); //设置顶边框;
		style.setBorderTop(HSSFCellStyle.BORDER_THIN); // 设置顶边框颜色;
		// style.setTopBorderColor(HSSFColor.BLACK.index);

		// 在样式用应用设置的字体;
		style.setFont(font);
		// 设置自动换行;
		style.setWrapText(true);
		// 设置水平对齐的样式为居中对齐;
		style.setAlignment(HSSFCellStyle.ALIGN_CENTER);
		// 设置垂直对齐的样式为居中对齐;
		style.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);

		return style;

	}
}

第二种方式

package test;

import java.io.FileOutputStream;
import java.io.IOException;
import java.sql.Connection;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFCellStyle;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.hssf.util.HSSFColor;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.CellStyle;
import org.apache.poi.ss.usermodel.CreationHelper;
import org.apache.poi.ss.usermodel.Font;
import org.apache.poi.ss.usermodel.Hyperlink;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

/**
 * poi导出excel待超链接
 * 
 * @author zys2042
 *
 */
public class POIToExcelLink2 {
	public void toExcel() throws Exception {
		// params为运行本规则时所传入的参数
		// 获取数据
		List<Map> list = getDate();
		String fileName = "";
		String[] cellNameArr = { "姓名", "年龄", "超链接" };
		String[] cellValueArr = { "name", "age", "linkText", "linkAddress" };
		exportXls(list, fileName, cellNameArr, cellValueArr);

	}

	/**
	 * 获取数据
	 * 
	 * @return
	 */
	private List<Map> getDate() {
		// TODO Auto-generated method stub
		return null;
	}

	private String exportXls(List<Map> list, String filename, String[] cellNameArr, String[] cellValueArr) {
		if (list.size() == 0 || list.isEmpty()) {
			return "没有数据,请重新查询!";
		}
		// 生成excel

		// 生成excel文件的头 .xlsx
		XSSFWorkbook hssfWorkbook = new XSSFWorkbook();
		Sheet sheet = hssfWorkbook.createSheet(filename);
		// 表头

		CellStyle styleHead = getColumnTopStyle(hssfWorkbook);
		CellStyle stylebody = getStyle(hssfWorkbook);

		// 列标题行
		Row headRow = sheet.createRow(0);
		return setExva(list, filename, cellNameArr, cellValueArr, sheet, styleHead, stylebody, headRow, hssfWorkbook);
	}

	private String setExva(List<Map> list, String filename, String[] cellNameArr, String[] cellValueArr, Sheet sheet,
			CellStyle styleHead, CellStyle stylebody, Row headRow, Workbook hssfWorkbook) {
		// 列名称
		for (int i = 0; i < cellNameArr.length; i++) {
			Cell cell1 = headRow.createCell(i);
			cell1.setCellValue(cellNameArr[i]);
			cell1.setCellStyle(styleHead);
			sheet.setColumnWidth(i, 20 * 256);

		}
		CellStyle linkStyle= getLinkStyle(hssfWorkbook);
		// 列值
		for (Map map : list) {
			Row dataRow = sheet.createRow(sheet.getLastRowNum() + 1);
			for (int i = 0; i < cellValueArr.length; i++) {
				Cell cell1 = dataRow.createCell(i);
				if (i == 2) {
					// 超链接
				
					cell1.setCellType(HSSFCell.CELL_TYPE_FORMULA);
					cell1.setCellFormula("HYPERLINK(\"" + (String) map.get("linkAddress")+ "\",\"" + (String) map.get(cellValueArr[i])+ "\")");
					cell1.setCellStyle(linkStyle);
				} else {
					// 普通数据
					cell1.setCellValue((String) map.get(cellValueArr[i]));
					cell1.setCellStyle(stylebody);
				}

			}

		}
		return outToEx(filename, hssfWorkbook);
	}

	private String outToEx(String filename, Workbook hssfWorkbook) {
		// 第六步,将文件存到指定位置
		try {

			FileOutputStream fout = new FileOutputStream("文件父路径" + filename + ".xlsx");

			hssfWorkbook.write(fout);
			fout.close();

			// BeanCtx.out("导出成功");
			return "导出成功!";
		} catch (Exception e) {
			e.printStackTrace();

			return "导出失败!";
		}
	}

	public CellStyle getColumnTopStyle(Workbook workbook) {

		// 设置字体
		Font font = workbook.createFont();
		// 设置字体大小
		font.setFontHeightInPoints((short) 12);
		// 字体加粗
		font.setBoldweight(Font.BOLDWEIGHT_BOLD);
		// 设置字体名字
		font.setFontName("Courier New");

		// int length = str.getBytes().length;
		// sheet.setColumnWidth((short)1,(short)(length*256));
		// 设置样式;
		CellStyle style = workbook.createCellStyle();
		// 设置底边框;
		style.setBorderBottom(HSSFCellStyle.BORDER_THIN);
		// 设置底边框颜色;
		// style.setBottomBorderColor(HSSFColor.BLACK.index);
		// 设置左边框;
		style.setBorderLeft(HSSFCellStyle.BORDER_THIN);
		// 设置左边框颜色;
		// style.setLeftBorderColor(HSSFColor.BLACK.index);
		// 设置右边框;

		style.setBorderRight(HSSFCellStyle.BORDER_THIN); // 设置右边框颜色;
		// style.setRightBorderColor(HSSFColor.BLACK.index); //设置顶边框;
		style.setBorderTop(HSSFCellStyle.BORDER_THIN); // 设置顶边框颜色;
		// style.setTopBorderColor(HSSFColor.BLACK.index);

		// 在样式用应用设置的字体;
		style.setFont(font);
		// 设置自动换行;
		style.setWrapText(true);
		// 设置水平对齐的样式为居中对齐;
		style.setAlignment(HSSFCellStyle.ALIGN_CENTER);
		// 设置垂直对齐的样式为居中对齐;
		style.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);

		return style;

	}

	/*
	 * 列数据信息单元格样式
	 */
	public CellStyle getStyle(Workbook workbook) {
		// 设置字体
		Font font = workbook.createFont();
		// 设置字体大小
		font.setFontHeightInPoints((short) 11);
		// 字体加粗
		// font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
		// 设置字体名字
		font.setFontName("Courier New");
		// 设置样式;
		CellStyle style = workbook.createCellStyle();

		// 设置底边框;
		style.setBorderBottom(HSSFCellStyle.BORDER_THIN); // 设置底边框颜色;
		// style.setBottomBorderColor(HSSFColor.BLACK.index); //设置左边框;
		style.setBorderLeft(HSSFCellStyle.BORDER_THIN); // 设置左边框颜色;
		// style.setLeftBorderColor(HSSFColor.BLACK.index); //设置右边框;
		style.setBorderRight(HSSFCellStyle.BORDER_THIN); // 设置右边框颜色;
		// style.setRightBorderColor(HSSFColor.BLACK.index); //设置顶边框;
		style.setBorderTop(HSSFCellStyle.BORDER_THIN); // 设置顶边框颜色;
		// style.setTopBorderColor(HSSFColor.BLACK.index);

		// 在样式用应用设置的字体;
		style.setFont(font);
		// 设置自动换行;
		style.setWrapText(true);
		// 设置水平对齐的样式为居中对齐;
		style.setAlignment(HSSFCellStyle.ALIGN_CENTER);
		// 设置垂直对齐的样式为居中对齐;
		style.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);

		return style;

	}

	public CellStyle getLinkStyle(Workbook workbook) {
		// 设置字体
		Font font = workbook.createFont();
		// 设置字体大小
		font.setFontHeightInPoints((short) 11);
		// 字体加粗
		// font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
		// 设置字体名字
		font.setFontName("Courier New");
		font.setColor(HSSFColor.BLUE.index);
		// 设置样式;
		CellStyle style = workbook.createCellStyle();

		// 设置底边框;
		style.setBorderBottom(HSSFCellStyle.BORDER_THIN); // 设置底边框颜色;
		// style.setBottomBorderColor(HSSFColor.BLACK.index); //设置左边框;
		style.setBorderLeft(HSSFCellStyle.BORDER_THIN); // 设置左边框颜色;
		// style.setLeftBorderColor(HSSFColor.BLACK.index); //设置右边框;
		style.setBorderRight(HSSFCellStyle.BORDER_THIN); // 设置右边框颜色;
		// style.setRightBorderColor(HSSFColor.BLACK.index); //设置顶边框;
		style.setBorderTop(HSSFCellStyle.BORDER_THIN); // 设置顶边框颜色;
		// style.setTopBorderColor(HSSFColor.BLACK.index);

		// 在样式用应用设置的字体;
		style.setFont(font);
		// 设置自动换行;
		style.setWrapText(true);
		// 设置水平对齐的样式为居中对齐;
		style.setAlignment(HSSFCellStyle.ALIGN_CENTER);
		// 设置垂直对齐的样式为居中对齐;
		style.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);

		return style;

	}
}

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
Apache poi 导出excel合并单元格可以使用setRegionStyle方法来设置合并单元格的样式。这个方法接受三个参数,分别是Sheet对象、CellRangeAddress对象和CellStyle对象。在这个方法中,通过循环遍历合并单元格的每一行和每一列,然后获取对应的单元格并设置样式。具体的代码实现可以参考引用\[1\]中的示例代码。 此外,还可以使用PoiModel类来定义导出excel数据模型。这个类包含了内容、上一行同一位置内容、行标、列标等属性。可以根据实际需求来使用这个类。具体的代码实现可以参考引用\[2\]和引用\[3\]中的示例代码。 总结起来,Apache poi 导出excel合并单元格的步骤包括设置合并单元格的样式和定义导出数据的模型。可以根据具体的需求来使用相应的方法和类来实现导出功能。 #### 引用[.reference_title] - *1* *3* [poi 导出Excel 动态 合并单元格](https://blog.csdn.net/weixin_65436454/article/details/127806178)[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^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [使用POI 导出Excel 动态合并单元格](https://blog.csdn.net/weixin_41722928/article/details/112849624)[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^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值