前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【Eclipse表格读写问题】利用jxl包进行Excel的读写

【Eclipse表格读写问题】利用jxl包进行Excel的读写

作者头像
为了伟大的房产事业
发布2024-03-15 12:44:31
550
发布2024-03-15 12:44:31
举报
文章被收录于专栏:Java崽Java崽

先看源码

代码语言:javascript
复制
package readExcel;

import java.io.FileInputStream;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.Hashtable;

import jxl.Cell;
import jxl.Sheet;
import jxl.Workbook;

import java.io.File;
import jxl.write.Label;
import jxl.write.WritableSheet;
import jxl.write.WritableWorkbook;


public class ReadExcel {
	public static void main(String[] args) {
		try {
			// 1、构造excel文件输入流对象
            //这里的路径要换掉,换成自己的表格名字
			String Path = "Example/NeedRead/BMUS.xls";
			InputStream is = new FileInputStream(Path);
			// 2、声明工作簿对象
			Workbook rwb = Workbook.getWorkbook(is);

			// 3、获得工作簿的个数,对应于一个excel中的工作表个数
			rwb.getNumberOfSheets();

			// 获取excel中所有的表
			// Sheet[] sheets = rwb.getSheets();
			// 获取表的个数
			// Integer pages = sheets.length;
			// 获取对应表,i为循环
			// Sheet sheet = sheets[i];

			// 使用索引形式获取第一个工作表。
			// Sheet oFirstSheet = rwb.getSheet(0);//

			// 也可以使用rwb.getSheet(sheetName);其中sheetName表示的是工作表的名称
			Sheet oFirstSheet = rwb.getSheet("第一个表");

			// System.out.println("工作表名称:" + oFirstSheet.getName());
			int rows = oFirstSheet.getRows();// 获取工作表中的总行数
			int columns = oFirstSheet.getColumns();// 获取工作表中的总列数

			System.out.println("*****输出第一个表的总行数*****" + rows);
			System.out.println("*****输出第一个表的总列数*****" + columns);

			/**
			 * 按照每一列读取数据,将一列中的数据存入数组
			 * 
			 */

			// 用于读取直接从表中读取的数据
			Hashtable<Integer, ArrayList<String>> dataStr = new Hashtable<>();

			// 列的循环
			for (int i = 0; i < columns; i++) {

				// 将列中的数据存入此处,由于不能确定每一列中的具体行数,先使用ArrayList
				// 此处需注意的是已经确认了每一列中的数据是连续的,没有相隔一行或几行的数据
				ArrayList<String> cdata = new ArrayList<String>();

				// 行的循环,从第一个一直读取到整个表的最大行数,当遇到空值时跳出循环
				for (int j = 0; j < rows; j++) {

					// 将表中一个方格中的“东西”转换为Cell这个类,这个类也只有一个值
					// 需要注意的是这里的getCell方法的参数,第一个是指定第几列,第二个参数才是指定第几行
					// System.out.println("这个是i列 "+i+" 这个是j行 "+j);
					Cell oCell = oFirstSheet.getCell(i, j);

					// 将Cell类型的数据转换为String类型的数据。Cell只提供转换成String的方法,无法直接转换成Double、int数据
					String oCellStr = oCell.getContents();

					// System.out.println("这个是每一框中的数据 " +oCellStr);

					// 如果有数据,则存入数据,如果没有,则跳出这个循环
					if (oCellStr != "") {
						cdata.add(oCellStr);
					} else {
						// System.out.println("---------------------------这个是空值了-----------------------");
						break;
					}

				}

				// 存入每一列的数据
				dataStr.put(i, cdata);

			}

			/**
			 * 进行简单的操作,即把每一个值加上50
			 */
			// 用于存储经过运算之后的值
			Hashtable<Integer, ArrayList<Integer>> dataInt = new Hashtable<>();

			// 列的循环
			for (int i = 0; i < dataStr.size(); i++) {

				// 用于存储每一列的值
				ArrayList<Integer> cDataInt = new ArrayList<>();
				// 行的循环
				for (int j = 0; j < dataStr.get(i).size(); j++) {
					// 每一个方框中的值,此处读取为字符串类型
					String daStr = dataStr.get(i).get(j);
					// 将String转换为Integer类型
					int daInt = Integer.parseInt(daStr);

					// 加上50
					daInt += 50;
					// 存入这一列的数据中
					cDataInt.add(daInt);
				}
				// 将这一列存入总数据中
				dataInt.put(i, cDataInt);
			}
			
			/**
			 * 写入新的Excel表
			 * 
			 * 
			 * */
			/* 把Excel表输出的位置 */
			String targetpath = "Example/NeedRead/oneCopy.xls";

			
			// 1、创建工作簿(WritableWorkbook)对象,打开excel文件,若文件不存在,则创建文件,但注意必须保证文件夹存在,此处无法创建新文件夹
			WritableWorkbook writeBook = Workbook.createWorkbook(new File(targetpath));
			// 2、新建工作表(sheet)对象,并声明其属于第几页
			WritableSheet firstSheet = writeBook.createSheet("第一种复制的表", 0);// 第一个参数为工作簿的名称,第二个参数为页数
			// WritableSheet secondSheet = writeBook.createSheet("第二个工作簿", 0);

			/**
			 * 循环输出
			 */

			// 列的循环
			for (int i = 0; i < dataInt.size(); i++) {

				// 行的循环
				for (int j = 0; j < dataInt.get(i).size(); j++) {

					// 每一个方框中的值,此处读取为Integer
					int data = dataInt.get(i).get(j);

					// 3、创建单元格(Label)对象
					// 第一个参数指定单元格的列数、第二个参数指定单元格的行数,第三个指定写的字符串内容
					Label label = new Label(i, j, String.valueOf(data));
					// 写入数据
					firstSheet.addCell(label);
					
				}

			}
			// 4、打开流,开始写文件
			writeBook.write();
			//关闭读取和写入的工作流
			is.close();
			writeBook.close();
		} catch (Exception e) {
			e.printStackTrace();

		}

		System.out.println("程序运行结束");
	}
}

记住一定要把jxl包放在lib列表下

 然后右键jxl包,Build Path》》》Configure Build Path,把jxl包添加一下

添加之后就会出现这个

 如果代码出现

代码语言:javascript
复制
at jxl.read.biff.CompoundFile.<init>(CompoundFile.java:116)
	at jxl.read.biff.File.<init>(File.java:127)
	at jxl.Workbook.getWorkbook(Workbook.java:268)
	at jxl.Workbook.getWorkbook(Workbook.java:253)
	at readExcel.ReadExcel.main(ReadExcel.java:25)

那是因为你的Excel表格

1:版本问题,现在jxl包好像只能弄03的还是哪个来着

2:表格出现错误

3:后缀名一定是xls,不能是xlsx。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2024-03-15,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档