jxl.jar新建读取编辑Excel.xls

今日工作需要, 用java写了点代码操作excel文件.

通过网上的资源, 有两个开源的插件可用.  jxl.jar(只能操作excel.xls不支持excel.xlsx)和 poi.jar(支持excel.xls和excel.xlsx,  还支持word文件.)

这次我用的是jxl.jar. 简单的使用学起来很快. 附上api传送门http://jexcelapi.sourceforge.net/resources/javadocs/current/docs/

 

jxl.jar完美体现了面向对象的思想.简单列举几个常用类和接口

Workbook--对应一个excel文件

Sheet--对应一个sheet工作簿

Cell--对应一个cell单元格, 大多数编码工作都是围绕cell进行, 因为cell单元格是excel的最小编辑单位(自认为)嘛~

 

不说了,下面附上代码.

 

/**
 * @description Jxl.jar操作excel.xls文件
 * @author huangjc
 * @date 2016年12月11日 16:32:50
 */
package util;

import java.io.File;
import java.io.IOException;

import jxl.Cell;
import jxl.CellType;
import jxl.Sheet;
import jxl.Workbook;
import jxl.format.CellFormat;
import jxl.write.Label;
import jxl.write.WritableCell;
import jxl.write.WritableSheet;
import jxl.write.WritableWorkbook;
import jxl.write.WriteException;

public class ExcelUtilByJxl {

	public static void main(String[] args) throws Exception {
		createXl("F:/javaTraining/newXls01.xls");
		readXl("F:/javaTraining/newXls01.xls");
		editXl("F:/javaTraining/newXls01.xls");
	}

	// 新建excel
	public static void createXl(String xlPath) {
		System.out.println("--------------------开始新建并写入一个newXls01.xls--------------------");
		File file = new File(xlPath);
		WritableWorkbook workbook = null;
		WritableSheet sheet = null;
		try {
			workbook = Workbook.createWorkbook(file);// Creates a writable workbook with the given file name,这里会在磁盘上生成一个file文件
			sheet = workbook.createSheet("sheet0", 0);// 新建第一个sheet
			// 第0行表头, 行规定从第0行开始
			sheet.addCell(new Label(0, 0, "plyNo保单号"));// Label(列,行,内容)
			sheet.addCell(new Label(1, 0, "payType请款类型"));
			// 内容从第1行开始
			for (int row = 1; row < 21; row++) {
				for (int col = 0; col < 2; col++) {// 每行2列, 列规则是从第0列开始
					if (col == 0)
						sheet.addCell(new Label(col, row, "plyNo" + row));// 向sheet中添加cell单元格
					if (col == 1)
						sheet.addCell(new Label(col, row, "payType" + row));
				}
			}
			workbook.write();// Writes out the data held in this workbook in Excel format

		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			// 使用完后,记得关闭workbook
			if (workbook != null) {
				// 漏写的话, excel文件内容为空!!
				try {
					workbook.close();
				} catch (WriteException | IOException e) {
					e.printStackTrace();
				}// 关闭workbook释放内存,内容才会被写入到磁盘上的excel文件.
			}
			
			System.out.println("--------------------结束新建并写入一个newXls01.xls--------------------");
		}
	}

	// 读excel
	public static void readXl(String xlPath) {
		System.out.println("--------------------开始读excel--------------------");
		File file = new File(xlPath);
		Workbook workbook = null;
		Sheet sheet = null;
		Cell cell = null;

		try {
			workbook = Workbook.getWorkbook(file);
			sheet = workbook.getSheet(0);// 根据sheet排序取第0个sheet
			// sheet = workbook.getSheet("sheet0");//根据sheet名字取名为"sheet0"的sheet
			cell = sheet.getCell(0, 0);// 标题00
			String header00 = cell.getContents();// 取标题00位置的内容
			cell = sheet.getCell(1, 0);// 标题10
			String header10 = cell.getContents();// 取标题00位置的内容
			System.out.println("标题为:" + header00 + "----" + header10);
			for (int row = 1; row < 21; row++) {
				String content0 = null;
				String content1 = null;
				for (int col = 0; col < 2; col++) {
					if (col == 0) {
						cell = sheet.getCell(col, row);
						content0 = cell.getContents();
					} else if (col == 1) {
						cell = sheet.getCell(col, row);
						content1 = cell.getContents();
					}
				}
				System.out.println("第" + row + "行:" + content0 + "----" + content1);
			}

		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			workbook.close();// 关闭workbook释放内存
			System.out.println("--------------------结束读excel--------------------");
		}
	}

