Java对xls文件进行读写操作示例代码

前言

本文主要给大家介绍的是关于Java对xls文件进行读写操作的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍:

  • win7_x64
  • IDEA

Java读写xls文件,使用库jxl.jar

读写xls文件,这里是在知道表格格式的前提下进行操作的。

目前无法操作xlsx文件

准备工作

将库jxl.jar添加到工程依赖中

Java代码示例

示例:从几个文件中读取数据并汇总到一个文件中

表格中的数据规定为:首行为标题,以下是数据和名称;例如

单位名 金额
单位1 948.34
单位2 4324
单位5 324

准备好表格文件,放在指定目录下

示例过程大致为:在指定目录找到所有xls文件;遍历所有文件,读取出所有的单位名称;将单位名称排序;再遍历一次所有文件,将每个文件中单位对应的金额读出并存储;最后写到输出表格中。

final String wsFileDir = "H:/OtherWorkDocs/ws"; // 原始数据存放的目录
final String resFilePath = "H:/OtherWorkDocs/output/jan_feb_mar_sum.xls";
RWExcel rwExcel = new RWExcel(); // 操作xls的实例
// 获取所有的名称并排序
TreeSet<String> nameSet = rwExcel.getNameSet(wsFileDir);
// 将名称与下标存入map中
HashMap<String, Integer> nameRowHashMap = rwExcel.getNameRowHashMap(nameSet);
File wsDir = new File(wsFileDir); // 源文件目录
File[] sourceFiles = wsDir.listFiles();
// 存储单位名称与金额对应的数据
List<HashMap<String, Float>> dataList = new ArrayList<>(10);
if (sourceFiles != null) {
 for (File sF : sourceFiles) {
  // 装载数据
  dataList.add(rwExcel.getSourceData(sF.getAbsolutePath()));
 }
}
// 原始数据已经全部读出来,和名称一次性全部写入
rwExcel.writeAllToResFile(resFilePath, nameRowHashMap, dataList);
// 补充标题栏的标题
if (null != sourceFiles) {
 int col = 1; // 起始列的序号
 for (File f : sourceFiles) {
  String fileName = f.getName();
  String name = fileName.substring(0, fileName.length() - 4);
  rwExcel.updateContent(resFilePath, name, 0, col);
  col++;
 }
}

Java代码

新建一个类RWExcel来操作xls文件。

