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. uni-app 实现下拉刷新功能

    我们在运用uni-app开发小程序或h5时,常常需要页面实现下拉刷新功能. 在 js 中定义 onPullDownRefresh 处理函数(和onLoad等生命周期函数同级),监听该页面用户下拉刷新事 ...

  2. python处理Excel实现自动化办公教学(含实战)【一】

    相关文章: python处理Excel实现自动化办公教学(含实战)[一] python处理Excel实现自动化办公教学(含实战)[二] python处理Excel实现自动化办公教学(数据筛选.公式操作 ...

  3. 部署MooseFS分布式文件系统

    MooseFS是一个分布式文件系统,其本身具有高可用性,高拓展性,开放源代码,高容错,等在数据的读写性能方面,通过dd测试,MooseFS也就是写入的速度稍微好于NFS,读上没有差别. MooseFS ...

  4. 基于客户真实使用场景的云剪辑Timeline问题解答与代码实操

    本文为阿里云智能媒体服务IMS「云端智能剪辑」实践指南第6期,从客户真实实践场景出发,分享一些Timeline小技巧(AI_TTS.主轨道.素材对齐),助力客户降低开发时间与成本. 欧叔|作者 故事的 ...

  5. Vulkan学习苦旅03:零号显卡,启动!(选择物理设备VkPhysicalDevcie)

    随着近几年AI的迅速发展,GPU变得越来越抢手.然而,GPU的全称为Graphics Processing Unit, 从名字中就可以看出,GPU是为了处理图形而诞生的,后来才被应用到科学计算等领域中 ...

  6. ABC 317 A - G

    ABC 317 A - G 代码去 Atcoder 全部提交搜索 Std_Code 查看代码 懒人专用 A $ p_i $ 升序,找最小的 $ i $ 满足 $ p_i + h \ge x $ 直接枚 ...

  7. kafka-Kafka3.4版本创建topic出现zookeeper is not a recognized option

    问题描述:在linux云服务器上搭建了一套kafka3.0集群,然后按照以前的创建topic指令: ./kafka-topics.sh --zookeeper hadoop01:2181,hadoop ...

  8. CF1433E Two Round Dances 题解

    题目传送门 前置知识 圆排列 解法 \(\dfrac{Q_{n}^{\frac{n}{2}}Q_{\frac{n}{2}}^{\frac{n}{2}}}{A_{2}^{2}}\) 即为所求. 同时因为 ...

  9. JS 判断两个数组是否相等,元素以及顺序相等,顺序不同但元素相等

    壹 ❀ 引 在日常开发中,判断两个数组是否相等应该是较为常见的场景,因为常用,所以想着简单记录下.关于判断数组相等,这里我分为两种场景,第一种是数组完全相等,即数组元素相同且元素顺序一致:第二则为元素 ...

  10. JS leetcode 回文数 题解分析,数学不好是硬伤

    壹 ❀ 引 每日一题环节,今天的一道是让我相信自己数学薄弱的题目,题目来源leetcode9. 回文数,题目描述如下: 判断一个整数是否是回文数.回文数是指正序(从左向右)和倒序(从右向左)读都是一样 ...