	// 写excel
	public static void writeXl(String xlPath) {

	}

	// 编辑excel
	public static void editXl(String xlPath) {
		System.out.println("--------------------开始编辑excel--------------------");
		File file = new File(xlPath);
		Workbook workbook = null;
		WritableWorkbook wtbook = null;
		WritableSheet wtSheet = null;
		WritableCell wtCell = null;
		String cellStr = null;
		String cellConts = null;
		try {
			workbook = Workbook.getWorkbook(file);
			// jxl.Workbook 对象是只读的,所以如果要修改Excel,需要创建一个可写的副本,副本指向原Excel文件(即下面的new File(excelpath))
			wtbook = Workbook.createWorkbook(file, workbook);
			wtSheet = wtbook.getSheet(0);
			wtCell = wtSheet.getWritableCell(0, 0);
			if (wtCell.getType() == CellType.LABEL) {// 文本类型
				
				/*********Label类更新单元格cell内容*********/
				cellStr = ((Label) wtCell).getString();// 获取单元格cell内容
				System.out.println("单元格cell(" + wtCell.getColumn() + "," + wtCell.getRow() + ")修改前:" + cellStr);
				//直接指定更新cell内容
				((Label) wtCell).setString("newHeader00");// 修改单元格cell内容
				cellStr = ((Label) wtCell).getString();// 获取单元格cell内容
				System.out.println("单元格cell(" + wtCell.getColumn() + "," + wtCell.getRow() + ")修改后:" + cellStr);
				/*********Label类更新单元格cell内容*********/
				
				/*********sheet.addCell()覆盖添加 以更新单元格cell内容*********/
				cellConts = wtCell.getContents();
				System.out.println("单元格cell(" + wtCell.getColumn() + "," + wtCell.getRow() + ")修改前:" + cellConts);
				CellFormat cf = wtCell.getCellFormat();//获取第一个单元格的格式
				Label lbl = new Label(wtCell.getColumn(), wtCell.getRow(), "newHeader00");//新建一个Label,坐标与将要修改的Cell一模一样
				lbl.setCellFormat(cf);//将修改后的单元格的格式设定成跟原来一样
				//通过覆盖添加实现更新cell内容
				wtSheet.addCell(lbl);//把Label覆盖添加到Sheet将要修改的同样坐标位置的Cell
				wtCell = wtSheet.getWritableCell(0, 0);//这里要重新获取一下cell对象,否则下面的cellConts = wtCell.getContents(); 还是原来的cell对象
				cellConts = wtCell.getContents();// 获取单元格cell内容
				System.out.println("单元格cell(" + wtCell.getColumn() + "," + wtCell.getRow() + ")修改后:" + cellConts);
				/*********sheet.addCell()覆盖添加 以更新单元格cell内容*********/
			}

		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			try {
				wtbook.write();
			} catch (IOException e) {
				e.printStackTrace();
			}
			try {
				wtbook.close();
			} catch (WriteException | IOException e) {
				e.printStackTrace();
			}
			
			workbook.close();
			System.out.println("--------------------结束编辑excel--------------------");
		}
	}
}

 

----------------------下面是控制台打出的日志---------------------------

 

--------------------开始新建并写入一个newXls01.xls--------------------
--------------------结束新建并写入一个newXls01.xls--------------------
--------------------开始读excel--------------------
标题为:plyNo保单号----payType请款类型
第1行:plyNo1----payType1
第2行:plyNo2----payType2
第3行:plyNo3----payType3
第4行:plyNo4----payType4
第5行:plyNo5----payType5
第6行:plyNo6----payType6
第7行:plyNo7----payType7
第8行:plyNo8----payType8
第9行:plyNo9----payType9
第10行:plyNo10----payType10
第11行:plyNo11----payType11
第12行:plyNo12----payType12
第13行:plyNo13----payType13
第14行:plyNo14----payType14
第15行:plyNo15----payType15
第16行:plyNo16----payType16
第17行:plyNo17----payType17
第18行:plyNo18----payType18
第19行:plyNo19----payType19
第20行:plyNo20----payType20
--------------------结束读excel--------------------
--------------------开始编辑excel--------------------
单元格cell(0,0)修改前:plyNo保单号
单元格cell(0,0)修改后:newHeader00
单元格cell(0,0)修改前:newHeader00
单元格cell(0,0)修改后:newHeader00
--------------------结束编辑excel--------------------


网上很多博客和栗子, 使用过程中, 先看别人的博客, 再参照API, API内容不多,很容易懂.

 

写博客为自己留个印记.

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个完整的 Java 实现,并实现了数据的增删改查: ``` import java.io.File; import java.util.ArrayList; import java.util.List; import jxl.Cell; import jxl.Workbook; import jxl.write.Label; import jxl.write.WritableSheet; import jxl.write.WritableWorkbook; import jxl.write.WriteException; public class Appliances { private String brand; private double price; public String getBrand() { return brand; } public void setBrand(String brand) throws Exception { if (brand.length() < 4) { throw new Exception("Brand must be at least 4 characters."); } this.brand = brand; } public double getPrice() { return price; } public void setPrice(double price) throws Exception { if (price < 0) { throw new Exception("Price cannot be negative."); } this.price = price; } public static void main(String[] args) { List<Appliances> goods = new ArrayList<>(); Appliances a1 = new Appliances(); try { a1.setBrand("Brand1"); a1.setPrice(100.0); } catch (Exception e) { e.printStackTrace(); } goods.add(a1); Appliances a2 = new Appliances(); try { a2.setBrand("Brand2"); a2.setPrice(200.0); } catch (Exception e) { e.printStackTrace(); } goods.add(a2); File file = new File("goodsInfo.xls"); try { WritableWorkbook workbook = Workbook.createWorkbook(file); WritableSheet sheet = workbook.createSheet("Goods", 0); sheet.addCell(new Label(0, 0, "Brand")); sheet.addCell(new Label(1, 0, "Price")); int row = 1; for (Appliances a : goods) { sheet.addCell(new Label(0, row, a.getBrand())); sheet.addCell(new Label(1, row, String.valueOf(a.getPrice()))); row++; } workbook.write(); workbook.close(); } catch (Exception e) { e.printStackTrace(); } // Read and modify data using jxl.jar try { Workbook workbook = Workbook.getWorkbook(file); WritableWorkbook writableWorkbook = Workbook.createWorkbook(file, workbook); WritableSheet sheet = writableWorkbook.getSheet(0); // Add a new appliance Appliances a3 = new Appliances(); a3.setBrand("Brand3"); a3.setPrice(300.0); goods.add(a3); int row = sheet.getRows(); sheet.addCell(new Label(0, row, a3.getBrand())); sheet.addCell(new Label(1, row, String.valueOf(a3.getPrice()))); // Modify an existing appliance for (int i = 1; i < sheet.getRows(); i++) { Cell brandCell = sheet.getCell(0, i); if (brandCell.getContents().equals("Brand2")) { Cell priceCell = sheet.getCell(1, i); double price = Double.parseDouble(priceCell.getContents()); price *= 1.1; sheet.addCell(new Label(1, i, String.valueOf(price))); a2.setPrice(price); break; } } // Delete an appliance for (int i = 1; i < sheet.getRows(); i++) { Cell brandCell = sheet.getCell(0, i); if (brandCell.getContents().equals("Brand1")) { sheet.removeRow(i); goods.remove(a1); break; } } writableWorkbook.write(); writableWorkbook.close(); } catch (Exception e) { e.printStackTrace(); } // Print all appliances for (Appliances a : goods) { System.out.println(a.getBrand() + ": " + a.getPrice()); } } } ``` 这个实现在 `main` 方法中,首先创建了两个 `Appliances` 对象,并将它们添加到一个 `ArrayList` 中,然后使用 `jxl.jar` 库将商品信息写入 Excel 文件 `goodsInfo.xls` 中。接着,使用 `jxl.jar` 库读取并修改了文件中的数据,包括增加一个新的电器、修改一个现有的电器和删除一个电器。最后,打印了所有的电器。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值