public class RWExcel {
 /**
  * 存储名称
  */
 private TreeSet<String> nameTreeSet = new TreeSet<>();
 /**
  * 名称以及排列的下标号
  */
 private HashMap<String, Integer> nameRowMap = new HashMap<>();
 public TreeSet<String> getNameSet(String wsPath) {
  try {
   File wsDir = new File(wsPath);
   if (wsDir.exists() && wsDir.isDirectory()) {
    println("工作目录存在");
    File[] files = wsDir.listFiles();
    if (files != null && files.length > 0) {
     for (File cFile : files) {
      getNamesFromFile(cFile, this.nameTreeSet);
     }
    }
   }
  } catch (Exception e) {
   e.printStackTrace();
  }
  this.nameTreeSet.comparator();
  return this.nameTreeSet;
 }
 /**
  * 将名称Set排序后存入HashMap
  * 下标从1开始
  */
 public HashMap<String, Integer> getNameRowHashMap(TreeSet<String> nameSet) {
  nameSet.comparator();
  int index = 1;
  for (String name : nameSet) {
   this.nameRowMap.put(name, index);
   index++;
  }
  return this.nameRowMap;
 }
 /**
  * 所有数据存入表格
  */
 public void writeAllToResFile(String resFilePath, Map<String, Integer> nameMap, List<HashMap<String, Float>> dataList) {
  File resFile = new File(resFilePath);
  if (!resFile.exists()) {
   try {
    resFile.createNewFile();
   } catch (IOException e) {
    e.printStackTrace();
   }
  }
  if (resFile.exists()) {
   try {
    // 先写名称
    WritableWorkbook wwb = Workbook.createWorkbook(resFile);
    WritableSheet ws = wwb.createSheet("sum", 0);
    Label label = new Label(0, 0, "单位名称");
    ws.addCell(label);
    for (Map.Entry<String, Integer> entry : nameMap.entrySet()) {
     Label nameLabel = new Label(0, entry.getValue(), entry.getKey());
     ws.addCell(nameLabel);
     for (int j = 0; j < dataList.size(); j++) {
      Number zeroCell = new Number(j + 1, entry.getValue(), 0);
      ws.addCell(zeroCell);
     }
    }
    for (int dataColumn = 0; dataColumn < dataList.size(); dataColumn++) {
     HashMap<String, Float> dataMap = dataList.get(dataColumn);
     // 遍历这个map 将所有的数据对应填入
     for (Map.Entry<String, Float> dataEntry : dataMap.entrySet()) {
      int row = nameRowMap.get(dataEntry.getKey());
      Number numberCell = new Number(dataColumn + 1, row, dataEntry.getValue());
      ws.addCell(numberCell);
     }
    }
    wwb.write();
    wwb.close();
   } catch (Exception e) {
    e.printStackTrace();
   }
  }
 }
 private void getNamesFromFile(File inputFile, TreeSet<String> hashSet) throws IOException, BiffException {
  Workbook workbook;
  InputStream is = new FileInputStream(inputFile);
  workbook = Workbook.getWorkbook(is);
  Sheet sheet0 = workbook.getSheet(0);
  int columnSum = sheet0.getColumns(); // 总列数
  int rsRows = sheet0.getRows();  // 总行数
  // 从1下标开始
  for (int i = 1; i < rsRows; i++) {
   Cell cell = sheet0.getCell(0, i);
   if (!isEmpty(cell.getContents())) {
    hashSet.add(cell.getContents());
   }
  }
  println("此文件行数减一 = " + (rsRows - 1) + " , 当前获取到的所有单位数 " + hashSet.size());
 }
 /**
  * 从原始数据中读取并匹配的存入结果文件中
  */
 private HashMap<String, Float> getSourceData(String source) {
  File sFile = new File(source);
  if (!sFile.exists()) {
   System.out.println("原始文件不存在 复制失败!");
   return null;
  }
  // 读取源文件中的所有数据 <单位名称, 数值>
  HashMap<String, Float> sourceHashMap = new HashMap<>();
  try {
   Workbook sourceWs = Workbook.getWorkbook(sFile);
   Sheet sSheet0 = sourceWs.getSheet(0);
   int sTotalRows = sSheet0.getRows();  // 总行数
   for (int i = 1; i < sTotalRows; i++) {
    Cell cellKey = sSheet0.getCell(0, i);
    Cell cellValue = sSheet0.getCell(1, i);
    if (!isEmpty(cellKey.getContents()) && !isEmpty(cellValue.getContents())) {
     sourceHashMap.put(cellKey.getContents(), Float.valueOf(cellValue.getContents()));
    }
   }
   println(source + " 读取到的数据数量 = " + sourceHashMap.size());
  } catch (Exception e) {
   e.printStackTrace();
  }
  return sourceHashMap;
 }
 public void updateContent(String filePath, String input, int row, int column) {
  File file = new File(filePath);
  if (!file.exists()) {
   System.out.println(filePath + " does not exist!");
   return;
  }
  try {
   Workbook sourceWb = Workbook.getWorkbook(file);
   WritableWorkbook wwb = Workbook.createWorkbook(file, sourceWb);
   WritableSheet wSheet0 = wwb.getSheet(0);
   Label label = new Label(column, row, input);
   wSheet0.addCell(label);
   wwb.write();
   wwb.close();
  } catch (Exception e) {
   e.printStackTrace();
  }
 }
 public RWExcel() {
 }
 private static boolean isEmpty(String str) {
  if (null == str) {
   return true;
  }
  return str.isEmpty();
 }
 private static void println(String in) {
  System.out.println(in);
 }
}

示例运行结果

得到以下结果(示例)

单位名称 1月总金额 2月总金额 3月总金额
单位1 0 59.29999924 948.3400269
单位10 0 0 494.2000122
单位11 0 0 11.19999981
单位12 0 0 1.25
单位15 49.36000061 0 0
单位2 0 0 4324
单位24 0 34 0
单位5 0 23123 324
单位6 0 161.2599945 0

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对我们的支持。

(0)

