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. Gorm 数据库表迁移与表模型定义

    目录 一.Docker快速创建MySQL实例 1.1 创建 1.3 创建数据库 二.AutoMigrate介绍与使用 2.1 AutoMigrate介绍 2.2 AutoMigrate 基本使用 三. ...

  2. 小样本学习在文心ERNIE3.0多分类任务应用--提示学习

    小样本学习在文心ERNIE3.0多分类任务应用(提示学习) 项目链接: https://aistudio.baidu.com/aistudio/projectdetail/4438610?contri ...

  3. 【二】Latex入门使用、常见指令

    参考链接:https://blog.csdn.net/cocoonyang/article/details/78036326 \documentclass[12pt, a4paper]{article ...

  4. VUE3子表格嵌套分页查询互相干扰的问题解决

    VUE3在表格中嵌套子表格子表格的分页查询互相干扰的问题解决 简单嵌套 如果不需要做子表格的分页查询,那么可以直接在主表格中嵌套子表格,有两种方式:一种是主表格加载的同时加载子表格数据,另一种是点击展 ...

  5. a标签download属性跨域问题

    1.如果是加载了非同源的内容,该属性将失效,等于导航功能 2.在服务端设置Content-Disposition,使用HTTP响应头Content-disposition进行处理 3.先下载数据文件, ...

  6. 14代i5-14600K现身:多核性能提升多达11%

    14代酷睿桌面端还未发售,就陆续在跑分平台上露出. 平台规格为Z790主板.32GB DDR5-5200内存,酷睿i5-14600K的单核成绩为2819,多核成绩为16666,对比酷睿i5-13600 ...

  7. 【链表】链表OJ-力扣2074. 反转偶数长度组的节点【超详细的算法解释】

    说在前面 今天博主给大家带来的是力扣上的一道链表OJ,完成这道题后,博主感觉这题覆盖了很多链表的解题思想,另外,这道题对指针的控制也是比较高的.在这里博主将这道好题分享给大家! 另外,对于链表等数据结 ...

  8. Oracle 数据库锁表问题及相关解决方法

    Oracle 数据库锁表问题及相关解决方法 问题描述: 今天在公司运行服务的时候,需要查询300多万的数据,再进行排序之后放到kafka的消息队列中,供flink进行消费.在服务器上直接运行后,服务报 ...

  9. 单片机 IAP 功能基础开发篇之APP升级(三)

    1 前言 上一篇单片机 IAP 功能基础开发篇之APP升级(二)讲到了单片机给 APP 程序升级具体的设计方案,这篇介绍的是升级进阶功能,如何在编译后在程序结束地址自动加上校验标志(可以通过脚本工具, ...

  10. Delphi 字符串截取函数【LeftStr,RightStr,MidStr】

    如果要使用LeftStr,RightStr,MidStr必需引用系统单元StrUtils; 声明变量Str:string; Str:=HelloWorld; 1,LeftStr(Str,2)=He;/ ...