diff --git a/easypoi-base/src/main/java/org/jeecgframework/poi/excel/export/template/TemplateSumHanlder.java b/easypoi-base/src/main/java/org/jeecgframework/poi/excel/export/template/TemplateSumHanlder.java new file mode 100644 index 0000000..f075102 --- /dev/null +++ b/easypoi-base/src/main/java/org/jeecgframework/poi/excel/export/template/TemplateSumHanlder.java @@ -0,0 +1,170 @@ +package org.jeecgframework.poi.excel.export.template; + +import java.util.ArrayList; +import java.util.List; + +import org.apache.poi.ss.usermodel.Cell; +import org.apache.poi.ss.usermodel.Row; +import org.apache.poi.ss.usermodel.Sheet; + +import static org.jeecgframework.poi.util.PoiElUtil.*; + +/** + * 针对模板统计问题做统一处理 + * 1.处理模板之前统计需要SUM的数据以及位置 + * 2.遍历时统计数据 + * 3.遍历后设置数据 + * @author JueYue + * @date 2016年6月19日 + */ +public class TemplateSumHanlder { + + private List sumList = new ArrayList(); + + /** + * 统计计算所有的统计单元格 + */ + public void getAllSumCell(Sheet sheet) { + Row row = null; + int index = 0; + while (index <= sheet.getLastRowNum()) { + row = sheet.getRow(index++); + if (row == null) { + continue; + } + for (int i = row.getFirstCellNum(); i < row.getLastCellNum(); i++) { + if (row.getCell(i) != null && row.getCell(i).getStringCellValue().contains(SUM)) { + addSumCellToList(row.getCell(i)); + } + } + } + } + + private void addSumCellToList(Cell cell) { + String cellValue = cell.getStringCellValue(); + int index = 0; + while ((index = indexOfIgnoreCase(cellValue, SUM, index)) != -1) { + TemplateSumEntity entity = new TemplateSumEntity(); + entity.setCellValue(cellValue); + entity.setSumKey(getSumKey(cellValue, index++)); + entity.setCol(cell.getColumnIndex()); + entity.setRow(cell.getRowIndex()); + sumList.add(entity); + } + } + + /** + * SUM:(key) + * + * @param cellValue + * @param index + * @return + */ + private String getSumKey(String cellValue, int index) { + return cellValue.substring(index + 4, cellValue.indexOf(")", index)); + } + + public void addListSizeToSumEntity(){ + + } + + /** + * + * @param rowIndex + */ + public void findForeachList(int rowIndex){ + + } + + private static int indexOfIgnoreCase(String str, String searchStr, int startPos) { + if (str == null || searchStr == null) { + return -1; + } + if (startPos < 0) { + startPos = 0; + } + int endLimit = (str.length() - searchStr.length()) + 1; + if (startPos > endLimit) { + return -1; + } + if (searchStr.length() == 0) { + return startPos; + } + for (int i = startPos; i < endLimit; i++) { + if (str.regionMatches(true, i, searchStr, 0, searchStr.length())) { + return i; + } + } + return -1; + } + + /** + * 统计对象 + * @author JueYue + * @date 2016年6月19日 + */ + protected class TemplateSumEntity { + /** + * CELL的值 + */ + private String cellValue; + /** + * 需要计算的KEY + */ + private String sumKey; + /** + * 列 + */ + private int col; + /** + * 行 + */ + private int row; + /** + * 最后值 + */ + private Object value; + + public String getCellValue() { + return cellValue; + } + + public void setCellValue(String cellValue) { + this.cellValue = cellValue; + } + + public String getSumKey() { + return sumKey; + } + + public void setSumKey(String sumKey) { + this.sumKey = sumKey; + } + + public int getCol() { + return col; + } + + public void setCol(int col) { + this.col = col; + } + + public int getRow() { + return row; + } + + public void setRow(int row) { + this.row = row; + } + + public Object getValue() { + return value; + } + + public void setValue(Object value) { + this.value = value; + } + + } + +} diff --git a/easypoi-base/src/main/java/org/jeecgframework/poi/excel/html/css/CssConverImpl.java b/easypoi-base/src/main/java/org/jeecgframework/poi/excel/html/css/CssConverImpl.java new file mode 100644 index 0000000..2eaf980 --- /dev/null +++ b/easypoi-base/src/main/java/org/jeecgframework/poi/excel/html/css/CssConverImpl.java @@ -0,0 +1,31 @@ +/** + * Copyright 2013-2015 JueYue (qrb.jueyue@gmail.com) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.jeecgframework.poi.excel.html.css; + +import org.apache.poi.ss.usermodel.Cell; +import org.jeecgframework.poi.excel.html.entity.CellStyleEntity; + +public class CssConverImpl implements ICssConvertToHtml, ICssConvertToExcel { + + @Override + public void convertToExcel(Cell cell, CellStyleEntity style) { + } + + @Override + public void convertToHtml(Cell cell, CellStyleEntity entity) { + } + +} diff --git a/easypoi-base/src/main/java/org/jeecgframework/poi/excel/html/css/ICssConvertToExcel.java b/easypoi-base/src/main/java/org/jeecgframework/poi/excel/html/css/ICssConvertToExcel.java new file mode 100644 index 0000000..a282701 --- /dev/null +++ b/easypoi-base/src/main/java/org/jeecgframework/poi/excel/html/css/ICssConvertToExcel.java @@ -0,0 +1,35 @@ +/** + * Copyright 2013-2015 JueYue (qrb.jueyue@gmail.com) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.jeecgframework.poi.excel.html.css; + +import org.apache.poi.ss.usermodel.Cell; +import org.jeecgframework.poi.excel.html.entity.CellStyleEntity; + +/** + * CSS <--> Cell Style 转换类 + * @author JueYue + * 2016年3月20日 下午4:53:04 + */ +public interface ICssConvertToExcel { + /** + * 把HTML样式转换成Cell样式 + * @param cell + * @param style + * @return + */ + public void convertToExcel(Cell cell, CellStyleEntity style); + +} diff --git a/easypoi-base/src/main/java/org/jeecgframework/poi/excel/html/css/ICssConvertToHtml.java b/easypoi-base/src/main/java/org/jeecgframework/poi/excel/html/css/ICssConvertToHtml.java new file mode 100644 index 0000000..fc07b25 --- /dev/null +++ b/easypoi-base/src/main/java/org/jeecgframework/poi/excel/html/css/ICssConvertToHtml.java @@ -0,0 +1,34 @@ +/** + * Copyright 2013-2015 JueYue (qrb.jueyue@gmail.com) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.jeecgframework.poi.excel.html.css; + +import org.apache.poi.ss.usermodel.Cell; +import org.jeecgframework.poi.excel.html.entity.CellStyleEntity; + +/** + * CSS <--> Cell Style 转换类 + * @author JueYue + * 2016年3月20日 下午4:53:04 + */ +public interface ICssConvertToHtml { + /** + * 把Excel单元格样式转换成HTML样式 + * @param cell + * @return + */ + public void convertToHtml(Cell cell, CellStyleEntity style); + +} diff --git a/easypoi-base/src/main/java/org/jeecgframework/poi/excel/html/css/impl/BorderCssConverImpl.java b/easypoi-base/src/main/java/org/jeecgframework/poi/excel/html/css/impl/BorderCssConverImpl.java new file mode 100644 index 0000000..346ddd0 --- /dev/null +++ b/easypoi-base/src/main/java/org/jeecgframework/poi/excel/html/css/impl/BorderCssConverImpl.java @@ -0,0 +1,54 @@ +/** + * Copyright 2013-2015 JueYue (qrb.jueyue@gmail.com) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.jeecgframework.poi.excel.html.css.impl; + +import org.apache.poi.ss.usermodel.Cell; +import org.apache.poi.ss.usermodel.CellStyle; +import org.jeecgframework.poi.excel.html.css.ICssConvertToExcel; +import org.jeecgframework.poi.excel.html.css.ICssConvertToHtml; +import org.jeecgframework.poi.excel.html.entity.CellStyleBorderEntity; +import org.jeecgframework.poi.excel.html.entity.CellStyleEntity; + +/** + * 边框转换实现类 + * @author JueYue + * 2016年4月3日 上午10:26:47 + */ +public class BorderCssConverImpl implements ICssConvertToExcel, ICssConvertToHtml { + + @Override + public void convertToHtml(Cell cell, CellStyleEntity style) { + } + + @Override + public void convertToExcel(Cell cell, CellStyleEntity style) { + CellStyle cellStyle = cell.getCellStyle(); + if (cellStyle == null) { + return; + } + CellStyleBorderEntity border = new CellStyleBorderEntity(); + border.setBorderBottom(cellStyle.getBorderBottom()); + border.setBorderBottomColor(cellStyle.getBottomBorderColor()); + border.setBorderLeft(cellStyle.getBorderLeft()); + border.setBorderLeftColor(cellStyle.getLeftBorderColor()); + border.setBorderRight(cellStyle.getBorderRight()); + border.setBorderRightColor(cellStyle.getRightBorderColor()); + border.setBorderTop(cellStyle.getBorderTop()); + border.setBorderTopColor(cellStyle.getTopBorderColor()); + style.setBorder(border); + } + +} diff --git a/easypoi-base/src/main/java/org/jeecgframework/poi/excel/html/css/impl/HeightCssConverImpl.java b/easypoi-base/src/main/java/org/jeecgframework/poi/excel/html/css/impl/HeightCssConverImpl.java new file mode 100644 index 0000000..6465641 --- /dev/null +++ b/easypoi-base/src/main/java/org/jeecgframework/poi/excel/html/css/impl/HeightCssConverImpl.java @@ -0,0 +1,40 @@ +/** + * Copyright 2013-2015 JueYue (qrb.jueyue@gmail.com) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.jeecgframework.poi.excel.html.css.impl; + +import org.apache.poi.ss.usermodel.Cell; +import org.jeecgframework.poi.excel.html.css.ICssConvertToExcel; +import org.jeecgframework.poi.excel.html.css.ICssConvertToHtml; +import org.jeecgframework.poi.excel.html.entity.CellStyleEntity; + +/** + * 行高转换实现类 + * @author JueYue + * 2016年4月3日 上午10:26:47 + */ +public class HeightCssConverImpl implements ICssConvertToExcel, ICssConvertToHtml { + + @Override + public void convertToHtml(Cell cell, CellStyleEntity style) { + style.setHeight(cell.getRow().getHeight()); + } + + @Override + public void convertToExcel(Cell cell, CellStyleEntity style) { + + } + +} diff --git a/easypoi-base/src/main/java/org/jeecgframework/poi/excel/html/css/impl/WidthCssConverImpl.java b/easypoi-base/src/main/java/org/jeecgframework/poi/excel/html/css/impl/WidthCssConverImpl.java new file mode 100644 index 0000000..8492937 --- /dev/null +++ b/easypoi-base/src/main/java/org/jeecgframework/poi/excel/html/css/impl/WidthCssConverImpl.java @@ -0,0 +1,39 @@ +/** + * Copyright 2013-2015 JueYue (qrb.jueyue@gmail.com) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.jeecgframework.poi.excel.html.css.impl; + +import org.apache.poi.ss.usermodel.Cell; +import org.jeecgframework.poi.excel.html.css.ICssConvertToExcel; +import org.jeecgframework.poi.excel.html.css.ICssConvertToHtml; +import org.jeecgframework.poi.excel.html.entity.CellStyleEntity; + +/** + * 列宽转换实现类 + * @author JueYue + * 2016年4月3日 上午10:26:47 + */ +public class WidthCssConverImpl implements ICssConvertToExcel, ICssConvertToHtml { + + @Override + public void convertToHtml(Cell cell, CellStyleEntity style) { + style.setWidth(cell.getRow().getSheet().getColumnWidth(cell.getColumnIndex())); + } + + @Override + public void convertToExcel(Cell cell, CellStyleEntity style) { + } + +} diff --git a/easypoi-base/src/main/java/org/jeecgframework/poi/excel/html/entity/CellStyleBorderEntity.java b/easypoi-base/src/main/java/org/jeecgframework/poi/excel/html/entity/CellStyleBorderEntity.java new file mode 100644 index 0000000..0327152 --- /dev/null +++ b/easypoi-base/src/main/java/org/jeecgframework/poi/excel/html/entity/CellStyleBorderEntity.java @@ -0,0 +1,105 @@ +/** + * Copyright 2013-2015 JueYue (qrb.jueyue@gmail.com) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.jeecgframework.poi.excel.html.entity; + +/** + * 边框样式 + * @author JueYue + * 2016年4月3日 上午10:35:28 + */ +public class CellStyleBorderEntity { + + private short borderLeft; + + private short borderRight; + + private short borderTop; + + private short borderBottom; + + private short borderLeftColor; + + private short borderRightColor; + + private short borderTopColor; + + private short borderBottomColor; + + public short getBorderLeft() { + return borderLeft; + } + + public void setBorderLeft(short borderLeft) { + this.borderLeft = borderLeft; + } + + public short getBorderRight() { + return borderRight; + } + + public void setBorderRight(short borderRight) { + this.borderRight = borderRight; + } + + public short getBorderTop() { + return borderTop; + } + + public void setBorderTop(short borderTop) { + this.borderTop = borderTop; + } + + public short getBorderBottom() { + return borderBottom; + } + + public void setBorderBottom(short borderBottom) { + this.borderBottom = borderBottom; + } + + public short getBorderLeftColor() { + return borderLeftColor; + } + + public void setBorderLeftColor(short borderLeftColor) { + this.borderLeftColor = borderLeftColor; + } + + public short getBorderRightColor() { + return borderRightColor; + } + + public void setBorderRightColor(short borderRightColor) { + this.borderRightColor = borderRightColor; + } + + public short getBorderTopColor() { + return borderTopColor; + } + + public void setBorderTopColor(short borderTopColor) { + this.borderTopColor = borderTopColor; + } + + public short getBorderBottomColor() { + return borderBottomColor; + } + + public void setBorderBottomColor(short borderBottomColor) { + this.borderBottomColor = borderBottomColor; + } + +} diff --git a/easypoi-base/src/main/java/org/jeecgframework/poi/excel/html/entity/CellStyleEntity.java b/easypoi-base/src/main/java/org/jeecgframework/poi/excel/html/entity/CellStyleEntity.java new file mode 100644 index 0000000..8874b02 --- /dev/null +++ b/easypoi-base/src/main/java/org/jeecgframework/poi/excel/html/entity/CellStyleEntity.java @@ -0,0 +1,97 @@ +/** + * Copyright 2013-2015 JueYue (qrb.jueyue@gmail.com) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.jeecgframework.poi.excel.html.entity; + +/** + * Cell 具有的样式 + * @author JueYue + * 2016年3月20日 下午4:56:51 + */ +public class CellStyleEntity { + /** + * 宽 + */ + private double width; + /** + * 高 + */ + private double height; + /** + * 边框 + */ + private CellStyleBorderEntity border; + /** + * 背景 + */ + private String background; + /** + * 水平位置 + */ + private String align; + /** + * 垂直位置 + */ + private String vetical; + + public double getWidth() { + return width; + } + + public void setWidth(double width) { + this.width = width; + } + + public double getHeight() { + return height; + } + + public void setHeight(double height) { + this.height = height; + } + + public CellStyleBorderEntity getBorder() { + return border; + } + + public void setBorder(CellStyleBorderEntity border) { + this.border = border; + } + + public String getBackground() { + return background; + } + + public void setBackground(String background) { + this.background = background; + } + + public String getAlign() { + return align; + } + + public void setAlign(String align) { + this.align = align; + } + + public String getVetical() { + return vetical; + } + + public void setVetical(String vetical) { + this.vetical = vetical; + } + +} diff --git a/easypoi-base/src/main/java/org/jeecgframework/poi/util/PoiElUtil.java b/easypoi-base/src/main/java/org/jeecgframework/poi/util/PoiElUtil.java index fd7159d..7315239 100644 --- a/easypoi-base/src/main/java/org/jeecgframework/poi/util/PoiElUtil.java +++ b/easypoi-base/src/main/java/org/jeecgframework/poi/util/PoiElUtil.java @@ -38,6 +38,7 @@ public final class PoiElUtil { public static final String NUMBER_SYMBOL = "n:"; public static final String FORMAT_DATE = "fd:"; public static final String FORMAT_NUMBER = "fn:"; + public static final String SUM = "sum:"; public static final String IF_DELETE = "!if:"; public static final String EMPTY = ""; public static final String CONST = "'";