相关推荐

  • java批量导入导出文件的实例分享(兼容xls,xlsx)

    一.介绍 利用java实现文件的导入导出数据库,目前在大部分系统中是比较常见的功能了,今天写个小demo来理解其原理,没接触过的同学也可以看看参考下. 目前我所接触过的导入导出技术主要有POI和iReport,poi主要作为一些数据批量导入数据库,iReport做报表导出.另外还有jxl类似poi的方式,不过貌似很久没跟新了,2007之后的office好像也不支持,这里就不说了. 二.POI使用详解 2.1 什么是Apache POI? Apache POI是Apache软件基金会的开放源码函式

  • java中使用xls格式化xml的实例

    在java中调用xls格式化xml 使用javax.xml.transform.Transformer,将xml用xls格式化为另一种xml 输入为xml字符串,输出也为xml字符串,代码模板如下: Java代码 //这里使用xml-apis.jar实现javax.xml.transform.Transformer import javax.xml.transform.Transformer; import javax.xml.transform.stream.StreamResult; imp

  • java简单解析xls文件的方法示例【读取和写入】

    本文实例讲述了java简单解析xls文件的方法.分享给大家供大家参考,具体如下: 读取: import java.io.*; import jxl.*; import jxl.write.*; import jxl.format.*; class Aa{ public static void main(String args[]) { try{ Workbook workbook = null; try { workbook = Workbook.getWorkbook(new File("d:

  • Java实现把excel xls中数据转为可直接插入数据库的sql文件

    我的一贯风格,代码说明一切.. 废话不多说了,直接给大家贴代码了,具体代码如下所示: package Tools; import java.io.BufferedWriter; import java.io.File; import java.io.FileWriter; import java.io.IOException; import java.lang.reflect.Field; import java.util.ArrayList; import java.util.List; im

  • Java对xls文件进行读写操作示例代码

    前言 本文主要给大家介绍的是关于Java对xls文件进行读写操作的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍: win7_x64 IDEA Java读写xls文件,使用库jxl.jar 读写xls文件,这里是在知道表格格式的前提下进行操作的. 目前无法操作xlsx文件 准备工作 将库jxl.jar添加到工程依赖中 Java代码示例 示例:从几个文件中读取数据并汇总到一个文件中 表格中的数据规定为:首行为标题,以下是数据和名称:例如 单位名 金额 单位1 948.34

  • Java实现Excel文件加密解密的示例代码

    目录 概述 示例大纲 工具 Java代码示例 示例1加密工作簿 示例2解密工作簿 示例3加密工作表 示例4加密工作表指定数据范围 示例5设置工作表公式隐藏 示例6解密Excel工作表 概述 设置excel文件保护时,通常可选择对整个工作簿进行加密保护,打开文件时需要输入密码:或者对指定工作表进行加密,即设置表格内容只读,无法对工作表进行编辑.另外,也可以对工作表特定区域设置保护,即设置指定区域可编辑或者隐藏数据公式,保护数据信息来源.无需设置文档保护时,可撤销密码保护,即解密文档.下面,将通过j

  • python config文件的读写操作示例

    本文实例讲述了python config文件的读写操作.分享给大家供大家参考,具体如下: 1.设置配置文件 [mysql] host = 1234 port = 3306 user = root password = Zhsy08241128 database = leartd 2.读取配置文件 import configparser import os conf= configparser.ConfigParser() def readConf(): '''读取配置文件''' root_pat

  • java接收ios文件上传的示例代码

    本文实例为大家分享了java如何接收ios文件上传的具体代码,供大家参考,具体内容如下 ios Multipart/form-data POST请求java后台spring接口一直出错,搞了两天,终于解决了,积累下来 package com.xx.controller; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.util.Iterator

  • android开发之Json文件的读写的示例代码

    Json格式是常见的读写形式.读写Json文件也是常用的操作. 这次来实践一下Json文件的读写. 首先在SD卡上的读写权限是一定要申请的.那么还是老办法,在 AndroidManifest.xml 文件中添加 <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 这在android 6.0 以下的系统就足够了.6.0及以上的更新的系统,在代码中需要申请SD卡的读写权限. 先

  • java Apache poi 对word doc文件进行读写操作

    使用POI读写Word doc文件 Apache poi的hwpf模块是专门用来对word doc文件进行读写操作的.在hwpf里面我们使用HWPFDocument来表示一个word doc文档.在HWPFDocument里面有这么几个概念: Range:它表示一个范围,这个范围可以是整个文档,也可以是里面的某一小节(Section),也可以是某一个段落(Paragraph),还可以是拥有共同属性的一段文本(CharacterRun).   Section:word文档的一个小节,一个word文

  • PHP文件打开关闭及读写操作示例解析

    前言 PHP支持文件上传功能,因此学习PHP文件的相关操作是必须的,这篇笔记会去记录PHP文件系统的相关知识. 文件打开与关闭 文件处理包括读取.关闭.重写等,例如,访问一个文件需要3步:打开文件.读写文件和关闭文件.其他的操作要么是包含在读写文件中(如显示内容.写入内容等),要么与文件自身的属性有关系(如文件遍历.文件改名等). 1.打开文件 在PHP中使用fopen()函数打开文件,fopen()函数的语法如下: resource fopen ( string filename, strin

  • Go语言文件开关及读写操作示例

    目录 ️ 实战场景 打开关闭文件 读取文件 bufio 读取文件 写文件 ️ 实战场景 本篇博客为大家再次带来 Go 语言的基础知识,这次要学习的内容是 Go 中的文件操作. 打开关闭文件 在 Go 中操作文件,首先要做的就是导入 os 模块,该模块中具备相关函数定义. package main import ( "fmt" "os" ) func main() { // 打开文件 file, err := os.Open("./ca.txt")

  • Java实现一个简单的文件上传案例示例代码

    Java实现一个简单的文件上传案例 实现流程: 1.客户端从硬盘读取文件数据到程序中 2.客户端输出流,写出文件到服务端 3.服务端输出流,读取文件数据到服务端中 4.输出流,写出文件数据到服务器硬盘中 下面上代码 上传单个文件 服务器端 package FileUpload; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.net.Serve

  • java实现MapReduce对文件进行切分的示例代码

    比如有海量的文本文件,如订单,页面点击事件的记录,量特别大,很难搞定.那么我们该怎样解决海量数据的计算? 1.获取总行数2.计算每个文件中存多少数据3.split切分文件4.reduce将文件进行汇总 例如这里有百万条数据,单个文件操作太麻烦,所以我们需要进行切分在切分文件的过程中会出现文件不能整个切分的情况,可能有剩下的数据并没有被读取到,所以我们每个切分128条数据,不足128条再保留到一个文件中 创建MapTask import java.io.*; import java.util.Ha

随机推荐