From aa4e7a1821678a2d49ec7adfeb5ae51aafef0a8a Mon Sep 17 00:00:00 2001 From: jueyue Date: Mon, 20 Jul 2015 23:16:06 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E4=BA=86=E5=AF=BC=E5=87=BA?= =?UTF-8?q?=E8=B6=85=E9=93=BE=E6=8E=A5=E7=9A=84=E5=8A=9F=E8=83=BD,?= =?UTF-8?q?=E8=BF=98=E4=B8=8D=E6=98=AF=E5=A4=AA=E5=AE=8C=E7=BE=8E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../poi/excel/annotation/Excel.java | 6 +++ .../excel/entity/params/ExcelBaseEntity.java | 13 +++++ .../poi/excel/export/ExcelExportServer.java | 2 +- .../excel/export/base/ExcelExportBase.java | 49 ++++++++++++------- .../poi/excel/export/base/ExportBase.java | 1 + .../impl/ExcelDataHandlerDefaultImpl.java | 7 +++ .../poi/handler/inter/IExcelDataHandler.java | 13 +++++ pom.xml | 15 ++++-- 8 files changed, 82 insertions(+), 24 deletions(-) diff --git a/easypoi-annotation/src/main/java/org/jeecgframework/poi/excel/annotation/Excel.java b/easypoi-annotation/src/main/java/org/jeecgframework/poi/excel/annotation/Excel.java index 80fee12..99b4230 100644 --- a/easypoi-annotation/src/main/java/org/jeecgframework/poi/excel/annotation/Excel.java +++ b/easypoi-annotation/src/main/java/org/jeecgframework/poi/excel/annotation/Excel.java @@ -123,4 +123,10 @@ public @interface Excel { * @return */ public boolean isStatistics() default false; + + /** + * 这个是不是超链接,如果是需要实现接口返回对象 + * @return + */ + public boolean isHyperlink() default false; } diff --git a/easypoi-base/src/main/java/org/jeecgframework/poi/excel/entity/params/ExcelBaseEntity.java b/easypoi-base/src/main/java/org/jeecgframework/poi/excel/entity/params/ExcelBaseEntity.java index 872ca3d..0f79b05 100644 --- a/easypoi-base/src/main/java/org/jeecgframework/poi/excel/entity/params/ExcelBaseEntity.java +++ b/easypoi-base/src/main/java/org/jeecgframework/poi/excel/entity/params/ExcelBaseEntity.java @@ -48,6 +48,11 @@ public class ExcelBaseEntity { * set/get方法 */ private Method method; + /** + * 这个是不是超链接,如果是需要实现接口返回对象 + * @return + */ + private boolean hyperlink; private List methods; @@ -107,4 +112,12 @@ public class ExcelBaseEntity { this.type = type; } + public boolean isHyperlink() { + return hyperlink; + } + + public void setHyperlink(boolean hyperlink) { + this.hyperlink = hyperlink; + } + } diff --git a/easypoi-base/src/main/java/org/jeecgframework/poi/excel/export/ExcelExportServer.java b/easypoi-base/src/main/java/org/jeecgframework/poi/excel/export/ExcelExportServer.java index 9a56223..8f8634f 100644 --- a/easypoi-base/src/main/java/org/jeecgframework/poi/excel/export/ExcelExportServer.java +++ b/easypoi-base/src/main/java/org/jeecgframework/poi/excel/export/ExcelExportServer.java @@ -124,7 +124,7 @@ public class ExcelExportServer extends ExcelExportBase { } try { dataHanlder = entity.getDataHanlder(); - if (dataHanlder != null) { + if (dataHanlder != null && dataHanlder.getNeedHandlerFields() != null) { needHanlderList = Arrays.asList(dataHanlder.getNeedHandlerFields()); } // 创建表格样式 diff --git a/easypoi-base/src/main/java/org/jeecgframework/poi/excel/export/base/ExcelExportBase.java b/easypoi-base/src/main/java/org/jeecgframework/poi/excel/export/base/ExcelExportBase.java index 922ebe3..d1b7d28 100644 --- a/easypoi-base/src/main/java/org/jeecgframework/poi/excel/export/base/ExcelExportBase.java +++ b/easypoi-base/src/main/java/org/jeecgframework/poi/excel/export/base/ExcelExportBase.java @@ -20,7 +20,6 @@ import java.io.ByteArrayOutputStream; import java.io.File; import java.io.IOException; import java.text.DecimalFormat; -import java.util.ArrayList; import java.util.Collection; import java.util.HashMap; import java.util.List; @@ -45,7 +44,6 @@ import org.apache.poi.xssf.usermodel.XSSFClientAnchor; import org.apache.poi.xssf.usermodel.XSSFRichTextString; import org.jeecgframework.poi.excel.entity.enmus.ExcelType; import org.jeecgframework.poi.excel.entity.params.ExcelExportEntity; -import org.jeecgframework.poi.excel.entity.params.MergeEntity; import org.jeecgframework.poi.excel.entity.vo.PoiBaseConstants; import org.jeecgframework.poi.excel.export.styler.IExcelExportStyler; import org.jeecgframework.poi.util.PoiMergeCellUtil; @@ -61,18 +59,17 @@ import org.slf4j.LoggerFactory; */ public abstract class ExcelExportBase extends ExportBase { - private static final Logger LOGGER = LoggerFactory - .getLogger(ExcelExportBase.class); + private static final Logger LOGGER = LoggerFactory.getLogger(ExcelExportBase.class); - private int currentIndex = 0; + private int currentIndex = 0; - protected ExcelType type = ExcelType.HSSF; + protected ExcelType type = ExcelType.HSSF; - private Map statistics = new HashMap(); + private Map statistics = new HashMap(); private static final DecimalFormat DOUBLE_FORMAT = new DecimalFormat("######0.00"); - private IExcelExportStyler excelExportStyler; + private IExcelExportStyler excelExportStyler; /** * 创建 最主要的 Cells @@ -96,8 +93,8 @@ public abstract class ExcelExportBase extends ExportBase { Collection list = getListCellValue(entity, t); int listC = 0; for (Object obj : list) { - createListCells(patriarch, index + listC, cellNum, obj, entity.getList(), - sheet, workbook); + createListCells(patriarch, index + listC, cellNum, obj, entity.getList(), sheet, + workbook); listC++; } cellNum += entity.getList().size(); @@ -108,7 +105,14 @@ public abstract class ExcelExportBase extends ExportBase { Object value = getCellValue(entity, t); if (entity.getType() == 1) { createStringCell(row, cellNum++, value == null ? "" : value.toString(), - index % 2 == 0 ? getStyles(false, entity) : getStyles(true, entity), entity); + index % 2 == 0 ? getStyles(false, entity) : getStyles(true, entity), + entity); + if (entity.isHyperlink()) { + row.getCell(cellNum - 1) + .setHyperlink(dataHanlder.getHyperlink( + row.getSheet().getWorkbook().getCreationHelper(), t, + entity.getName(), value)); + } } else { createImageCell(patriarch, entity, row, cellNum++, value == null ? "" : value.toString(), t); @@ -126,8 +130,8 @@ public abstract class ExcelExportBase extends ExportBase { sheet.getRow(i).createCell(cellNum); sheet.getRow(i).getCell(cellNum).setCellStyle(getStyles(false, entity)); } - sheet.addMergedRegion(new CellRangeAddress(index, index + maxHeight - 1, cellNum, - cellNum)); + sheet.addMergedRegion( + new CellRangeAddress(index, index + maxHeight - 1, cellNum, cellNum)); cellNum++; } } @@ -180,8 +184,9 @@ public abstract class ExcelExportBase extends ExportBase { LOGGER.error(e.getMessage(), e); } } else { - byte[] value = (byte[]) (entity.getMethods() != null ? getFieldBySomeMethod( - entity.getMethods(), obj) : entity.getMethod().invoke(obj, new Object[] {})); + byte[] value = (byte[]) (entity.getMethods() != null + ? getFieldBySomeMethod(entity.getMethods(), obj) + : entity.getMethod().invoke(obj, new Object[] {})); if (value != null) { patriarch.createPicture(anchor, row.getSheet().getWorkbook().addPicture(value, getImageType(value))); @@ -193,8 +198,8 @@ public abstract class ExcelExportBase extends ExportBase { private int createIndexCell(Row row, int index, ExcelExportEntity excelExportEntity) { if (excelExportEntity.getName().equals("序号") && excelExportEntity.getFormat().equals(PoiBaseConstants.IS_ADD_INDEX)) { - createStringCell(row, 0, currentIndex + "", index % 2 == 0 ? getStyles(false, null) - : getStyles(true, null), null); + createStringCell(row, 0, currentIndex + "", + index % 2 == 0 ? getStyles(false, null) : getStyles(true, null), null); currentIndex = currentIndex + 1; return 1; } @@ -207,8 +212,8 @@ public abstract class ExcelExportBase extends ExportBase { * @param styles */ public void createListCells(Drawing patriarch, int index, int cellNum, Object obj, - List excelParams, Sheet sheet, Workbook workbook) - throws Exception { + List excelParams, Sheet sheet, + Workbook workbook) throws Exception { ExcelExportEntity entity; Row row; if (sheet.getRow(index) == null) { @@ -224,6 +229,12 @@ public abstract class ExcelExportBase extends ExportBase { createStringCell(row, cellNum++, value == null ? "" : value.toString(), row.getRowNum() % 2 == 0 ? getStyles(false, entity) : getStyles(true, entity), entity); + if (entity.isHyperlink()) { + row.getCell(cellNum - 1) + .setHyperlink(dataHanlder.getHyperlink( + row.getSheet().getWorkbook().getCreationHelper(), obj, entity.getName(), + value)); + } } else { createImageCell(patriarch, entity, row, cellNum++, value == null ? "" : value.toString(), obj); diff --git a/easypoi-base/src/main/java/org/jeecgframework/poi/excel/export/base/ExportBase.java b/easypoi-base/src/main/java/org/jeecgframework/poi/excel/export/base/ExportBase.java index cb14815..7ff050a 100644 --- a/easypoi-base/src/main/java/org/jeecgframework/poi/excel/export/base/ExportBase.java +++ b/easypoi-base/src/main/java/org/jeecgframework/poi/excel/export/base/ExportBase.java @@ -236,6 +236,7 @@ public class ExportBase { excelEntity.setFormat(StringUtils.isNotEmpty(excel.exportFormat()) ? excel.exportFormat() : excel.format()); excelEntity.setStatistics(excel.isStatistics()); + excelEntity.setHyperlink(excel.isHyperlink()); String fieldname = field.getName(); excelEntity.setMethod(PoiPublicUtil.getMethod(fieldname, pojoClass)); } diff --git a/easypoi-base/src/main/java/org/jeecgframework/poi/handler/impl/ExcelDataHandlerDefaultImpl.java b/easypoi-base/src/main/java/org/jeecgframework/poi/handler/impl/ExcelDataHandlerDefaultImpl.java index 46a96af..493f063 100644 --- a/easypoi-base/src/main/java/org/jeecgframework/poi/handler/impl/ExcelDataHandlerDefaultImpl.java +++ b/easypoi-base/src/main/java/org/jeecgframework/poi/handler/impl/ExcelDataHandlerDefaultImpl.java @@ -17,6 +17,8 @@ package org.jeecgframework.poi.handler.impl; import java.util.Map; +import org.apache.poi.ss.usermodel.CreationHelper; +import org.apache.poi.ss.usermodel.Hyperlink; import org.jeecgframework.poi.handler.inter.IExcelDataHandler; /** @@ -56,4 +58,9 @@ public abstract class ExcelDataHandlerDefaultImpl implements IExcelDataHandler { map.put(originKey, value); } + @Override + public Hyperlink getHyperlink(CreationHelper creationHelper, Object obj, String name, Object value) { + return null; + } + } diff --git a/easypoi-base/src/main/java/org/jeecgframework/poi/handler/inter/IExcelDataHandler.java b/easypoi-base/src/main/java/org/jeecgframework/poi/handler/inter/IExcelDataHandler.java index 184f969..c7acb62 100644 --- a/easypoi-base/src/main/java/org/jeecgframework/poi/handler/inter/IExcelDataHandler.java +++ b/easypoi-base/src/main/java/org/jeecgframework/poi/handler/inter/IExcelDataHandler.java @@ -17,6 +17,9 @@ package org.jeecgframework.poi.handler.inter; import java.util.Map; +import org.apache.poi.ss.usermodel.CreationHelper; +import org.apache.poi.ss.usermodel.Hyperlink; + /** * Excel 导入导出 数据处理接口 * @@ -72,4 +75,14 @@ public interface IExcelDataHandler { */ public void setMapValue(Map map, String originKey, Object value); + /** + * 获取这个字段的 {@Hyperlink},07版本需要,03版本不需要 + * @param wb + * @param obj + * @param name + * @param value + * @return + */ + public Hyperlink getHyperlink(CreationHelper creationHelper, Object obj, String name, Object value); + } diff --git a/pom.xml b/pom.xml index 3dcf105..ae00c8e 100644 --- a/pom.xml +++ b/pom.xml @@ -23,10 +23,10 @@ - scm:git@git.oschina.net:jueyue/easypoi.git - scm:git@git.oschina.net:jueyue/easypoi.git - git@git.oschina.net:jueyue/easypoi.git - + scm:git@git.oschina.net:jueyue/easypoi.git + scm:git@git.oschina.net:jueyue/easypoi.git + git@git.oschina.net:jueyue/easypoi.git + @@ -63,6 +63,12 @@ org.apache.poi poi-ooxml-schemas + + + xerces + xercesImpl + + ${poi.version} @@ -76,6 +82,7 @@ org.apache.poi poi-scratchpad ${poi.version} + true