CSV转Excel,命中关键词标红

package com.wenwo.schedule.job.mainJob;

import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.nio.charset.Charset;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set; import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang.StringUtils;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFCellStyle;
import org.apache.poi.hssf.usermodel.HSSFFont;
import org.apache.poi.hssf.usermodel.HSSFFormulaEvaluator;
import org.apache.poi.hssf.usermodel.HSSFRichTextString;
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.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.CellStyle;
import org.apache.poi.ss.usermodel.CellValue;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.util.CellRangeAddress;
import org.apache.poi.ss.util.RegionUtil;
import org.apache.poi.xssf.usermodel.XSSFWorkbook; import com.csvreader.CsvReader; /**
* 关键字过滤任务
* @author wengqi
* @date 2018-08-27
*
*/
public class CopyOfCsvToExcelTagJob { int start = 0; int firstRow = 0; int lastRow = 0; String lastID = ""; int jisuan = 0; String path_h = ""; List<Integer[]> listSz = new ArrayList<Integer[]>(); Set<String> seterror = new HashSet<String>(); public void execute(String jobData) throws Exception {
File file = new File("D://tag/csv/");
try {
for (String string : file.list()) {
System.out.println(string);
start = 0;
firstRow = 0;
lastRow = 0;
lastID = "";
jisuan = 0;
createExcel(string);
} } catch (Exception e) {
e.printStackTrace();
}
for (String iterable_element : seterror) {
System.out.println(iterable_element);
}
System.out.println("===>OK");
} public void createExcel(String fileName) throws IOException{
//获取一个HSSFWorkbook对象
HSSFWorkbook workbook = new HSSFWorkbook();
HSSFCellStyle style = getHSSFCellStyle(workbook);
//创建一个sheet
HSSFSheet sheet = workbook.createSheet("Sheet"); HSSFFont jiacuFont = jiacu(workbook);
//表头
HSSFRow row = sheet.createRow(2); HSSFCellStyle styleS = workbook.createCellStyle();
styleS.setAlignment(HSSFCellStyle.ALIGN_CENTER); // 创建一个居中格式
styleS.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER); // 读取文件
CsvReader wr = new CsvReader("D://tag/csv/" + fileName,',', Charset.forName("UTF-8"));
wr.setSafetySwitch(false);
Integer i = 0;
int index = 0;
int ii =0;
while (wr.readRecord()) {
start ++;
i++;
ii++;
try { row = sheet.createRow(ii);
List<String> list = new ArrayList<String>();
list.add(wr.getValues()[0]);
list.add(wr.getValues()[1]);
list.add(wr.getValues()[2]);
list.add(wr.getValues()[3]);
list.add(wr.getValues()[4]);
list.add(wr.getValues()[5]);
list.add(wr.getValues()[6]);
list.add(wr.getValues()[7]); for (int j = 0; j < list.size(); j++) {
try {
String keyword = list.get(1);
String word = list.get(7); // 单元格合并
if (j == 0 && StringUtils.isNotEmpty(list.get(0))){
if (list.get(0).equals(lastID)){
if (jisuan == 0){
firstRow = start-1;
}
jisuan++;
lastRow = start;
} else {
jisuan = 0;
if (firstRow != 0 && lastRow != 0){
listSz.add(new Integer[]{firstRow,lastRow});
firstRow = 0;
lastRow =0;
}
}
lastID = list.get(0);
} if(keyword.length()>32765){
keyword = keyword.substring(0, 32764);
}
if(word.length()>32765){
word = word.substring(0, 32764);
}
if(j == 7){
// 命中关键词标红
try {
row.createCell(j).setCellValue(getHSSFRichTextString(keyword ,word ,jiacuFont));
} catch (Exception e) {
e.printStackTrace();
} }
else{
row.createCell(j).setCellValue(list.get(j));
}
} catch (Exception e) {
e.printStackTrace();
} }
} catch (Exception e) {
e.printStackTrace();
}
} FileOutputStream fos = new FileOutputStream(new File("D://tag/"+fileName+".xls"));
workbook.write(fos); //将工作簿写到输出流中
fos.close(); } public HSSFFont jiacu(HSSFWorkbook workbook){
HSSFFont font = workbook.createFont();
font.setFontName("宋体");
font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);// 粗体显示
font.setColor(HSSFFont.COLOR_RED);
font.setFontHeightInPoints((short)12); // 设置字体大小
return font;
} /*
* 关键词标红
*/
public HSSFRichTextString getHSSFRichTextString(String guanjianci, String content, HSSFFont font){
HSSFRichTextString richString = new HSSFRichTextString(content);
try {
String shuzu[] = guanjianci.split("、");
for (int i = 0; i < shuzu.length; i++) {
int size = content.indexOf(shuzu[i]);
int kySize = shuzu[i].length();
richString.applyFont(size, size + kySize, font);
}
} catch (Exception e) {
// TODO: handle exception
} return richString;
} /**
* 创建一个style
*
* @param workbook
* @return
*/
private static HSSFCellStyle getHSSFCellStyle(HSSFWorkbook workbook) {
HSSFCellStyle style = workbook.createCellStyle();
//居中
style.setAlignment(HSSFCellStyle.ALIGN_CENTER);
return style;
}
public HSSFCellStyle getCellStyle(HSSFWorkbook workbook){
// 样式
HSSFCellStyle cellStyle = workbook.createCellStyle(); cellStyle.setBorderBottom(HSSFCellStyle.BORDER_THIN); //下边框
cellStyle.setBorderLeft(HSSFCellStyle.BORDER_THIN);//左边框
cellStyle.setBorderTop(HSSFCellStyle.BORDER_THIN);//上边框
cellStyle.setBorderRight(HSSFCellStyle.BORDER_THIN);//右边框
cellStyle.setAlignment(HSSFCellStyle.ALIGN_LEFT); // 居中
cellStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);//垂直
//cellStyle.setWrapText(true);
return cellStyle;
} public static void main(String[] args) throws Exception {
CopyOfCsvToExcelTagJob job = new CopyOfCsvToExcelTagJob();
job.execute(null); }
}

