您的位置:首页 > 编程语言 > Java开发

Java-POI操作excel清除单元格分行字符

2017-01-13 14:52 731 查看
1、需求背景:

      有时需将一份大的excel文件导入到hdfs文件,用POI组件来导入excel文件并输出成txt文本,此时一些单元格中带有分行字符的就给输出带来麻烦,一般MR是按照行来处理,所以需要将单元格内的文本清除掉分行字符,变成一行;

2、解决思路:

    excel单元格输入时的回车符,有软回车Alt+Enter和硬回车Enter,对应的ASCII码如下表:



 如此,只要替换对应字符的编码即可。

3、参考代码如下:

package csc.xls;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

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 ExcelRead {
//读取excel文件
public boolean xlsRead(String path) {
StringBuffer strbuf=new StringBuffer();
try{
//获取excel文件
String file=path+"all.xls";
POIFSFileSystem fs=new POIFSFileSystem(new FileInputStream(file));
//得到Excel工作簿对象
HSSFWorkbook wb = new HSSFWorkbook(fs);
//得到Excel工作表对象
HSSFSheet st = wb.getSheetAt(0);
System.out.println(st.getLastRowNum());
for(int i=1;i<=st.getLastRowNum();i++){//去掉表头,遍历每一行
HSSFRow row = st.getRow(i);
HSSFCell cellContent = row.getCell(0);//第1列,投诉内容
String content=cellContent.getStringCellValue();
//content=content.replaceAll("[\\t\\n\\r]", "");//将内容区域的回车换行去除
//删除excel中回车符,软回车Alt+Enter)和硬回车Enter
for(int j=10;j<14;j++){
content = content.replaceAll(String.valueOf((char)j), "");
}
HSSFCell cellLabel = row.getCell(1);//第2列,越级标记
String label=cellLabel.getStringCellValue();
if(label.equals("否"))
strbuf.append("0"+"|"+content+"\r\n");
else strbuf.append("1"+"|"+content+"\r\n");
}
wb.close();
fs.close();
}catch (Exception e) {
System.out.println(e.getMessage());
return false;
}
//写入文件
try{
File file=new File(path+"traindata.txt");
if(!file.exists()) file.createNewFile();
FileOutputStream out=new FileOutputStream(file,true);
out.write(strbuf.toString().getBytes("utf-8"));
out.close();
}catch (IOException e){
e.printStackTrace();
}
return true;
}

public static void main(String[] args) {
String path="D:"+System.getProperty("file.separator")+"tmp"+System.getProperty("file.separator");
ExcelRead er=new ExcelRead();
er.xlsRead(path);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: