转:Java修改Excel单元格的数据及格式
https://blog.csdn.net/aking21alinjuju/article/details/6001153?locationNum=2
继前两节的Java读取、写入Excel后,本期将推出Java修改Excel中数据以及格式的方法和技巧,如果大家学习了前面的读、写Excel,相信学习本节内容将是不费吹灰之力啊,不过要灵活的运用还需多加努力呀。
好了,为了展示Java修改Excel的魅力,我们先来设计一个业务场景,这个场景是根据最近做过的一件事设计出来的:
在一张Excel中,有一批学生信息数据如下图:

图1 Excel中的示例数据
在创建Excel时,将Excel中的所在省,所在市做成了下拉菜单以供选择,设置如下:

图2 所在省一览 图3 所在市一览
从图1我们会发现一个问题,王五的填写所在省为:四川省,而所在市为:石家庄,大家都石家庄是河北的省会,所以王五的这种情况属于Excel中的错误数据,那么下面我们来做一件事:将Excel中所有出现省市关系弄错了的,在Excel中进行标注出来!!
代码如下:
package jxl.zhanhj; import java.io.*;
import java.util.HashMap; import jxl.*;
import jxl.format.Alignment;
import jxl.format.Border;
import jxl.format.BorderLineStyle;
import jxl.format.Colour;
import jxl.format.VerticalAlignment;
import jxl.write.Label;
import jxl.write.WritableCellFormat;
import jxl.write.WritableFont;
import jxl.write.WritableSheet;
import jxl.write.WritableWorkbook;
import jxl.write.WriteException; public class UpdateExcel {
public static void main(String args[]) {
WritableWorkbook book = null;
HashMap<String, String> map = new HashMap<String, String>();
map = getPCKV();
try {
// Excel获得文件
Workbook wb = Workbook.getWorkbook(new File("update_test.xls"));
// 打开一个文件的副本,并且指定数据写回到原文件
book = Workbook.createWorkbook(new File("update_test.xls"), wb);
Sheet sheet = book.getSheet(0);
WritableSheet wsheet = book.getSheet(0);
int colunms = sheet.getColumns();
// 不读表头
for (int i = 1; i < sheet.getRows(); i++) {
StringBuffer pcin = new StringBuffer();
// 将省市组合起来与HashMap进行匹配
String province = sheet.getCell(4, i).getContents().trim();
String city = sheet.getCell(5, i).getContents().trim();
pcin = pcin.append(province).append("-").append(city);
// 如果不匹配,则在该行的最后加入标注信息
if (!map.containsValue(pcin.toString())) {
Label label = new Label(colunms, i, "省市选择出错",
getDataCellFormat());
wsheet.addCell(label);
}
}
book.write();
} catch (Exception e) {
System.out.println(e);
} finally {
try {
book.close();
} catch (IOException e) {
e.printStackTrace();
}
}
} // 设置标注的格式为黄底红字
public static WritableCellFormat getDataCellFormat() {
WritableCellFormat wcf = null;
try {
WritableFont wf = new WritableFont(WritableFont.TIMES, 10,
WritableFont.BOLD, false);
// 字体颜色
wf.setColour(Colour.RED);
wcf = new WritableCellFormat(wf);
// 对齐方式
wcf.setAlignment(Alignment.CENTRE);
wcf.setVerticalAlignment(VerticalAlignment.CENTRE);
// 设置上边框
wcf.setBorder(Border.TOP, BorderLineStyle.THIN);
// 设置下边框
wcf.setBorder(Border.BOTTOM, BorderLineStyle.THIN);
// 设置左边框
wcf.setBorder(Border.LEFT, BorderLineStyle.THIN);
// 设置右边框
wcf.setBorder(Border.RIGHT, BorderLineStyle.THIN);
// 设置背景色
wcf.setBackground(Colour.YELLOW);
// 自动换行
wcf.setWrap(true);
} catch (WriteException e) {
e.printStackTrace();
}
return wcf;
} // 省市对应关系Map
public static HashMap<String, String> getPCKV() {
HashMap<String, String> map = new HashMap<String, String>();
map.put("01", "河北省-石家庄");
map.put("02", "河北省-秦皇岛");
map.put("03", "河北省-唐山");
map.put("04", "四川省-成都");
map.put("05", "四川省-绵阳");
map.put("06", "四川省-达州");
map.put("07", "广西省-桂林");
map.put("08", "广西省-南宁");
map.put("09", "广西省-柳州");
return map;
}
}
代码执行结果如图所示:

图4 执行结果
到这里,Java修改Excel单元格的数据及格式便告一段落了,本节给出了一个较为简单的场景进行了讲述,目的在于引导大家学习Java修改Excel的常用流程和方法,若读者能将Java操作Excel学得更深,往往可以发挥更大的作用。比如程序中利用HashMap来存储对应关系,如果要将全国的省市纳入进来,利用HashMap不是很好的做好,我们可以改成通过利用数据库来达到同样的效果,这里的改进留给读者。
读到这里,可能有部分读者会产生疑问,这种操作,直接在Excel中,我们不是也可以操作吗?为什么通过Java来修改,是不是多此一举了?其实不然,如果读者将Java读写文件结合起来,以及在将此程序稍微扩展一下,对每个Excel的所有页签进行遍历,那么Java程序处理的数据里和复杂度,远远不是单纯的Excel能企及的。举个简单的场景(仅仅将上述场景进行扩展):
如果一个学院要统计该学院所有学生的信息【格式和图1一样】,每个级发一个Excel,每个级不同专业的学生放在不同的页签中(sheet),如Excel样式下图所示:

