excel合并
- import org.apache.commons.lang.StringUtils;
- import org.apache.poi.hssf.usermodel.HSSFWorkbook;
- import org.apache.poi.ss.usermodel.*;
- import org.apache.poi.xssf.usermodel.XSSFWorkbook;
- import java.io.FileInputStream;
- import java.io.FileOutputStream;
- import java.io.IOException;
- import java.io.InputStream;
- import java.text.SimpleDateFormat;
- import java.util.ArrayList;
- import java.util.Date;
- import java.util.HashSet;
- import java.util.LinkedList;
- import java.util.List;
- /**
- * POI解析Excel
- */
- public class ExcelReaderUtil {
- /**
- * 根据fileType不同读取excel文件
- *
- * @param path
- * @param path
- * @throws IOException
- */
- public static List<List<String>> readExcel(String path) {
- String fileType = path.substring(path.lastIndexOf(".") + 1);
- // return a list contains many list
- List<List<String>> lists = new ArrayList<List<String>>();
- // 读取excel文件
- InputStream is = null;
- try {
- is = new FileInputStream(path);
- // 获取工作薄
- Workbook wb = null;
- if (fileType.equals("xls")) {
- wb = new HSSFWorkbook(is);
- } else if (fileType.equals("xlsx")) {
- wb = new XSSFWorkbook(is);
- } else {
- return null;
- }
- // 读取第一个工作页sheet
- Sheet sheet = wb.getSheetAt(0);
- // 第一行为标题
- for (Row row : sheet) {
- ArrayList<String> list = new ArrayList<String>();
- for (Cell cell : row) {
- // 根据不同类型转化成字符串
- cell.setCellType(Cell.CELL_TYPE_STRING);
- list.add(cell.getStringCellValue());
- }
- lists.add(list);
- }
- } catch (IOException e) {
- e.printStackTrace();
- } finally {
- try {
- if (is != null)
- is.close();
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- return lists;
- }
- /**
- * 创建Excel.xls
- *
- * @param lists
- * 需要写入xls的数据
- * @param titles
- * 列标题
- * @param name
- * 文件名
- * @return
- * @throws IOException
- */
- public static Workbook creatExcel(List<List<String>> lists,String[] titles, String name) throws IOException {
- SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");// 设置日期格式
- String nowDate = df.format(new Date());
- // System.out.println(lists);
- // 创建新的工作薄
- Workbook wb = new HSSFWorkbook();
- // 创建第一个sheet(页),并命名
- Sheet sheet = wb.createSheet(name);
- // 手动设置列宽。第一个参数表示要为第几列设;,第二个参数表示列的宽度,n为列高的像素数。
- for (int i = 0; i < titles.length; i++) {
- sheet.setColumnWidth((short) i, (short) (35.7 * 150));
- }
- // 创建第一行
- Row row = sheet.createRow((short) 0);
- // 创建两种单元格格式
- CellStyle cs = wb.createCellStyle();
- CellStyle cs2 = wb.createCellStyle();
- // 创建两种字体
- Font f = wb.createFont();
- Font f2 = wb.createFont();
- // 创建第一种字体样式(用于列名)
- f.setFontHeightInPoints((short) 10);
- f.setColor(IndexedColors.BLACK.getIndex());
- f.setBoldweight(Font.BOLDWEIGHT_BOLD);
- // 创建第二种字体样式(用于值)
- f2.setFontHeightInPoints((short) 10);
- f2.setColor(IndexedColors.BLACK.getIndex());
- // 设置第一种单元格的样式(用于列名)
- cs.setFont(f);
- cs.setBorderLeft(CellStyle.BORDER_THIN);
- cs.setBorderRight(CellStyle.BORDER_THIN);
- cs.setBorderTop(CellStyle.BORDER_THIN);
- cs.setBorderBottom(CellStyle.BORDER_THIN);
- cs.setAlignment(CellStyle.ALIGN_CENTER);
- // 设置第二种单元格的样式(用于值)
- cs2.setFont(f2);
- cs2.setBorderLeft(CellStyle.BORDER_THIN);
- cs2.setBorderRight(CellStyle.BORDER_THIN);
- cs2.setBorderTop(CellStyle.BORDER_THIN);
- cs2.setBorderBottom(CellStyle.BORDER_THIN);
- cs2.setAlignment(CellStyle.ALIGN_CENTER);
- // 设置列名
- for (int i = 0; i < titles.length; i++) {
- Cell cell = row.createCell(i);
- cell.setCellValue(titles[i]);
- cell.setCellStyle(cs);
- }
- if (lists == null || lists.size() == 0) {
- return wb;
- }
- // 设置每行每列的值
- for (short i = 1; i <= lists.size(); i++) {
- // Row 行,Cell 方格 , Row 和 Cell 都是从0开始计数的
- // 创建一行,在页sheet上
- Row row1 = sheet.createRow((short) i);
- for (short j = 0; j < titles.length; j++) {
- // 在row行上创建一个方格
- Cell cell = row1.createCell(j);
- cell.setCellValue(lists.get(i - 1).get(j));
- cell.setCellStyle(cs2);
- }
- // 输出文件
- FileOutputStream fileOut = new FileOutputStream("d:/"+nowDate+"处理后的单位名称.xls");
- wb.write(fileOut);
- fileOut.close();
- }
- return wb;
- }
- private static List<List<String>> transposeStr(List<List<String>> resources) {
- List<List<String>> converts = new LinkedList<List<String>>();
- for (List<String> list : resources) {
- for (String str : list) {
- if(StringUtils.isNotBlank(str)&&str.indexOf(" ")==-1){//剔除空串,同时搜索字符" ",若不存在
- List<String> newList = new LinkedList<String>();
- newList.add(str);
- converts.add(newList);
- }else if(str.indexOf(" ")!=-1){//搜索字符" ",若存在
- String strSearch=str.replace(" ","");//剔除子串" "
- String [] strSearchls=strSearch.split(",");//分割字符串
- for(String str2 : strSearchls){
- List<String> newList = new LinkedList<String>();
- newList.add(str2);
- converts.add(newList);
- }
- }
- }
- }
- return converts;
- }
- public static void main(String[] args) {
- //输出A在B中的内容
- String pathA = "d:/提案查询(流程).xlsx";//提案查询(流程).xlsx
- String pathB = "d:/单位名称查询.xlsx";//单位名称查询.xlsx
- List<List<String>> listA = readExcel(pathA);
- List<List<String>> listsA=transposeStr(listA);//listsA为去除空串和 后的list<string>
- // System.out.println("listsA:"+listsA);
- ArrayList<List<String>> listsNewA=new ArrayList<List<String>>(new HashSet<List<String>>(listsA));//去重
- // System.out.println("listsNewA:"+listsNewA);
- List<List<String>> listB = readExcel(pathB);
- // System.out.println("listB:"+listB);
- listB.retainAll(listsNewA);
- // System.out.println(listB.size()+"处理后"+listB);
- String[] titles={"处理后的单位名称"};
- String name="处理结果";
- try {
- creatExcel(listB,titles,name);
- } catch (IOException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- /*
- * for (List<String> list : lists) { for (String strs : list) {
- * System.out.println(strs); } }
- */
- }
- }
excel合并的更多相关文章
- asp.net C#取Excel 合并单元格内容
asp教程.net c#取excel 合并单元格内容读取excel数据,填充dataset// 连接字符串 string xlspath = server.mappath("~/www.11 ...
- NPOI之Excel——合并单元格、设置样式、输入公式
首先建立一个空白的工作簿用作测试,并在其中建立空白工作表,在表中建立空白行,在行中建立单元格,并填入内容: //建立空白工作簿 IWorkbook workbook = new HSSFWorkboo ...
- 【NetOffice Excel】Excel合并单元格【原】
CSharp操作Excel采用开源的原生.NET程序集NetOffice,格式兼容性更好. 在操作Excel的时候有时候需要合并单元格 using ExcelOffice = NetOffice.Ex ...
- 利用jxl读取excel合并的单元格的一个小样例
工作中我们可能要把Excel文件的记录保存到数据库, 今天我用jxl读取Excel文件时遇到了合并格的问题,记录例如以下: 如Excel文件例如以下: watermark/2/text/aHR0cDo ...
- 使用python将多个excel合并
最近看视频学习,老师布置了个作业,关于如何使用python将多个excel进行合并,老师写的代码我感觉比较复杂,下面是我自己改良之后较简单的方式. 实现这个功能主要有两种方法,一种是用xlwd,xls ...
- 让我头疼一下午的Excel合并单元格
Excel导出常见问题 excel导出其实不算什么难事 在网上copy下模板代码,填充自己的业务数据,提供一个http接口基本就可以得到你要导出的数据了. 但是,凡事都有例外,截止今天,excel导出 ...
- NPOI之Excel——合并单元格、设置样式、输入公式、设置筛选等
首先建立一个空白的工作簿用作测试,并在其中建立空白工作表,在表中建立空白行,在行中建立单元格,并填入内容: //建立空白工作簿 IWorkbook workbook = new HSSFWorkboo ...
- poi excel 合并单元格
结论:final CellRangeAddress cra = new CellRangeAddress(rowId, rowId + rowSkip, colId, colId + c ...
- POI Excel 合并数据相同的行
import java.io.Serializable; /** * POI Excel报表导出,列合并实体<br> * * @author WQ * */ public class Po ...
- poi导出excel合并单元格(包括列合并、行合并)
1 工程所需jar包如下:commons-codec-1.5.jarcommons-logging-1.1.jarlog4j-1.2.13.jarjunit-3.8.1.jarpoi-3.9-2012 ...
随机推荐
- Java 8 新特性7-方法引用、继承
(原) 方法引用: 方法引用有4种: 1.静态方法引用:类名::静态方法名 在java中,对集合的排序,我们常用java提供的 Collections.sort(List<T> list, ...
- dotnetcore ueditor
dotnetcore ueditor https://github.com/durow/ueditornetcore http://www.cnblogs.com/durow/p/6116393.h ...
- 25 python 初学(socket,socketserver)
参考blog :www.cnblogs.com/yuanchenqi/articles/5692716.html 1. sk = socket.socket() 里面有两个重要的参数,family 和 ...
- zabbix源码安装 令人窒息的操作
一.简介 zabbix-server主要分为2部分: zabbix程序 程序根据客户端的监控项,从客户端获取数据并写入到数据库,再根据触发器/动作等配置进行操作. 展示页面 使用php编写,php脚本 ...
- Strem_01
import 'package:flutter/material.dart';import 'dart:async';import 'dart:ui'; void main()=>runApp( ...
- Elastic Stack-Elasticsearch介绍
一.前言 前篇写了好像没有多少人去看,但是还是要继续,我猜想可能是很多人接触的这块比较少吧,Elasticsearch这块有很多要说的,开始吧. 二.数据库.Elasticsearch选择 ...
- 对List集合嵌套了map集合对double值进行排序
/*[ { "repairo": "asda", "num": 88.71 }, { "repairo": " ...
- js05-DOM对象二
一.节点操作 创建节点:var ele_a = document.createElement('a');添加节点:ele_parent.appendChild(ele_img);删除节点:ele_pa ...
- Linux(Ubuntu 16) 下Java开发环境的配置(三)------Mysql配置
前言 吐槽一句,如果在Ubuntu在默认情况下是只有最新的MySQL源的,即如果使用"sudo apt-get install mysql-server mysql-client " ...
- Shell命令-文件及目录操作之cp、find
文件及目录操作 - cp.find 1.cp:复制文件或目录 cp命令的功能说明 cp命令用于复制文件或目录. cp命令的语法格式 cp [OPTION]... SOURCE... DIRECTORY ...