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

先看源码

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包添加一下

添加之后就会出现这个

 如果代码出现

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。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值