CSV转Excel,命中关键词标红的更多相关文章

  1. 通过自定义拦截器优雅的导出Excel并标红的重复数据

    平时我们导入导出Excel的时候如果用poi导出,会发现光设置格式都要很多代码,看起来非常的不优雅.后来业务中遇到了需要导入非常巨大的Excel的需求.如果继续用poi的方式,因为poi把所有exce ...

  2. php使用ajax导出CSV或者EXCEl(thinkphp)方法

    首先我强烈推荐看到这篇文章的你将导出文件设置为csv格式的文件 实际测试导出csv文件的速度是excel文件的10几倍左右 首先我先介绍csv文件的导出的方法: 如果你单纯是在数据导出界面上通过用户点 ...

  3. javaScript实现修改输入框之后标红

    <html> <title>实现标红</title> <script type="text/javascript">  functi ...

  4. Intellij IDEA @Override 标红

    Intellij IDEA 升级到15之后,之前那些@Override 的都标红,提示@Override is not allowed when implement interface method ...

  5. csv,txt,excel文件之间的转换,perl脚本

    最近接触一些需要csv,txt,excel文件之间的转换,根据一些网上搜索加上自己的改动,实现自己想要的结果为主要目的,代码的出处已经找不到了,还请见谅,以下主要是针对csv&excel 和t ...

  6. 第九篇、UITabbar增加类别用来标红点

    1.系统中只有设置bage的方式,设置为nil也是为一个红点,但是很大,并不是我们需要的 2.扩充标红点的方法 (常用于有新的动态提示标志) #import <UIKit/UIKit.h> ...

  7. Unity 读取CSV与Excel

    前几天看到我们在游戏中需要动态加载某些角色的游戏策划值,关于这个问题怎么解决呢?其实办法很多种,归根到底,就是数据的读取.我们可以想到的存储数据的载体有很多.例如:txt,xml,csv,excel. ...

  8. iOS UILabel 使用姿势大全(标红关键字)

    一.初始化 ? 1 2 3 UILabel *myLabel = [[UILabel alloc] initWithFrame:CGRectMake(40, 40, 120, 44)];       ...

  9. 15、解决14中csv用excel打开乱码的问题 open('zhihu.csv','w',newline='',encoding='utf-8-sig')

    解决14中csv用excel打开乱码的问题 ,其实就是在写csv的时候把 utf-8 改成 utf-8-sig open('zhihu.csv','w',newline='',encoding='ut ...

  10. 14、使用csv和excel存储豆瓣top250电影信息

        记得我们第三关的时候爬取了豆瓣TOP250的电影名/评分/推荐语/链接,现在呢,我们要把它们存储下来,记得用今天课上学的csv和excel,分别存储下来哦-       URL     htt ...

随机推荐

  1. docker 镜像导出和导入(适用于内网无法拉镜像的问题)

    1.在外网将镜像从指定的仓库拉下来 docker pull consul 现在已将consul镜像拉到了可连外网的服务器  2.将镜像把包到指定的tar文件中 docker save consul:l ...

  2. [洛谷]P1967-最小生成树-好题推荐

    [NOIP2013 提高组] 货车运输 题目背景 NOIP2013 提高组 D1T3 题目描述 A 国有 \(n\) 座城市,编号从 \(1\) 到 \(n\),城市之间有 \(m\) 条双向道路.每 ...

  3. 从零开始配置vim(28)——代码的编译、运行与调试

    在前面几个章节,我们逐渐为 Vim 配置了语法高亮.代码的跳转和自动补全功能.现在的 Vim 已经可以作为代码编辑器来使用了.但是想将它作为日常发开的主力编辑器来用还需要很长一段路要走,其中一个就是要 ...

  4. 搭建mongo的replica set

    搭建mongo的replica set 前言 安装 构建副本集 加入认证 备份数据 备份数据到本地 数据恢复 搭建mongo的replica set 前言 准备三台机器,相互可以访问的.处理思路,先构 ...

  5. PE格式:VA地址与FOA地址

    PE格式是 Windows下最常用的可执行文件格式,理解PE文件格式不仅可以了解操作系统的加载流程,还可以更好的理解操作系统对进程和内存相关的管理知识,而有些技术必须建立在了解PE文件格式的基础上,如 ...

  6. 基于队列实现生产者消费者(Python)

    # 进城之间数据隔离 # 进程之间通信(IPC) Inter Process communication # 基于文件 :同一台机器上的多个进程之间通信 # Queue 队列 # 基于socket的文 ...

  7. Typecho文章采集发布插件-免费下载

    分享一款可以自动采集网页文章,并发布到typecho博客网站的typecho采集发布插件,支持简数采集器,火车头数据采集器,八爪鱼文章采集器,后羿采集器等. Typecho采集发布插件使用方法如下: ...

  8. STL源码剖析 | priority_queue优先队列底层模拟实现

    今天博主继续带来STL源码剖析专栏的第四篇博客了! 今天带来优先队列priority_queue的模拟实现!话不多说,直接进入我们今天的内容! 前言 那么这里博主先安利一下一些干货满满的专栏啦! 手撕 ...

  9. 【Linux】常用基本指令大汇总系列(篇一)【超详细的图解保姆教程】

    常用基本指令大汇总系列(篇一) 大家好,欢迎大家来到我的博客.从今天开始,博主就要开启一个全新的系列了!Linux操作系统常用基本指令汇总系列,当大家按顺序学完这个系列,在Linux上编写基本的C语言 ...

  10. Rating 算法

    Rating 算法 这是一种 OJ 常用的算法,下面进行介绍 公式 $ Rating $ 的计算公式如下: $ Rating = R + K(P - E) $ 这里 $ R $ 表示当前 $ Rati ...