JXL工具包对Excle文件操作
1、简介:
XL - JXL(Java Excel API)是一个用来动态读写 Excel 文件的开源框架,利用它可以 在任何支持 Java 的操作系统上动态读写 Excel 文件。
2、开发步骤
1、 jxl操作excel包括对象Workbook,Sheet ,Cell。
一个excel就对应一个Workbook对象,
一个Workbook可以有多个Sheet对象
一个Sheet对象可以有多个Cell对象
2、 读取excel操作
通过Workbook,Sheet ,Cell这三个对象我们就可以实现Excel文件的读取工作
a、 选取Excel文件得到工作薄
b、 选择工作表
c、 选择Cell
d、 读取信息
3、 读取工作薄
4、 读取工作表
5、 读取单元格
6、 读取单元格的值
2、工具类的代码:
- package com.turtle.com.turtle.utils;
- import jxl.Cell;
- import jxl.Sheet;
- import jxl.Workbook;
- import jxl.read.biff.BiffException;
- import jxl.write.Label;
- import jxl.write.WritableSheet;
- import jxl.write.WritableWorkbook;
- import jxl.write.WriteException;
- import java.io.File;
- import java.io.IOException;
- import java.util.HashMap;
- import java.util.Map;
- /**
- * data:2019-10-18 15:00
- * anthor:Turtle Zhang
- * descriion:实用JXL的jar包,来完成对Excel文件的读写操作的工具类
- */
- public class ExcelUtil {
- /**
- * 读取Excel中的文件
- * 标题行我们放在行下标为0的地方,具体数据行按照数据量依次写入数组中
- * @param file:Excel文件的路径
- * @return:存放excel的数据
- */
- public static Map<String,String[][]> readExcel(File file) throws IOException, BiffException {
- if (file == null || "".equals(file)){
- throw new RuntimeException("请检查你的文件路径是否存在问题");
- }
- // 1:创建workbook
- Workbook workbook= Workbook.getWorkbook(file);
- // 2:得到所有的sheet
- Sheet[] sheets = workbook.getSheets();
- // 3:定义用来返回结果的Map
- Map<String,String[][]> resultMap = new HashMap<String,String[][]>();
- //3:获取数据
- for (Sheet sheet : sheets){
- // 得到sheet中的记录行数、列数
- Integer rows = sheet.getRows();
- Integer columns = sheet.getColumns();
- // 用来存放每一个sheet中的表格数据
- String[][] sheetResult = new String[rows][columns];
- for (int i = 0; i < rows; i++){
- for (int j = 0; j<columns; j++){
- // 注意该参数中的参数顺序,是列在前,行在后
- Cell cell = sheet.getCell(j,i);
- sheetResult[i][j] = cell.getContents();
- }
- }
- // 把结果存入map集合中
- resultMap.put(sheet.getName(),sheetResult);
- }
- workbook.close();
- return resultMap;
- }
- /**
- * 写入数据进Excel文件
- * @param file:Excel的路径
- * @param map:要写入的数据
- */
- public static void createExcel(File file,Map<String,String[][]>map) throws IOException, WriteException {
- if (file == null || "".equals(file)){
- throw new RuntimeException("请检查你的文件路径是否存在问题");
- }
- file.createNewFile();
- //2:创建工作簿
- WritableWorkbook workbook= Workbook.createWorkbook(file);
- int index = 0;
- for (Map.Entry<String, String[][]> entry : map.entrySet()){
- // 得到工作薄的名字、数据
- String sheetName = entry.getKey();
- String[][] sheetData = entry.getValue();
- //3:创建sheet
- // sheet:也就是左下角的表格文档多个选择
- WritableSheet sheet=workbook.createSheet(sheetName, index);
- // 写入单元格
- Label label = null;
- for (int i = 0; i< sheetData.length; i++) {
- for (int j = 0; j< sheetData[i].length; j++) {
- // 创建单元格中的数据
- label = new Label(j,i,sheetData[i][j]);
- // 将单元格中的数据加入工作薄中
- sheet.addCell(label);
- }
- }
- index++;
- }
- workbook.write();
- workbook.close();
- }
- }
3、进行写入测试:
- package com.turtle;
- import com.turtle.com.turtle.utils.ExcelUtil;
- import java.io.File;
- import java.util.HashMap;
- import java.util.Map;
- public class TestExcelUtil {
- public static void main(String[] args) {
- File file = new File("d:/test.xls");
- Map<String,String[][]> map = new HashMap<>();
- String[][] data_1 = new String[][]{{"NO.1","NO.2","NO.3","NO.4","NO.5"},{"1","2","3","4","5"},{"11","22","33","44","55"}};
- String[][] data_2 = new String[][]{{"NO.1","NO.2","NO.3","NO.4","NO.5"},{"a","b","c","d","e"},{"aa","bb","cc","dd","ee"}};
- map.put("第一个Sheet",data_1);
- map.put("第二条Sheet",data_2);
- try{
- // 使用工具类中的方法,写入
- ExcelUtil.createExcel(file,map);
- }catch (Exception e){
- e.printStackTrace();
- }
- }
- }
结果:
4、进行读取测试:
- package com.turtle;
- import com.turtle.com.turtle.utils.ExcelUtil;
- import java.io.File;
- import java.util.HashMap;
- import java.util.Map;
- public class TestExcelUtil {
- public static void main(String[] args) {
- File file = new File("d:/test.xls");
- try {
- Map<String,String[][]> result = ExcelUtil.readExcel(file);
- for(Map.Entry<String,String[][]> entry :result.entrySet()){
- System.out.println("该Sheet的名字为:"+entry.getKey());
- String[][] values = entry.getValue();
- for(int i=0; i<values.length; i++){
- for(int j=0 ; j<values[i].length; j++){
- System.out.print(values[i][j]+"\t ");
- }
- System.out.println();
- }
- }
- }catch (Exception e){
- e.printStackTrace();
- }
- }
- }
结果:
补充:
- // 排除excel文件中有未完全删除的空白记录行操作,减少异常报错数量
- int tempRows = sheet.getRows();
- int columns=sheet.getColumns();
- Boolean falg = false; // 是否有数据的标志位
- int rows = 0; // 实际的非空记录行数
- for(int i = 0; i < tempRows; i++){
- falg = false;
- for(int j = 0; j < columns; j++){
- // 只要该行记录,有一个单元格填了数据,我们就当这条数据是要进行上传的,让其可以上传,这里排除全空单元格的记录行上传
- if(StringUtils.isNotBlank(sheet.getCell(j, i).getContents())){
- falg = true;
- break;
- }
- }
- if(falg){
- rows++;
- }
- }
JXL工具包对Excle文件操作的更多相关文章
- Java文件操作系列[2]——使用JXL操作Excel文件
由于java流无法实现对Excel文件的读写操作,因此在项目中经常利用第三方开源的组件来实现.支持Excel文件操作的第三方开源组件主要有Apache的POI和开源社区的JXL. 总体来说,二者的区别 ...
- python读写操作csv及excle文件
1.python读写csv文件 import csv #读取csv文件内容方法1 csv_file = csv.reader(open('testdata.csv','r')) next(csv_fi ...
- SpringMVC 实现POI读取Excle文件中数据导入数据库(上传)、导出数据库中数据到Excle文件中(下载)
读取Excale表返回一个集合: package com.shiliu.game.utils; import java.io.File; import java.io.FileInputStream; ...
- Python3 Pandas的DataFrame格式数据写入excle文件、json、html、剪贴板、数据库
Python3 Pandas的DataFrame格式数据写入excle文件.json.html.剪贴板.数据库 一.DataFrame格式数据 Pandas是Python下一个开源数据分析的库,它提供 ...
- python文件操作之二进制
列表项 三元运算符号: a=3 b=7 val=a if a>b else val=b print(val) 文件处理 首先给你一个文件,或者自己建立一个文件,那如何查看文件的内容呢? 1.安装 ...
- 【.NET深呼吸】Zip文件操作(1):创建和读取zip文档
.net的IO操作支持对zip文件的创建.读写和更新.使用起来也比较简单,.net的一向作风,东西都准备好了,至于如何使用,请看着办. 要对zip文件进行操作,主要用到以下三个类: 1.ZipFile ...
- 野路子出身PowerShell 文件操作实用功能
本文出处:http://www.cnblogs.com/wy123/p/6129498.html 因工作需要,处理一批文件,本想写C#来处理的,后来想想这个是PowerShell的天职,索性就网上各种 ...
- Node基础篇(文件操作)
文件操作 相关模块 Node内核提供了很多与文件操作相关的模块,每个模块都提供了一些最基本的操作API,在NPM中也有社区提供的功能包 fs: 基础的文件操作 API path: 提供和路径相关的操作 ...
- 归档NSKeyedArchiver解归档NSKeyedUnarchiver与文件管理类NSFileManager (文件操作)
========================== 文件操作 ========================== 一.归档NSKeyedArchiver 1.第一种方式:存储一种数据. // 归档 ...
随机推荐
- JavaScript-----7.循环
1.循环 在JS中主要有以下三种类型的循环 for循环 while循环 do...while循环 2. for循环 2.1 语法结构如下: for (初始化变量: 条件表达式: 操作表达式) { // ...
- 我想外包开发一个APP,需要多少钱,多少时间?
在一个阳光明媚的下午,我正瘫坐在椅子上改bug.忽然有人给我发微信:“我想做个app,多长时间,多少钱?” 从我从业iOS开发到现在,这个问题被问过无数次,比那句:“你是程序员,那你会修电脑吗?”还要 ...
- [CodeForces - 1272D] Remove One Element 【线性dp】
[CodeForces - 1272D] Remove One Element [线性dp] 标签:题解 codeforces题解 dp 线性dp 题目描述 Time limit 2000 ms Me ...
- 花了三个月终于把所有的 Python 库全部整理了!可以说很全面了
库名称简介 Chardet字符编码探测器,可以自动检测文本.网页.xml的编码. colorama主要用来给文本添加各种颜色,并且非常简单易用. Prettytable主要用于在终端或浏览器端构建格式 ...
- Windows10安装ubuntu16.04双系统教程
写在前面:本教程为windows10安装ubuntu16.04(64位)双系统教程,是我多次安装双系统的经验总结,安装方法同样适用于ubuntu18.04(64位).为了直观和易于理解,我会尽量图文并 ...
- 手把手教你搭建织女星开发板RISC-V开发环境
前言 Windows环境下搭建基于Eclipse + RISC-V gcc编译器的RISC-V开发环境,配合openocd调试软件,可以实现RISC-V内核程序的编译.下载和调试. 准备工作 工欲善其 ...
- uni-app中onLoad不起作用
最近开始使用uni-app,坑还是很多的 今天在使用onLoad是发现,页面上的onLoad方法是可以起作用的,但是组件中的onLoad方法并没有起作用 后来经过一番尝试后还是不行,看文档发现uni- ...
- react-native自定义Modal模态框|仿ios、微信弹窗RN版
前序 纵观每个优质项目,无论web端还是native原生应用开发,弹窗都是不可忽视的一环,能很大程度上直接决定用户体验.如:微信.支付宝.ios都有很成熟的一套弹窗UI展示场景. 最近一直沉迷在rea ...
- 2019 DevOps 必备面试题——DevOps 理念篇
原文地址:https://medium.com/edureka/devops-interview-questions-e91a4e6ecbf3 原文作者:Saurabh Kulshrestha 翻译君 ...
- git集成idea
1.Git Gui的使用 2.Ssh key 介绍及使用 3.Idea配置使用并使用git Git Gui的使用 Ssh key 介绍及使用 Ssh key介绍 我理解的就是每台电脑上会产生出一个ss ...