导出自定义表单 结果遇到 SUM函数 时 没有算出结果,直接展示的函数字符串
处理思路 拦截公式字符串 :
将对应的cell 设置 setCellFormula 字符串公式
然后cell类型设置为 CellType.FORMULA
重新配置 这样就解决了问题。
注意先设置CellFormula 然后设置 CellType (我把顺序搞反了,调试了很久)
3这里用的是evaluateFormulaCell 而不是evaluateInCell
原因evaluateInCell 导出的结果没函数计算式
evaluateFormulaCell 导出结果有函数式
结果如下:
这里顺便给出 一个获取列表行求和转化工具
/**
* @author lj
* @title: CellCode
* @projectName cloud
* @date 2024/8/21 002110:46
*/
public class CellCodeUtil {
/**
* 行汇总求和 从1 开始
* @param startIndex 开始的列表下标 从1 开始
* @param endIndex 开始的结束列下标 从1 开始
* @param row 行 从 1 开始
* @return =SUM(B5:D5)
*/
public static String getRowSUN(int startIndex,int endIndex,int row){
StringBuffer data = new StringBuffer("SUM(");
data.append(excelColIndexToStr(startIndex) + row + ":");
data.append(excelColIndexToStr(endIndex) + row + ")");
return data.toString();
}
public static void main(String[] args) {
System.out.println(getRowSUN(2,26,5));
System.out.println(getColumnSUN(5,16,2));
}
/**
* 列 汇总 求和 从1 开始
* @param startIndex
* @param endIndex
* @param columnIndex 列表
* @return
*/
public static String getColumnSUN(int startIndex,int endIndex, int columnIndex){
StringBuffer data = new StringBuffer("SUM(");
data.append(excelColIndexToStr(columnIndex) + startIndex + ":");
data.append(excelColIndexToStr(columnIndex) + endIndex + ")");
return data.toString();
}
/**
* 下标转列
* @param columnIndex 从1 开始
* @return
*/
public static String excelColIndexToStr(int columnIndex) {
if (columnIndex <= 0) {
return null;
}
String columnStr = "";
columnIndex--;
do {
if (columnStr.length() > 0) {
columnIndex--;
}
columnStr = ((char) (columnIndex % 26 + (int) 'A')) + columnStr;
columnIndex = (int) ((columnIndex - columnIndex % 26) / 26);
} while (columnIndex > 0);
return columnStr;
}
}
测试: