提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

给excel中添加列和值

执行前:

执行后:


提示:以下是本篇文章正文内容,下面案例可供参考

package com.yl;import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.EasyExcelFactory;
import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.event.AnalysisEventListener;
import com.alibaba.excel.support.ExcelTypeEnum;
import java.io.*;
import java.math.BigDecimal;
import java.text.SimpleDateFormat;
import java.util.*;public class easyExcel {public static void main(String[] args) {String path = "D:\\test.xlsx";//加载数据,从表头开始加载List<Object> loadData = loadData(path);//解析数据,处理表头,增加三列List<List<String>> tableHead = dealHeadData(loadData);//处理增加的三列的对应的值List<List<String>> tableData = dealTableData(loadData);//写入一个新excel表,完整路径: D:\\test-xx.xlsxwriteData(tableData, tableHead);}private static void writeData(List<List<String>> loadData, List<List<String>> headData) {EasyExcelFactory.write("D:\\test-1.xlsx").excelType(ExcelTypeEnum.XLSX).head(headData).sheet("测试").doWrite(loadData);}private static List<List<String>> dealTableData(List<Object> loadData) {List<List<String>> tableData = new LinkedList<>();//从1开始获取数据,拿到真正的表数据for (int i = 1; i < loadData.size(); i++) {Map<Integer, String> o = (Map<Integer, String>) loadData.get(i);List<String> data = new LinkedList<>();for (Integer key : o.keySet()) {data.add(o.get(key));}tableData.add(data);}//先给平均公式列计算值SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd hh:mm");for (int i = 0; i < tableData.size(); i++) {List<String> strings = tableData.get(i);try {String name = strings.get(0);//拼接字符串,转换成时间正则表达式String s1 = strings.get(1);String s2 = strings.get(2);String s3 = strings.get(3);String ss2 = s1 + " " + s2;String ss3 = s1 + " " + s3;//拿到上班和下班时间的毫秒值,然后相减long time2 = dateFormat.parse(ss2).getTime();long time3 = dateFormat.parse(ss3).getTime();Double f = new Double(time3 - time2);// 毫秒值除以1000,再除以3600,拿到小时BigDecimal bd = new BigDecimal(f / 3600 / 1000);//四舍五入double value = bd.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();Double lastValue = value - 1.5;System.out.println(name + ":" + lastValue);//转换成String类型,添加strings.add(String.valueOf(lastValue));} catch (Exception e) {e.printStackTrace();}}//再给X组赋值try {InputStream is = new BufferedInputStream(new FileInputStream("src/main/resources/interactive.properties"));BufferedReader bf = new BufferedReader(new InputStreamReader(is, "UTF-8"));Properties properties = new Properties();properties.load(bf);Set<String> set = properties.stringPropertyNames();for (String key : set) {for (int i = 0; i < tableData.size(); i++) {List<String> strings = tableData.get(i);if (key.equals(strings.get(0))) {strings.add(0, (String) properties.get(key));}}}} catch (Exception e) {e.printStackTrace();}System.out.println(tableData);System.out.println("处理完毕,请查看我的电脑D:\\test-xx.xlsx");return tableData;}private static List<List<String>> dealHeadData(List<Object> loadData) {Map<Integer, String> o = (Map<Integer, String>) loadData.get(0);List<List<String>> tableHead = new LinkedList<>();for (Integer key : o.keySet()) {for (int i = key; i <= key; i++) {List<String> head = new LinkedList<>();head.add(o.get(key));tableHead.add(head);}}try {tableHead.add(0, new LinkedList<>(Collections.singleton("XX1")));tableHead.add(new LinkedList<>(Collections.singleton("XX2")));System.out.println("增加了两列,分别为:XX1,XX2");} catch (Exception e) {e.printStackTrace();}return tableHead;}private static List<Object> loadData(String path) {List<Object> list = new LinkedList<>();EasyExcel.read(path).sheet(0).headRowNumber(0).registerReadListener(new AnalysisEventListener() {@Overridepublic void invoke(Object o, AnalysisContext analysisContext) {list.add(o);}@Overridepublic void doAfterAllAnalysed(AnalysisContext analysisContext) {System.out.println("数据读取完毕,下一步:处理表头,增加三列");}}).doRead();return list;}
}---# 总结
遇到的问题:
1、POI无法处理时间类型
2、easyExcel的方法不会用
3、Excel存放的数据类型是List<List<String>>,按照这个格式去处理数据就没问题
4、计算时间差,String类型转换成yyyy/MM/dd hh:mm,再转换毫秒值计算
5、数据量比较大的情况下,通过拿取properties文件的value值,再去赋值处理依赖导入:(阿里easyExcel处理excel的神器)
<dependencies><dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>2.2.6</version></dependency></dependencies>

给excel中添加列和值相关推荐

  1. Excel 用D列的值去A列中查找,将A列所对应的B列值填入E列

    Excel 用D列的值去A列中查找,将A列所对应的B列值填入E列 业务场景:某公司员工姓名与编号壹壹对应,现给出一堆杂乱无章的编号,要求找出这些编号所对应的员工姓名 这里要用到函数 =VLOOKUP( ...

  2. python 表格格式输出_利用python对excel中一列的时间数据更改格式操作

    问题场景:需要将下列的交期一列的数据格式更改成2019/05/10 存货编码 尺寸 数量 交期 0 K10Y0190000X B140 200 2019-05-10 00:00:00 1 K10Y01 ...

  3. python excel增加一列_(用Python修改excel中一列数据)python新增一列

    python怎么从excel中读取数据? ⒈ #import παέτο import xlrd #Ρύθμι διαδρής path='C:\\Users\\jyjh\\Desktop\\data ...

  4. 怎样在计算机上插入机构图,Win7系统如何在excel中添加word文档结构图?

    今天小编给大家分享 Ghost Win7系统 在excel中添加word文档结构图的方法,有时候在编辑excel表格时,为了数据能够更加直观展示,会在excel中添加word文档结构图,这样显示的内容 ...

  5. ajax拿table里的th值,Jquery Ajax 异步设置Table中某列的值

    可根据table中某列中的ID去改变某列的值! 只是参考,实际应用中不能这样做的,如果有很多行,频繁访问服务器,服务器是顶不住的! JS: $(document).ready(function () ...

  6. python对excel数据更改_利用python对excel中一列的时间数据更改格式代码示例

    本篇文章小编给大家分享一下利用python对excel中一列的时间数据更改格式代码示例,文章代码介绍的很详细,小编觉得挺不错的,现在分享给大家供大家参考,有需要的小伙伴们可以来看看. 问题场景:需要将 ...

  7. matlab 求取矩阵中值,matlab中取矩阵中指定列的值组成新矩阵

    matlab 矩阵中怎么加入冒号,比如我想矩阵A的第一列都为"1:" A(:,1)='1:';再问:不行的再答:用结构矩阵或者单元矩阵试试吧. 诚教:matlab中取矩阵的其中几行 ...

  8. 如何排两列的序计算机考试,excel中两列数据怎么一起排序?excel两列同时排序的方法...

    excel中两列数据怎么一起排序?excel两列同时排序的方法 腾讯视频/爱奇艺/优酷/外卖 充值4折起 我们在使用Excel对数列排序时,有时会碰到需要对两列数据同时排序,下面就跟大家详细介绍操作方 ...

  9. excel中添加有效性验证或数据验证时不选择第一行列标题的解决方法

    [问题描述] excel中对列添加了数据验证(有效性验证)后,列标题也会存在数据选项,如图,姓名这个列标题竟然可以被姓名数据替换. [问题解决] 1. 数据-->数据验证 单独选中姓名这个单元格 ...

最新文章

  1. 2020 腾讯广告算法大赛:突破高分瓶颈方案分享
  2. [已解决] java 增加 ALPN支持
  3. [机器学习] 推荐系统之协同过滤算法(转)
  4. 找不到libmmd.dll无法继续执行代码_300 行代码带你秒懂 Java 多线程!| 原力计划...
  5. 桂林电子计算机与信息安全学院,桂林电子科技大学计算机与信息安全学院网络空间安全保研...
  6. java基础题目的网站_Java基础题目
  7. [转]CellCtrl控件完美破解研究
  8. excel批量替换不同值(根据多个条件匹配、替换不成功的解决办法)
  9. 对极几何基本概念与极线约束
  10. BUUCTF:[XMAN2018排位赛]通行证
  11. 付出不亚于任何人的努力
  12. oracle dbms是什么意思,oracle的dbms_stats包详细解说
  13. 15天基础爬虫、selenium、scrapy使用,附全程实现代码
  14. 0001 2014蓝桥-练习 啤酒和饮料
  15. 如何在html添加css样式表,网页中添加CSS样式表的四种方式
  16. Simpsons’ Hidden Talents【KMP模板题】
  17. Vissim-Python二次开发笔记
  18. CMake 安装教程
  19. 奥赛初选用平面几何题
  20. 科研呢喃3-论科研选题

热门文章

  1. java 图片识别 tess4j_JAVA使用Tess4J进行ocr识别
  2. java内存-xms 单位_java堆内存JVM属性调优总结(-Xms -Xmx -Xmn -Xss)
  3. linux scp 【全新思路解决】出现Permission denied问题
  4. ab压力测试命令及参数详解
  5. 项目经理眼中优秀开发人员的标准
  6. AssertionError:nbsp;Badlynbsp;…
  7. 推荐算法之Embedding方法汇总
  8. verilog中的timescale用法(转)
  9. 股价飙升20%市值增长100亿,《纸牌屋》之父Netflix凭什么比他的竞争者要强12倍?...
  10. 我目前常用的几种Java快捷键