天天看点

excel数据导入表中,百分号怎么处理excel数据导入表中,百分号怎么处理

excel数据导入表中,百分号怎么处理

  • excel抽到表中,设置表格样式

XSSFDataFor  matfmt=(XSSFDataFormat)wb.createDataFormat();

XSSFCellStyle  style=(XSSFCellStyle)wb.createCellStyle();

style.setAlignment(HorizontalAlignment.RIGHT);

style.setDataFormat(fmt.getFormat("#,##0.00"));//带小数数值

--style.setDataFormat(fmt.getFormat("#,##0"));//整数数值

  • 将百分数变成小数

String deci=batchs.get(i).get(fi.getSourceIndex());  //拿到当前数据
BigDecimal bigDecimal;
try{
	if(StringUtil.isNotBlank(deci)){
		deci=StringUtil.trim(deci).replaceAll(",","");  //清除千分位,用空串代替逗号
		if(deci.contains(",")){     //如果包含,用空串代替逗号,再用空串替换多个空格
			deci=deci.replace(",","").replace(" ","");
		}
		if(deci.endsWith("%")){  //如果数字以百分号结尾,用空串代替百分号
			deci=deci.replace("%","");
			bigDecimal=newBigDecimal(deci); 
			deci=bigDecimal.multiply(newBigDecimal("0.01")).toString();   //当前去掉百分号的数据*0.01
		}
		bigDecimal=newBigDecimal(deci);
		ps.setBigDecimal(findex,bigDecimal);
	}else{
		if(StringUtil.isY(JesConfig.getConfigValue("OWL.EXTRACT_TASK_NUMBER_VALUE_SET_NULL","N"))){
			ps.setBigDecimal(findex,null);
		}else{
			ps.setBigDecimal(findex,BigDecimal.ZERO);
		}
	}
}catch(NumberFormatExceptione){
	logger.warn("这条数据{"+batchs.get(i)+"}格式错误:字段"+fi.getName()+"是数值类型,但输入值是"+deci+",该值将以0抽取。");
	invalidRows++;

	if(invalidRowsFile!=null){
		try{
			invalidRowsFile.append(batchs.get(i).toString());
		}catch(IOExceptionex){
			logger.error("写入无效数据文件时失败:"+batchs.get(i));
		}
	}
	ps.setBigDecimal(findex,BigDecimal.ZERO);
}
           
  • replace、replaceAll、replaceFirst

    • replace的参数是char和CharSequence,即可以支持字符的替换,也支持字符串的替换(CharSequence即字符串序列的意思,说白了也就是字符串);
    • replaceAll的参数是regex,即基于规则表达式的替换,比如:可以通过replaceAll("\\d", "*")把一个字符串所有的数字字符都换成星号;
    • 相同点:都是全部替换,即把源字符串中的某一字符或字符串全部换成指定的字符或字符串;

      不同点:replaceAll支持正则表达式,因此会对参数进行解析(两个参数均是),如replaceAll("\\d", "*"),而replace则不会,replace("\\d","*")就是替换"\\d"的字符串,而不会解析为正则。

    • 另外还有一个不同点:“\”在java中是一个转义字符,所以需要用两个代表一个。例如System.out.println( "\\" ) ;只打印出一个"\"。但是“\”也是正则表达式中的转义字符,需要用两个代表一个。所以:\\\\被java转换成\\,\\又被正则表达式转换成\,因此用replaceAll替换“\”为"\\",就要用replaceAll("\\\\","\\\\\\\\"),而replace则replace("\\","\\\\")。

      如果只想替换第一次出现的,可以使用replaceFirst(),这个方法也是基于规则表达式的替换,但与replaceAll()不同的是,只替换第一次出现的字符串。

  • multiply 在此处为乘法,这里介绍加减乘除以及使用方法

    • 对于常用的加,减,乘,除,BigDecimal类提供了相应的成员方法。
    • public BigDecimal add(BigDecimal value);//加法

      public BigDecimal subtract(BigDecimal value); //减法 

      public BigDecimal multiply(BigDecimal value); //乘法

      public BigDecimal divide(BigDecimal value); //除法

进行相应的计算后,我们可能需要将BigDecimal对象转换成相应的基本数据类型的变量,可以使用floatValue(),doubleValue()等方法。 

//加法
public static double add(double value1,double value2){
	BigDecimal b1 = new BigDecimal(Double.valueOf(value1));
	BigDecimal b2 = new BigDecimal(Double.valueOf(value2));
	return b1.add(b2).doubleValue();
}
//减法
public static double sub(double value1,double value2){
	BigDecimal b1 = new BigDecimal(Double.valueOf(value1));
	BigDecimal b2 = new BigDecimal(Double.valueOf(value2));
	return b1.subtract(b2).doubleValue();
}

//乘法
public static double mul(double value1,double value2){
	BigDecimal b1 = new BigDecimal(Double.valueOf(value1));
	BigDecimal b2 = new BigDecimal(Double.valueOf(value2));
	return b1.multiply(b2).doubleValue();
}

//除法
public static double div(double value1,double value2,int scale) throws IllegalAccessException{
//如果精确范围小于0,抛出异常信息
	if(scale<0){ 
		  throw new IllegalAccessException("精确度不能小于0");
	}
	BigDecimal b1 = new BigDecimal(Double.valueOf(value1));
	BigDecimal b2 = new BigDecimal(Double.valueOf(value2));
	return b1.divide(b2, scale).doubleValue();
}
           

继续阅读