图5 09级学生信息统计表

图6 10级学生信息统计表
最终,学院要根据收集上来的学生信息导入到数据库中,如果你是那个负责导入数据的人,你便通过Java读写Excel功能将所有的数据转化成SQL语句,同时可以判断出哪些同学信息填写错误,是不是这种应用变得更有意义了?
其实学习程序往往就是这样,掌握了各个知识点后要懂得把学过的只是串联起来,连点成线,这样在能更好的解决问题,希望本节的内容对大家有帮助,下期再见!
转:Java修改Excel单元格的数据及格式的更多相关文章
- java POI Excel 单元格样式
正如Html需要CSS一样,我们的POI生成的Excel同样需要样式才能更完美的表现我们的数据.下面还是从简单的例子出发,学习和了解POI的样式设计. 一.我的位置. 1 package com.my ...
- python3 修改excel 单元格的值(xlsx)
excel code #coding=utf- import os.path import os from openpyxl.reader.excel import load_workbook # e ...
- Java 在Excel单元格中应用一种/多种字体样式
在Excel表格中,设置单元格字体样式时,可以对单元格内的所有字符应用同一样式,即获取指定单元,应用样式即可:另外也可以对单元格内的不同字符内容应用不同字体样式,即获取单元格中的字符位置,应用样式:本 ...
- 用Java在excel单元格中设置超链接
(一)问题引入 有时候我们在导入数据到excel中时可能要给某个文件或图片设置超链接,例如链接到外网或者是本地的某个目录.我们可以通过Java代码来实现,借助POI库. (二)解决方案 下面直接给出参 ...
- php使用PHPexcel类读取excel文件(循环读取每个单元格的数据)
error_reporting(E_ALL); date_default_timezone_set('Asia/ShangHai'); include_once('Classes/PHPExcel/I ...
- ExcelUtility 对excel的序列化与反序列化,支持当单元格中数据为空时将属性赋值为指定类型的默认值
源码https://github.com/leoparddne/EPPlusHelper 安装: Install-Package ExcelUtility -Version 1.1.4 需要为对象添加 ...
- Spire.Cloud.SDK for Java 合并、拆分Excel单元格
Spire.Cloud.SDK for Java 是Spire.Cloud云产品系列中,用于处理Word.Excel.PowerPoint以及PDF文档的JAR文件,可执行文档编辑.转换.保存等操作. ...
- Excel 单元格自定义格式技巧总结
第一部分 Excel 中的单元格格式是一个最基本但是又很高级的技能,说它基本是因为我们几乎天天都会用到它,会用它来设置一些简单的格式,比如日期,文本等等:高级是因为利用 Excel 单元格的自定义格式 ...
- Excel单元格内容太多会覆盖遮住下一单元格范围
Excel单元格内容太多会覆盖遮住下一单元格范围分步阅读 Excel中的单元格内容,有着不同的对齐方式.用户可根据自己的需求,在处理数据的时候,自行设置所需要的对齐方式. 当您在处理数据的时候,如果设 ...
随机推荐
- Gitlab smtp 设置
地址: https://blog.csdn.net/yongche_shi/article/details/78677163 # 腾讯云限制25发信端口,修改为465,并开启. https://doc ...
- css要点
1.对inline-block设置overflow: hidden会造成baseline移动,因此需要设置vertical-align才不会出现样式问题. 2.使用flex时,需要对设置flex: 1 ...
- idiom的学习笔记(一)、三栏布局
三栏布局左右固定,中间自适应是网页中常用到的,实现这种布局的方式有很多种,这里我主要写五种.他们分别是浮动.定位.表格.flexBox.网格. 在这里也感谢一些老师在网上发的免费教程,使我们学习起来更 ...
- Android 微信分享与QQ分享功能
微信分享与QQ分享功能现在都挺常见的,可以根据一些第三方社会化分功能快速实现,不过多多少少都不怎么纯净,最好都是自己看官方文档来实现就最好了~ 一.微信分享 微信分享功能需要先在微信开放平台注册应用并 ...
- 多态&接口
多态 多态定义:允许一个父类变量引用子类的对象:允许一个接口类型引用实现类对象. 多态的调用:使用父类的变量指向子类的对象:所调用的属性和方法只限定父类中定义的属性和方法,不能调用子类中特有的属性和方 ...
- Warning:关于_CRT_SECURE_NO_WARNINGS
Warning 1 warning C4996: 'fopen': This function or variable may be unsafe. Consider using fopen_s in ...
- (转) RabbitMQ学习之spring整合发送同步消息(注解实现)
http://blog.csdn.net/zhu_tianwei/article/details/40918477 上一篇文章通过xml配置rabbitmq的rabbitTemplate,本节将使用注 ...
- java equals的用法
equals方法,用于比较两个对象是否相同,它其实就是使用两个对象的内存地址在比较.Object类中的equals方法内部使用的就是==比较运算符. package Xuexi; public cla ...
- 网络流入门——EK算法
转载:https://www.cnblogs.com/ZJUT-jiangnan/p/3632525.html 网络流的相关定义: 源点:有n个点,有m条有向边,有一个点很特殊,只出不进,叫做源点. ...
- JavaScript对原始数据类型的拆装箱操作
JS中的基本类型: boolean null undefined string number symbol 每当读取一个基本类型的时候,会隐式的自动进行装箱操作(即:将一个基本类型变成对象): var ...