1、问题:用poi读写excel,据工单编号匹配两张sheet的记录,提取cell文本格内容,发现相同字符无法匹配,用byte才发现,有部分文本带了乱码(ascii码是-62和-96,不知道是什么东西);

2、解决:增加对字符文本的乱码处理,过滤掉乱码,同时用byte数组来匹配,代码如下:

package dx;import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.regex.Matcher;
import java.util.regex.Pattern;import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.poifs.filesystem.POIFSFileSystem;public class order {public static void main(String[] args) {try {//获取excel文件String path="D:"+System.getProperty("file.separator")+"tmp"+System.getProperty("file.separator")+"order.xls";POIFSFileSystem fs=new POIFSFileSystem(new FileInputStream(path));//得到Excel工作簿对象    HSSFWorkbook wb = new HSSFWorkbook(fs);  //得到Excel工作表对象    HSSFSheet sheet1 = wb.getSheetAt(0);HSSFSheet sheet2 = wb.getSheetAt(1);//用第二张表上的工单编号去匹配第一张表上的工单编号,匹配在第一张第二列输入yesint rowCount2=sheet2.getLastRowNum();        for(int i=1;i<=rowCount2;i++){HSSFRow row2 = sheet2.getRow(i);HSSFCell orderNo2 = row2.getCell(0);String strNo2=orderNo2.getStringCellValue();strNo2=MessyCodeFilter(strNo2);//清除乱码byte[] byt2=strNo2.getBytes("UTF-8");//匹配第一张表的工单int rowCount1=sheet1.getLastRowNum();for(int j=1;j<=rowCount1;j++){HSSFRow row1 = sheet1.getRow(j);HSSFCell orderNo1 = row1.getCell(0);String strNo1=orderNo1.getStringCellValue();strNo1=MessyCodeFilter(strNo1);//清除乱码byte[] byt1=strNo1.getBytes("UTF-8");/*for(int ii=0;ii<byt1.length;ii++){System.out.print(ii+":"+byt1[ii]+"\r\n");}*///if(strNo2==strNo1){//工单编号一致判断if(byt2.length==byt1.length){boolean bif=true;for(int bi=0;bi<byt2.length;bi++){if(byt2[bi]!=byt1[bi]){bif=false;break;}}if(bif){HSSFCell yesno1=row1.getCell(1);    yesno1.setCellValue("yes");       HSSFCell yesno2 = row2.getCell(1);yesno2.setCellValue("yes");FileOutputStream out=new FileOutputStream(path);out.flush();wb.write(out);out.close();break;}}}}   wb.close();         fs.close();} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();} }//非ascii编码范围过滤private static String AsciiCodeFilter(String strCont) {  try{byte[] byteCon=strCont.getBytes("UTF-8");for(int i=0;i<byteCon.length;i++){if (byteCon[i]<0 || byteCon[i]>127){byteCon[i]=32;} }return new String(byteCon).trim();} catch (Exception e) {  e.printStackTrace();  }  return strCont;}    //非有效数字、字母、字符过滤private static String MessyCodeFilter(String strCont) {  try {  Pattern p = Pattern.compile("\\s*|\t*|\r*|\n*");  Matcher m = p.matcher(strCont);  String after = m.replaceAll("");  String temp = after.replaceAll("\\p{P}", "");  char[] ch = temp.trim().toCharArray();  int length = (ch != null) ? ch.length : 0;  for (int i = 0; i < length; i++) {  char c = ch[i];  if (!Character.isLetterOrDigit(c)) {  String str = "" + ch[i];  //if (!str.matches("[\u4e00-\u9fa5]+")) {  if (!str.matches("[0-9a-zA-Z\\u4e00-\\u9fa5]+")){  //ch[i]='\0';//该为置空,也可以用位移ch[i]=' ';//用空格}  }  }  return  new String(ch).replace(" ", "").trim();} catch (Exception e) {  e.printStackTrace();  }  return strCont.trim();}
}

Java-POI操作excel遇到文本字符问题处理相关推荐

  1. Java - Poi 操作 Excel

    Java - Poi 操作 Excel 关注 "弋凡"(YiFan)微信公众号吧 记录简单笔记 做你的最爱 注意 XSSFWorkbook 对象是操作 .xlsx 格式的表格 HS ...

  2. Java poi操作Excel单元格样式

    Java poi设置Excel单元格格式设置 XSSFWorkbook xwb = new XSSFWorkbook();或者 XSSFWorkbook xwb = new XSSFWorkbook( ...

  3. java poi操作excel 添加 锁定单元格保护

    Excel的book保护是很常用的,主要是不想让别人修改Excel的时候用.这样能够避免恶意随便修改数据,提高数据的可信度. 下面介绍JAVA POI来实现设置book保护: 使用HSSFSheet类 ...

  4. java poi 操作Excel 删除行内容和直接删除行

    一般情况下,删除行时会面临两种情况:删除行内容但保留行位置.整行删除(删除后下方单元格上移).对应的删除方法分别是: void removeRow(Row row)//Remove a row fro ...

  5. java poi 操作 excel 读取本地Excel / 保存excel到本地 / url下载excel

    pom.xml 配置poi版本 <dependency><groupId>org.apache.poi</groupId><artifactId>poi ...

  6. java POI操作Excel代码收藏 (包括标题垂直水平居中)

    [size=large][color=red][b]1.HSSF 2003版Excel导出[/b][/color][/size] package com.hwt.glmf.common; import ...

  7. Java POI操作Excel记录

    1.在excel中新增行和单元格 首先在excel中指定行之后新增单元格,如果后面还有行数据的话,则需要先执行sheet.shiftRows()操作,将后面的数据往下移动需要新增行的行数.然后再执行s ...

  8. execle java,Java使用POI操作Excel

    Java使用POI操作Excel 1. POI操作Excel 1.1. 依赖 org.apache.poi poi 4.1.0 org.apache.poi poi-ooxml 4.1.0 org.a ...

  9. Java实战—POI操作Excel文档、读取、写入、合并单元格

    一.POI项目简介 POI全称 Poor Obfuscation Implementation,利用POI接口可以通过JAVA操作Microsoft office 套件工具的读写功能.官网:http: ...

最新文章

  1. Pygame Rect区域位置(图解)
  2. #if DEBUG与条件(“ DEBUG”)
  3. 每日一皮:据说PM就是这样忍受你的!
  4. 【Linux入门到精通系列讲解】Centos 7软件安装的三种方式
  5. DefWndProc/WndProc/IMessageFilter的区别
  6. Android Studio 代码混淆(你真的会混淆吗)
  7. 洛谷p1115 最大子段和
  8. Socket 编程 windows到Linux代码移植遇到的问题
  9. [深度学习] tensorflow1.x和tensorflow2.x对比与总结
  10. 同程Z世代红色旅游报告:《觉醒年代》带火上海
  11. Chrome 20对于HTML5最新支持的动态:颜色输入,网络信息API,CSS着色器
  12. ReactNative集成百度语音合成
  13. 京东工业品,走在「全国统一大市场」之前?
  14. 领导人怎样带领好团队
  15. 考研政治刷题知识点总结
  16. edu邮箱怎么申请一个1T的onedrive
  17. 利用深度图建立三维点云地图笔记
  18. scipy.sparse学习
  19. k8s Nodeport方式下service访问,iptables处理逻辑(转)
  20. 啥是正交实验简单了解

热门文章

  1. Java设计模式(十四):MVC设计模式
  2. slice 与 substring
  3. gRPC源码分析(c++)
  4. 测试面试话题5: 如何不漏测
  5. 137 Single Number II 数组中除了一个数外,其他的数都出现了三次,找出这个只出现一次的数...
  6. Jsp之五 过滤器与监听器
  7. shell无上传cmd等exe文件权限解决办法
  8. SharePoint优秀blog文章汇总
  9. 要注意页面中加载的第三方脚本
  10. MBR和GPT概要学习