|
@@ -0,0 +1,663 @@
|
|
|
+package com.rongwei.bscommon.sys.utils;
|
|
|
+
|
|
|
+import com.alibaba.fastjson.JSONArray;
|
|
|
+import com.alibaba.fastjson.JSONObject;
|
|
|
+import com.rongwei.rwcommon.utils.JSONUtils;
|
|
|
+import lombok.extern.slf4j.Slf4j;
|
|
|
+import org.apache.poi.ss.usermodel.*;
|
|
|
+import org.apache.poi.ss.util.CellRangeAddress;
|
|
|
+
|
|
|
+import java.util.*;
|
|
|
+
|
|
|
+/**
|
|
|
+ * sheet操作
|
|
|
+ * @author Administrator
|
|
|
+ */
|
|
|
+@Slf4j
|
|
|
+public class XlsSheetUtil {
|
|
|
+ /**
|
|
|
+ * 导出sheet
|
|
|
+ * @param wb
|
|
|
+ * @param sheetNum
|
|
|
+ * @param dbObject
|
|
|
+ */
|
|
|
+ public static void exportSheet(Workbook wb, int sheetNum, JSONObject dbObject){
|
|
|
+ Sheet sheet=wb.createSheet();
|
|
|
+
|
|
|
+ //设置sheet位置,名称
|
|
|
+ if(dbObject.containsKey("name")&&dbObject.get("name")!=null){
|
|
|
+ wb.setSheetName(sheetNum,dbObject.get("name").toString());
|
|
|
+ }else{
|
|
|
+ wb.setSheetName(sheetNum,"sheet"+sheetNum);
|
|
|
+ }
|
|
|
+ //是否隐藏
|
|
|
+ if(dbObject.containsKey("hide") && dbObject.get("hide").toString().equals("1")){
|
|
|
+ wb.setSheetHidden(sheetNum,true);
|
|
|
+ }
|
|
|
+ //是否当前选中页
|
|
|
+ if(dbObject.containsKey("status") && dbObject.get("status").toString().equals("1")){
|
|
|
+ sheet.setSelected(true);
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ //循环数据
|
|
|
+ if(dbObject.containsKey("celldata")&&dbObject.get("celldata")!=null){
|
|
|
+ //取到所有单元格集合
|
|
|
+ JSONArray celldata = dbObject.getJSONArray("celldata");
|
|
|
+// List<JSONObject> cells_json = ( List<JSONObject> )dbObject.get("celldata");
|
|
|
+ Map<Integer,List<JSONObject>> cellMap=cellGroup(celldata);
|
|
|
+ //循环每一行
|
|
|
+ for(Integer r:cellMap.keySet()){
|
|
|
+ Row row=sheet.createRow(r);
|
|
|
+ //循环每一列
|
|
|
+ for(JSONObject col:cellMap.get(r)){
|
|
|
+ createCell(wb,sheet,row,col);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ setColumAndRow(dbObject,sheet);
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 每一个单元格
|
|
|
+ * @param row
|
|
|
+ * @param dbObject
|
|
|
+ */
|
|
|
+ private static void createCell(Workbook wb, Sheet sheet, Row row, JSONObject dbObject){
|
|
|
+ if(dbObject.containsKey("c")) {
|
|
|
+ Integer c = getStrToInt(dbObject.get("c"));
|
|
|
+ if (c != null) {
|
|
|
+ Cell cell=row.createCell(c);
|
|
|
+ //取单元格中的v_json
|
|
|
+ if(dbObject.containsKey("v")) {
|
|
|
+ //获取v对象
|
|
|
+ Object obj = dbObject.get("v");
|
|
|
+ if (obj == null) {
|
|
|
+ //没有内容
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ //如果v对象直接是字符串
|
|
|
+ if(obj instanceof String){
|
|
|
+ if(((String) obj).length()>0){
|
|
|
+ cell.setCellValue(obj.toString());
|
|
|
+ }
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ //转换v为对象(v是一个对象)
|
|
|
+// JSONObject v_json = (JSONObject)obj;
|
|
|
+ JSONObject v_json = JSONUtils.toEntity(obj, JSONObject.class);
|
|
|
+ //样式
|
|
|
+ CellStyle style= wb.createCellStyle();
|
|
|
+ cell.setCellStyle(style);
|
|
|
+
|
|
|
+ //bs 边框样式 //bc 边框颜色
|
|
|
+ setBorderStyle(style,v_json,"bs","bc");
|
|
|
+ //bs_t 上边框样式 bc_t 上边框颜色
|
|
|
+ setBorderStyle(style,v_json,"bs_t","bc_t");
|
|
|
+ //bs_b 下边框样式 bc_b 下边框颜色
|
|
|
+ setBorderStyle(style,v_json,"bs_b","bc_b");
|
|
|
+ //bs_l 左边框样式 bc_l 左边框颜色
|
|
|
+ setBorderStyle(style,v_json,"bs_l","bc_l");
|
|
|
+ //bs_r 右边框样式 bc_r 右边框颜色
|
|
|
+ setBorderStyle(style,v_json,"bs_r","bc_r");
|
|
|
+
|
|
|
+
|
|
|
+ //合并单元格
|
|
|
+ //参数1:起始行 参数2:终止行 参数3:起始列 参数4:终止列
|
|
|
+ //CellRangeAddress region1 = new CellRangeAddress(rowNumber, rowNumber, (short) 0, (short) 11);
|
|
|
+
|
|
|
+ //mc 合并单元格
|
|
|
+ if(v_json.containsKey("mc")){
|
|
|
+ //是合并的单元格
|
|
|
+ JSONObject mc=v_json.getJSONObject("mc");
|
|
|
+ if(mc.containsKey("rs") && mc.containsKey("cs")){
|
|
|
+ //合并的第一个单元格
|
|
|
+ if(mc.containsKey("r") && mc.containsKey("c")){
|
|
|
+ Integer _rs=getIntByDBObject(mc,"rs")-1;
|
|
|
+ Integer _cs=getIntByDBObject(mc,"cs")-1;
|
|
|
+ Integer _r=getIntByDBObject(mc,"r");
|
|
|
+ Integer _c=getIntByDBObject(mc,"c");
|
|
|
+
|
|
|
+ CellRangeAddress region = new CellRangeAddress(_r.shortValue(),(_r.shortValue()+_rs.shortValue()), _c.shortValue(),(_c.shortValue()+_cs.shortValue()));
|
|
|
+ sheet.addMergedRegion(region);
|
|
|
+ }
|
|
|
+ }else{
|
|
|
+ //不是合并的第一个单元格
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ //取v值 (在数据类型中处理)
|
|
|
+ //ct 单元格值格式 (fa,t)
|
|
|
+ setFormatByCt(wb,cell,style,v_json);
|
|
|
+
|
|
|
+ //font设置
|
|
|
+ setCellStyleFont(wb,style,v_json);
|
|
|
+
|
|
|
+ //bg 背景颜色
|
|
|
+ if(v_json.containsKey("bg")){
|
|
|
+ String _v=getByDBObject(v_json,"bg");
|
|
|
+ Short _color=ColorUtil.getColorByStr(_v);
|
|
|
+ if(_color!=null) {
|
|
|
+ style.setFillBackgroundColor(_color);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ //vt 垂直对齐 垂直对齐方式(0=居中,1=上,2=下)
|
|
|
+ if(v_json.containsKey("vt")){
|
|
|
+ Integer _v=getIntByDBObject(v_json, "vt");
|
|
|
+ if(_v!=null && _v>=0 && _v<=2){
|
|
|
+ style.setVerticalAlignment(ConstantUtil.getVerticalType(_v));
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ //ht 水平对齐 水平对齐方式(0=居中,1=左对齐,2=右对齐)
|
|
|
+ if(v_json.containsKey("ht")){
|
|
|
+ Integer _v=getIntByDBObject(v_json,"ht");
|
|
|
+ if(_v!=null && _v>=0 && _v<=2){
|
|
|
+ style.setAlignment(ConstantUtil.getHorizontaltype(_v));
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ //tr 文字旋转 文字旋转角度(0=0,1=45,2=-45,3=竖排文字,4=90,5=-90)
|
|
|
+ if(v_json.containsKey("tr")){
|
|
|
+ Integer _v=getIntByDBObject(v_json, "tr");
|
|
|
+ if(_v!=null){
|
|
|
+ style.setRotation(ConstantUtil.getRotation(_v));
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ //tb 文本换行 0 截断、1溢出、2 自动换行
|
|
|
+ // 2:setTextWrapped 0和1:IsTextWrapped = true
|
|
|
+ if(v_json.containsKey("tb")){
|
|
|
+ Integer _v=getIntByDBObject(v_json,"tb");
|
|
|
+ if(_v!=null){
|
|
|
+ if(_v>=0 && _v<=1){
|
|
|
+ style.setWrapText(false);
|
|
|
+ }else{
|
|
|
+ style.setWrapText(true);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ //f 公式
|
|
|
+ if(v_json.containsKey("f")){
|
|
|
+ String _v=getByDBObject(v_json,"f");
|
|
|
+ if(_v.length()>0){
|
|
|
+ try {
|
|
|
+ if(_v.startsWith("=")){
|
|
|
+ cell.setCellFormula(_v.substring(1));
|
|
|
+ }else{
|
|
|
+ cell.setCellFormula(_v);
|
|
|
+ }
|
|
|
+ }catch (Exception ex){
|
|
|
+ log.error("公式 {};Error:{}",_v,ex.toString());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 设置单元格,宽、高
|
|
|
+ * @param dbObject
|
|
|
+ * @param sheet
|
|
|
+ */
|
|
|
+ private static void setColumAndRow(JSONObject dbObject, Sheet sheet){
|
|
|
+ if(dbObject.containsKey("config")){
|
|
|
+ JSONObject config = dbObject.getJSONObject("config");
|
|
|
+
|
|
|
+ if(config.containsKey("columlen")){
|
|
|
+ JSONObject columlen = config.getJSONObject("columlen");
|
|
|
+ if(columlen!=null){
|
|
|
+ for(String k:columlen.keySet()){
|
|
|
+ Integer _i=getStrToInt(k);
|
|
|
+ Integer _v=getStrToInt(columlen.get(k).toString());
|
|
|
+ if(_i!=null && _v!=null){
|
|
|
+ //sheet.setColumnWidth(_i,MSExcelUtil.heightUnits2Pixel(_v.shortValue()))
|
|
|
+ sheet.setColumnWidth(_i,_v.shortValue());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if(config.containsKey("rowlen")){
|
|
|
+ JSONObject rowlen = config.getJSONObject("rowlen");
|
|
|
+ if(rowlen!=null){
|
|
|
+ for(String k:rowlen.keySet()){
|
|
|
+ Integer _i=getStrToInt(k);
|
|
|
+ Integer _v=getStrToInt(rowlen.get(k).toString());
|
|
|
+ if(_i!=null && _v!=null){
|
|
|
+ Row row=sheet.getRow(_i);
|
|
|
+ if(row!=null) {
|
|
|
+ //row.setHeightInPoints(MSExcelUtil.pixel2WidthUnits(_v.shortValue()))
|
|
|
+ row.setHeightInPoints(_v.shortValue());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 单元格字体相关样式
|
|
|
+ * @param wb
|
|
|
+ * @param style
|
|
|
+ * @param dbObject
|
|
|
+ */
|
|
|
+ private static void setCellStyleFont(Workbook wb, CellStyle style, JSONObject dbObject){
|
|
|
+ Font font = wb.createFont();
|
|
|
+ style.setFont(font);
|
|
|
+
|
|
|
+ //ff 字体
|
|
|
+ if(dbObject.containsKey("ff")){
|
|
|
+ if(dbObject.get("ff") instanceof Integer){
|
|
|
+ Integer _v=getIntByDBObject(dbObject,"ff");
|
|
|
+ if(_v!=null && ConstantUtil.ff_IntegerToName.containsKey(_v)){
|
|
|
+ font.setFontName(ConstantUtil.ff_IntegerToName.get(_v));
|
|
|
+ }
|
|
|
+ }else if(dbObject.get("ff") instanceof String){
|
|
|
+ font.setFontName(getByDBObject(dbObject,"ff"));
|
|
|
+ }
|
|
|
+ }
|
|
|
+ //fc 字体颜色
|
|
|
+ if(dbObject.containsKey("fc")){
|
|
|
+ String _v=getByDBObject(dbObject,"fc");
|
|
|
+ Short _color=ColorUtil.getColorByStr(_v);
|
|
|
+ if(_color!=null) {
|
|
|
+ font.setColor(_color);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ //bl 粗体
|
|
|
+ if(dbObject.containsKey("bl")){
|
|
|
+ Integer _v=getIntByDBObject(dbObject,"bl");
|
|
|
+ if(_v!=null){
|
|
|
+ if(_v.equals(1)) {
|
|
|
+ //是否粗体显示
|
|
|
+ font.setBold(true);
|
|
|
+ }else{
|
|
|
+ font.setBold(false);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ //it 斜体
|
|
|
+ if(dbObject.containsKey("it")){
|
|
|
+ Integer _v=getIntByDBObject(dbObject,"it");
|
|
|
+ if(_v!=null){
|
|
|
+ if(_v.equals(1)) {
|
|
|
+ font.setItalic(true);
|
|
|
+ }else{
|
|
|
+ font.setItalic(false);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ //fs 字体大小
|
|
|
+ if(dbObject.containsKey("fs")){
|
|
|
+ Integer _v=getStrToInt(getObjectByDBObject(dbObject,"fs"));
|
|
|
+ if(_v!=null){
|
|
|
+ font.setFontHeightInPoints(_v.shortValue());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ //cl 删除线 (导入没有) 0 常规 、 1 删除线
|
|
|
+ if(dbObject.containsKey("cl")){
|
|
|
+ Integer _v=getIntByDBObject(dbObject,"cl");
|
|
|
+ if(_v!=null){
|
|
|
+ if(_v.equals(1)) {
|
|
|
+ font.setStrikeout(true);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ //ul 下划线
|
|
|
+ if(dbObject.containsKey("ul")){
|
|
|
+ Integer _v=getIntByDBObject(dbObject,"ul");
|
|
|
+ if(_v!=null){
|
|
|
+ if(_v.equals(1)) {
|
|
|
+ font.setUnderline(Font.U_SINGLE);
|
|
|
+ }else{
|
|
|
+ font.setUnderline(Font.U_NONE);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 设置cell边框颜色样式
|
|
|
+ * @param style 样式
|
|
|
+ * @param dbObject json对象
|
|
|
+ * @param bs 样式
|
|
|
+ * @param bc 样式
|
|
|
+ */
|
|
|
+ private static void setBorderStyle(CellStyle style, JSONObject dbObject, String bs, String bc ){
|
|
|
+ //bs 边框样式
|
|
|
+ if(dbObject.containsKey(bs)){
|
|
|
+ Integer _v=getStrToInt(getByDBObject(dbObject,bs));
|
|
|
+ if(_v!=null){
|
|
|
+ //边框没有,不作改变
|
|
|
+ if(bs.equals("bs") || bs.equals("bs_t")){
|
|
|
+ style.setBorderTop(BorderStyle.valueOf(_v.shortValue()));
|
|
|
+ }
|
|
|
+ if(bs.equals("bs") || bs.equals("bs_b")){
|
|
|
+ style.setBorderBottom(BorderStyle.valueOf(_v.shortValue()));
|
|
|
+ }
|
|
|
+ if(bs.equals("bs") || bs.equals("bs_l")){
|
|
|
+ style.setBorderLeft(BorderStyle.valueOf(_v.shortValue()));
|
|
|
+ }
|
|
|
+ if(bs.equals("bs") || bs.equals("bs_r")){
|
|
|
+ style.setBorderRight(BorderStyle.valueOf(_v.shortValue()));
|
|
|
+ }
|
|
|
+
|
|
|
+ //bc 边框颜色
|
|
|
+ String _vcolor=getByDBObject(dbObject,bc);
|
|
|
+ if(_vcolor!=null){
|
|
|
+ Short _color=ColorUtil.getColorByStr(_vcolor);
|
|
|
+ if(_color!=null){
|
|
|
+ if(bc.equals("bc") || bc.equals("bc_t")){
|
|
|
+ style.setTopBorderColor(_color);
|
|
|
+ }
|
|
|
+ if(bc.equals("bc") || bc.equals("bc_b")){
|
|
|
+ style.setBottomBorderColor(_color);
|
|
|
+ }
|
|
|
+ if(bc.equals("bc") || bc.equals("bc_l")){
|
|
|
+ style.setLeftBorderColor(_color);
|
|
|
+ }
|
|
|
+ if(bc.equals("bc") || bc.equals("bc_r")){
|
|
|
+ style.setRightBorderColor(_color);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 设置单元格格式 ct 单元格值格式 (fa,t)
|
|
|
+ * @param cell
|
|
|
+ * @param style
|
|
|
+ * @param dbObject
|
|
|
+ */
|
|
|
+ private static void setFormatByCt(Workbook wb, Cell cell, CellStyle style, JSONObject dbObject){
|
|
|
+
|
|
|
+ if(!dbObject.containsKey("v") && dbObject.containsKey("ct")){
|
|
|
+ /* 处理以下数据结构
|
|
|
+ {
|
|
|
+ "celldata": [{
|
|
|
+ "c": 0,
|
|
|
+ "r": 8,
|
|
|
+ "v": {
|
|
|
+ "ct": {
|
|
|
+ "s": [{
|
|
|
+ "v": "sdsdgdf\r\ndfgdfg\r\ndsfgdfgdf\r\ndsfgdfg"
|
|
|
+ }],
|
|
|
+ "t": "inlineStr",
|
|
|
+ "fa": "General"
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }]
|
|
|
+ }
|
|
|
+ */
|
|
|
+ JSONObject ct=dbObject.getJSONObject("ct");
|
|
|
+ if(ct.containsKey("s")){
|
|
|
+ Object s=ct.get("s");
|
|
|
+ if(s instanceof List && ((List) s).size()>0){
|
|
|
+ JSONObject _s1=(JSONObject)((List) s).get(0);
|
|
|
+ if(_s1.containsKey("v") && _s1.get("v")instanceof String){
|
|
|
+ dbObject.put("v",_s1.get("v"));
|
|
|
+ style.setWrapText(true);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ //String v = ""; //初始化
|
|
|
+ if(dbObject.containsKey("v")){
|
|
|
+ //v = v_json.get("v").toString();
|
|
|
+ //取到v后,存到poi单元格对象
|
|
|
+ //设置该单元格值
|
|
|
+ //cell.setValue(v);
|
|
|
+
|
|
|
+ //String v=getByDBObject(v_json,"v");
|
|
|
+ //cell.setValue(v);
|
|
|
+ Object obj=getObjectByDBObject(dbObject,"v");
|
|
|
+ if(obj instanceof Number){
|
|
|
+ cell.setCellValue(Double.valueOf(obj.toString()));
|
|
|
+ }else if(obj instanceof Double){
|
|
|
+ cell.setCellValue((Double) obj);
|
|
|
+ }else if(obj instanceof Date){
|
|
|
+ cell.setCellValue((Date)obj);
|
|
|
+ }else if(obj instanceof Calendar){
|
|
|
+ cell.setCellValue((Calendar) obj);
|
|
|
+ }else if(obj instanceof RichTextString){
|
|
|
+ cell.setCellValue((RichTextString) obj);
|
|
|
+ }else if(obj instanceof String){
|
|
|
+ cell.setCellValue((String) obj);
|
|
|
+ }else{
|
|
|
+ cell.setCellValue(obj.toString());
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ if(dbObject.containsKey("ct")){
|
|
|
+ JSONObject ct=dbObject.getJSONObject("ct");
|
|
|
+ if(ct.containsKey("fa") && ct.containsKey("t")){
|
|
|
+ //t 0=bool,1=datetime,2=error,3=null,4=numeric,5=string,6=unknown
|
|
|
+ String fa=getByDBObject(ct,"fa"); //单元格格式format定义串
|
|
|
+ String t=getByDBObject(ct,"t"); //单元格格式type类型
|
|
|
+
|
|
|
+ Integer _i=ConstantUtil.getNumberFormatMap(fa);
|
|
|
+ switch(t){
|
|
|
+ case "s":{
|
|
|
+ //字符串
|
|
|
+ if(_i>=0){
|
|
|
+ style.setDataFormat(_i.shortValue());
|
|
|
+ }else{
|
|
|
+ style.setDataFormat((short)0);
|
|
|
+ }
|
|
|
+ cell.setCellType(CellType.STRING);
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ case "d":{
|
|
|
+ //日期
|
|
|
+ Date _d=null;
|
|
|
+ String v=getByDBObject(dbObject,"m");
|
|
|
+ if(v.length()==0){
|
|
|
+ v=getByDBObject(dbObject,"v");
|
|
|
+ }
|
|
|
+ if(v.length()>0){
|
|
|
+ if(v.indexOf("-")>-1){
|
|
|
+ if(v.indexOf(":")>-1){
|
|
|
+ _d= ConstantUtil.stringToDateTime(v);
|
|
|
+ }else{
|
|
|
+ _d= ConstantUtil.stringToDate(v);
|
|
|
+ }
|
|
|
+ }else{
|
|
|
+ _d= ConstantUtil.toDate(v);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if(_d!=null){
|
|
|
+ //能转换为日期
|
|
|
+ cell.setCellValue(_d);
|
|
|
+ DataFormat format= wb.createDataFormat();
|
|
|
+ style.setDataFormat(format.getFormat(fa));
|
|
|
+
|
|
|
+ }else{
|
|
|
+ //不能转换为日期
|
|
|
+ if(_i>=0){
|
|
|
+ style.setDataFormat(_i.shortValue());
|
|
|
+ }else{
|
|
|
+ style.setDataFormat((short)0);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ case "b":{
|
|
|
+ //逻辑
|
|
|
+ cell.setCellType(CellType.BOOLEAN);
|
|
|
+ if(_i>=0){
|
|
|
+ style.setDataFormat(_i.shortValue());
|
|
|
+ }else{
|
|
|
+ DataFormat format= wb.createDataFormat();
|
|
|
+ style.setDataFormat(format.getFormat(fa));
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ case "n":{
|
|
|
+ //数值
|
|
|
+ cell.setCellType(CellType.NUMERIC);
|
|
|
+ if(_i>=0){
|
|
|
+ style.setDataFormat(_i.shortValue());
|
|
|
+ }else{
|
|
|
+ DataFormat format= wb.createDataFormat();
|
|
|
+ style.setDataFormat(format.getFormat(fa));
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ case "u":
|
|
|
+ case "g":{
|
|
|
+ //general 自动类型
|
|
|
+ //cell.setCellType(CellType._NONE);
|
|
|
+ if(_i>=0){
|
|
|
+ style.setDataFormat(_i.shortValue());
|
|
|
+ }else{
|
|
|
+ DataFormat format= wb.createDataFormat();
|
|
|
+ style.setDataFormat(format.getFormat(fa));
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ case "e":{
|
|
|
+ //错误
|
|
|
+ cell.setCellType(CellType.ERROR);
|
|
|
+ if(_i>=0){
|
|
|
+ style.setDataFormat(_i.shortValue());
|
|
|
+ }else{
|
|
|
+ DataFormat format= wb.createDataFormat();
|
|
|
+ style.setDataFormat(format.getFormat(fa));
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 内容按行分组
|
|
|
+ * @param cells
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ private static Map<Integer,List<JSONObject>> cellGroup(JSONArray cells){
|
|
|
+ Map<Integer,List<JSONObject>> cellMap=new HashMap<>(100);
|
|
|
+ for(int m = 0, n = cells.size(); m < n; m++){
|
|
|
+ JSONObject dbObject = cells.getJSONObject(m);
|
|
|
+ //行号
|
|
|
+ if(dbObject.containsKey("r")){
|
|
|
+ Integer r =getStrToInt(dbObject.get("r"));
|
|
|
+ if(r!=null){
|
|
|
+ if(cellMap.containsKey(r)){
|
|
|
+ cellMap.get(r).add(dbObject);
|
|
|
+ }else{
|
|
|
+ List<JSONObject> list=new ArrayList<>(10);
|
|
|
+ list.add(dbObject);
|
|
|
+ cellMap.put(r,list);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+ return cellMap;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 获取一个k的值
|
|
|
+ * @param b
|
|
|
+ * @param k
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ public static String getByDBObject(JSONObject b,String k){
|
|
|
+ if(b.containsKey(k)){
|
|
|
+ if(b.get(k)!=null&&b.get(k)instanceof String){
|
|
|
+ return b.getString(k);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 获取一个k的值
|
|
|
+ * @param b
|
|
|
+ * @param k
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ public static Object getObjectByDBObject(JSONObject b,String k){
|
|
|
+ if(b.containsKey(k)){
|
|
|
+ if(b.get(k)!=null){
|
|
|
+ return b.get(k);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return "";
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 没有/无法转换 返回null
|
|
|
+ * @param b
|
|
|
+ * @param k
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ public static Integer getIntByDBObject(JSONObject b,String k){
|
|
|
+ if(b.containsKey(k)){
|
|
|
+ if(b.get(k)!=null){
|
|
|
+ try{
|
|
|
+ String _s=b.getString(k).replace("px", "");
|
|
|
+ Double _d=Double.parseDouble(_s);
|
|
|
+ return _d.intValue();
|
|
|
+ }catch (Exception ex){
|
|
|
+ log.error(ex.getMessage());
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+ /**
|
|
|
+ * 转int
|
|
|
+ * @param str
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ private static Integer getStrToInt(Object str){
|
|
|
+ try{
|
|
|
+ if(str!=null) {
|
|
|
+ return Integer.parseInt(str.toString());
|
|
|
+ }
|
|
|
+ return null;
|
|
|
+ }catch (Exception ex){
|
|
|
+ log.error("String:{};Error:{}",str,ex.getMessage());
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ private static Short getStrToShort(Object str){
|
|
|
+ try{
|
|
|
+ if(str!=null) {
|
|
|
+ return Short.parseShort(str.toString());
|
|
|
+ }
|
|
|
+ return null;
|
|
|
+ }catch (Exception ex){
|
|
|
+ log.error("String:{};Error:{}",str,ex.getMessage());
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|