当前位置: 首页 > 工具软件 > JXT > 使用案例 >

jxt 生成excle 工具类

闻人越
2023-12-01
package com.gxy.excel.util;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.util.Date;
import jxl.Cell;
import jxl.CellType;
import jxl.DateCell;
import jxl.LabelCell;
import jxl.NumberCell;
import jxl.Sheet;
import jxl.Workbook;
import jxl.format.Border;
import jxl.format.BorderLineStyle;
import jxl.format.Colour;
import jxl.format.UnderlineStyle;
import jxl.read.biff.BiffException;
import jxl.read.biff.WorkbookParser;
import jxl.write.DateFormat;
import jxl.write.DateTime;
import jxl.write.Label;
import jxl.write.Number;
import jxl.write.NumberFormat;
import jxl.write.WritableCellFormat;
import jxl.write.WritableFont;
import jxl.write.WritableImage;
import jxl.write.WritableSheet;
import jxl.write.WritableWorkbook;
import jxl.write.WriteException;
import jxl.write.biff.RowsExceededException;

public class JxtCommon {

	/*
	 * WorkbookParser.getWorkbook(InputStream 对象):创建一个WorkbookParser对象
	 * getSheets():返回工作薄(Workbook)中工作表(Sheet)对象数组 getSheet(int
	 * i):获得指定的sheet对象,i从0开始 getNumberOfSheets():获得工作薄中工作表sheet的个数
	 */

	// 创建excel
	public static void createSheet(String path) {
		// 创建可写入的工作簿对象
		WritableWorkbook workBook = null;
		// 创建工作表单
		WritableSheet sheet1 = null;
		try {
			/**
			 * 注意xsl的结构: 一个工作簿(WorkBook)下可以包含一张或多张工作表单(Sheet),
			 * 一个工作表单下可以有一个或多个行(Row),一个行又可以有一个或多个单元格(Cell)
			 */
			// 通过io创建xsl文件
			// 创建工作簿
			workBook = Workbook.createWorkbook(new File(path));
			// 创建工作表单
			sheet1 = workBook.createSheet("第一页工作表", 0);
			// 行数组
			int[] sheet_rows = { 0, 1, 2, 3, 4, 5 };
			// 列数组
			int[] sheet_column = { 0, 1, 2, 3, 4, 5 };
			for (int row : sheet_rows) {

				for (int column : sheet_column) {
					// 添加文本 列 , 行 , 文本
					Label label = new Label(column, row, "第" + row + "行中的第"
							+ column + "个数据");
					// 添加文本内容到单元格
					sheet1.addCell(label);

				}
			}

			// 创建第二页工作表单
			sheet1 = workBook.createSheet("第二页工作表", 1);
			// 生成数字 列 行 值
			Number number = new Number(0, 0, 234);
			// 添加数字内容到单元格
			sheet1.addCell(number);
			number = new Number(0, 1, 66);
			sheet1.addCell(number);
			number = new Number(0, 2, 99);
			sheet1.addCell(number);

			number = new Number(1, 3, 33);
			sheet1.addCell(number);
			number = new Number(1, 4, 66);
			sheet1.addCell(number);
			number = new Number(1, 5, 99);
			sheet1.addCell(number);

			/**
			 * 生成图片元素 说明: excel只支持png格式的图片, WritableImage类的常用构造器参数说明:
			 * WritableImage(图片开始显示的列的初始位置,图片开始显示的行的初始位置,图片所占的列数,图片所占的行数,文件对象)
			 */
			WritableImage write = new WritableImage(2, 6, 6, 8, new File(
					"f://preview.png"));
			// 添加图片元素
			sheet1.addImage(write);
			// 把所有信息写入工作簿
			workBook.write();
			// 关闭工作簿
			workBook.close();
			// 关闭输出流
			// outStream.close();

		} catch (FileNotFoundException notfound) {
			notfound.printStackTrace();
		} catch (IOException io) {
			io.printStackTrace();
		} catch (WriteException write) {
			write.printStackTrace();
		}
		System.out.println("xls文件生成成功");
	}

	/**
	 * 
	 * @Title: createSheet
	 * @Description: TODO(这里用一句话描述这个方法的作用)
	 * @param @param path
	 * @param @param workbooks_number 工作表单个数
	 * @param @param rows_number 行数
	 * @param @param column_number 列数
	 * @return void 返回类型
	 */
	public static void createSheet(String path, int workbooks_number,
			int rows_number, int column_number) {
		// 创建可写入的工作簿对象
		WritableWorkbook workBook = null;
		// 创建工作表单
		WritableSheet sheet1 = null;
		try {
			/**
			 * 注意xsl的结构: 一个工作簿(WorkBook)下可以包含一张或多张工作表单(Sheet),
			 * 一个工作表单下可以有一个或多个行(Row),一个行又可以有一个或多个单元格(Cell)
			 */
			// 通过io创建xsl文件
			// 创建工作簿
			workBook = Workbook.createWorkbook(new File(path));
			// 循环创建工作表单
			for (int i = 0; i < workbooks_number; i++) {
				// 创建工作表单
				sheet1 = workBook.createSheet("第" + i + "页工作表", i);
				// 创建行数
				for (int j = 0; j < rows_number; j++) {
					// 创建列数
					for (int x = 0; x < column_number; x++) {
						// 添加文本 列 , 行 , 文本
						Label label = new Label(x, j, "第" + j + "行中的第" + x
								+ "个数据");
						// 添加文本内容到单元格
						sheet1.addCell(label);

					}

				}

			}

			/*
			 * // 创建第二页工作表单 sheet1 = workBook.createSheet("第二页工作表", 1); // 生成数字
			 * 列 行 值 Number number = new Number(0, 0, 234); // 添加数字内容到单元格
			 * sheet1.addCell(number); number = new Number(0, 1, 66);
			 * sheet1.addCell(number); number = new Number(0, 2, 99);
			 * sheet1.addCell(number);
			 * 
			 * number = new Number(1, 3, 33); sheet1.addCell(number); number =
			 * new Number(1, 4, 66); sheet1.addCell(number); number = new
			 * Number(1, 5, 99); sheet1.addCell(number);
			 *//**
			 * 生成图片元素 说明: excel只支持png格式的图片, WritableImage类的常用构造器参数说明:
			 * WritableImage(图片开始显示的列的初始位置,图片开始显示的行的初始位置,图片所占的列数,图片所占的行数,文件对象)
			 */
			/*
			 * WritableImage write = new WritableImage(2, 6, 6, 8, new File(
			 * "f://preview.png")); // 添加图片元素 sheet1.addImage(write);
			 */
			// 把所有信息写入工作簿
			workBook.write();
			// 关闭工作簿
			workBook.close();
			// 关闭输出流
			// outStream.close();

		} catch (FileNotFoundException notfound) {
			notfound.printStackTrace();
		} catch (IOException io) {
			io.printStackTrace();
		} catch (WriteException write) {
			write.printStackTrace();
		}
		System.out.println("xls文件生成成功");
	}

	// 读取excel文件数据
	public static void readExcel(String path) {
		// 创建工作簿对象
		Workbook book = null;
		try {
			// 建立工作簿
			book = Workbook.getWorkbook(new File(path));
			// 从工作簿中得到所有的工作表单
			Sheet[] sheets = book.getSheets();
			System.out.println("获得工作薄中工作表sheet的个数==" + sheets.length);
			// 使用循环读取所有工作表单的内容
			for (Sheet sh : sheets) {
				// 获得sheet的名称
				String sheetname = sh.getName();
				System.out.println("获得sheet的名称==" + sheetname);
				// 总行数
				int rows = sh.getRows();
				System.out.println("获得sheet中所包含的总行数" + rows);
				// 总列数
				int cols = sh.getColumns();
				System.out.println("获得sheet中所包含的总列数==" + cols);
				Cell cell = null;
				// 行循环
				for (int i = 0; i < rows; i++) {
					// 列循环
					for (int j = 0; j < cols; j++) {
						// 第一个是列数,第二个是行数
						cell = sh.getCell(j, i);
						// 获取单元格内容
						String cellContent = cell.getContents();
						System.out.println(sh.getName() + "第" + i + "行第" + j
								+ "列单元格内容是:" + cellContent);
						// 字符串
						if (cell.getType() == CellType.LABEL) {
							System.out.println("===dddddddddddddddddddddddddddddddddddddddddddddddd="+cell.getType());
							System.out.println("ggggggggggggggggggggggg="+CellType.NUMBER);
							LabelCell labelc00 = (LabelCell) cell;
							String strc00 = labelc00.getString();
							System.out.println("字符串===" + strc00);
						}
						// 数字
						if (cell.getType() == CellType.NUMBER) {
							System.out.println("===dddddddddddddddddddddddddddddddddddddddddddddddd="+cell.getType());
							System.out.println("ggggggggggggggggggggggg="+CellType.NUMBER);
							NumberCell number00 = (NumberCell) cell;
							double strc00 = number00.getValue();
							System.out.println("数字===" + strc00);
						}
						// 时间
						if (cell.getType() == CellType.DATE) {
							DateCell datec00 = (DateCell) cell;
							Date strc00 = datec00.getDate();
							System.out.println("日期===" + strc00);
						}

					}
				}
			}
			book.close();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	// 修改excel文件中数据
	public static  void updateExcel(String path) {
		// 创建工作簿对象
		Workbook inBook = null;
		// 创建可写入的工作簿对象
		WritableWorkbook newBook = null;
		try {
			// 读取xls文件
			File inStream = new File(path);
			// 建立输入工作簿
			inBook = Workbook.getWorkbook(inStream);
			// 通过输入工作簿建立新的写操作工作簿
			newBook = Workbook.createWorkbook(inStream, inBook);
			// 从工作簿中得到所有的工作表单
			WritableSheet[] sheets = newBook.getSheets();
			// 使用循环读取所有工作表单的内容
			for (WritableSheet sh : sheets) {
				// 获取Sheet表中所包含的总列数
				int cols = sh.getColumns();
				// 获取Sheet表中所包含的总行数
				int rows = sh.getRows();
				Cell cell = null;
				// 行循环
				for (int i = 0; i < rows; i++) {
					// 列循环
					for (int j = 0; j < cols; j++) {
						// 第一个是列数,第二个是行数
						cell = sh.getCell(j, i);
						// 获取单元格内容
						String cellContent = cell.getContents();

						if (cellContent.equals("张倩")) {
							Label label = new Label(j, i, "小名");
							sh.addCell(label);
							System.out.println("修改成功");
						}
						System.out.println(sh.getName() + "第" + i + "行第" + j
								+ "列单元格内容是:" + cellContent);
						
						
					}
				}
			}
			inBook.close();
			newBook.write();
			newBook.close();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	// 根据条件删除excel文件中数据
	public void delExcel(String path) {
		// 创建工作簿对象
		Workbook inBook = null;
		// 创建可写的工作簿对象
		WritableWorkbook newBook = null;
		try {
			// 读取xls文件
			File inStream = new File(path);
			// 建立输入工作簿
			inBook = Workbook.getWorkbook(inStream);
			// 通过输入工作簿建立新的写操作工作簿
			newBook = Workbook.createWorkbook(inStream, inBook);
			// 从工作簿中得到所有的工作表单
			WritableSheet[] sheets = newBook.getSheets();
			// 使用循环读取所有工作表单的内容
			for (WritableSheet sh : sheets) {
				// 总列数
				int cols = sh.getColumns();
				// 总行数
				int rows = sh.getRows();
				Cell cell = null;
				// 行循环
				for (int i = 0; i < rows; i++) {
					// 列循环
					for (int j = 0; j < cols; j++) {
						// 第一个是列数,第二个是行数
						cell = sh.getCell(j, i);
						// 获取单元格内容
						String cellContent = cell.getContents();
						System.out.println("cellContent=====" + cellContent);
						if (cellContent.equals("小名")) {
							// 根据查询条件把单元格置空
							Label label = new Label(j, i, "张倩");
							sh.addCell(label);
							// 根据查询条件删除列数据
							// sh.removeColumn(j+2);
							// 根据查询条件删除行数据
							sh.removeRow(j + 4);
							System.out.println("数据删除成功");
						}
						System.out.println(sh.getName() + "第" + i + "行第" + j
								+ "列单元格内容是:" + cellContent);
					}
				}
			}
			inBook.close();
			newBook.write();
			newBook.close();

		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	// 创建create_excel
	public static void create_excel(String path) {
		try {
			File file = new File(path);
			if (!file.exists()) {
				file.createNewFile();
			}
			WritableWorkbook wwb = Workbook.createWorkbook(file);
			WritableSheet ws = wwb.createSheet("testexcel", 0);
			Label lable = null;

			// 对中文的支持非常好
			lable = new Label(0, 0, "我的中国心");
			ws.addCell(lable);

			// 可以定义模板格式化你的cell
			WritableFont wf = new WritableFont(WritableFont.ARIAL, 10,
					WritableFont.NO_BOLD, false, UnderlineStyle.NO_UNDERLINE,
					Colour.BLACK);
			WritableCellFormat wcf = new WritableCellFormat(wf);
			wcf.setBackground(Colour.WHITE);
			lable = new Label(0, 1, "fdsl", wcf);
			ws.addCell(lable);

			wf = new WritableFont(WritableFont.TIMES, 18, WritableFont.BOLD,
					true);
			wcf = new WritableCellFormat(wf);
			lable = new Label(0, 2, "aming", wcf);
			ws.addCell(lable);

			// cell的类型同样可以定义为数字类型
			Number nb = new Number(0, 3, 21.4321321);
			ws.addCell(nb);

			// 支持格式化你的数字串
			NumberFormat nf = new NumberFormat("#.###");
			wcf = new WritableCellFormat(nf);
			nb = new Number(0, 4, 21.43254354354354, wcf);
			ws.addCell(nb);

			// cell的类型可以为boolean类型
			// Boolean bl = new Boolean(0,5,true);
			// ws.addCell(bl);

			// cell的类型同样可以为日期,时间
			DateTime dt = new DateTime(0, 6, new Date());
			ws.addCell(dt);

			// 并且可以很好格式化你的日期格式
			DateFormat df = new DateFormat("MM dd yyyy hh:mm:ss");
			wcf = new WritableCellFormat(df);
			dt = new DateTime(0, 7, new Date(), wcf);
			ws.addCell(dt);

			// 开始写文件了
			wwb.write();
			wwb.close();

		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	// 利用jxl.jar包向excle表格写数据
	public static void writeDataToExcel(String path) throws IOException,
			RowsExceededException, WriteException {
		File file = new File(path);
		// 构造Workbook对象,只读Workbook对象
		// Method1:创建可写入的excle工作簿
		WritableWorkbook wwb1 = Workbook.createWorkbook(file);
		// Method2:将WritableWorkbook直接写入到输出流
		// OutputStream os = new FileOutputStream(path);
		// WritableWorkbook wwb2 = Workbook.createWorkbook(os);
		// 创建Excel工作表
		WritableSheet ws = wwb1.createSheet("值班表", 0);// arg0,表示sheet的名称,arg1表示第几个sheet,下标从0开始
		// 设置列的宽度、设置行的高度 jxl中20个高度对应excel的1个高度,jxl的1个宽度对应excel的7个宽度
		// 设置列宽,所有列
		ws.getSettings().setDefaultColumnWidth(25);
		// 设置行高,所有行
		ws.getSettings().setDefaultRowHeight(600);
		// 设置列宽,第一个参数为第几列,第二个参数为列宽
		ws.setColumnView(0, 20);
		// 设置行高,第一个参数为第几行,第二个参数为行高
		ws.setRowView(0, 800);
		// 是否显示网格 默认为true显示网格
		ws.getSettings().setShowGridLines(true);

		// 添加Label对象 列 行 内容
		Label labelC = new Label(0, 0, "夕阳");
		ws.addCell(labelC);

		// 创建带有字型Formatting的对象 字体 字号 加粗 是否是斜体字
		WritableFont wf = new WritableFont(WritableFont.TIMES, 18,
				WritableFont.BOLD, true);
		WritableCellFormat wcfF = new WritableCellFormat(wf);
		// 下面Label构造函数参数意思依次为:列数、行数、要写入的内容、这个Label的样式(可选)
		Label labelCF = new Label(1, 0, "创建带有字型Formatting的对象", wcfF);
		ws.addCell(labelCF);
		// 创建带有字体颜色Formatting的对象 居中对齐 10 号字体 无边框 字体颜色为红色
		WritableFont wfc = new WritableFont(WritableFont.ARIAL, 10,
				WritableFont.NO_BOLD, false, UnderlineStyle.NO_UNDERLINE,
				Colour.RED);
		WritableCellFormat wcfFC = new WritableCellFormat(wfc);
		wcfFC.setAlignment(jxl.format.Alignment.LEFT);// 设置水平对齐方式为居中
		wcfFC.setVerticalAlignment(jxl.format.VerticalAlignment.CENTRE);// 把垂直对齐方式指定为居中
		wcfFC.setWrap(true);// 设置自动换行
		Label labelCFC = new Label(2, 0, "创建带有字体颜色Formatting的对象", wcfFC);
		ws.addCell(labelCFC);

		// 添加Number对象
		NumberFormat nf = new NumberFormat("#.##");// 构造函数的#.##表示保留两位小数
		WritableCellFormat wcfN = new WritableCellFormat(nf);
		jxl.write.Number labelNF = new jxl.write.Number(1, 1, 3.1415926, wcfN);
		ws.addCell(labelNF);

		// 添加Boolean对象
		jxl.write.Boolean labelB = new jxl.write.Boolean(0, 2, false);// 参数依次为:列数、行数、值
		ws.addCell(labelB);

		// 添加DateTime对象
		DateTime labelDT = new jxl.write.DateTime(0, 3, new java.util.Date());
		ws.addCell(labelDT);

		// 添加带有formatting的DateFormat对象
		jxl.write.DateFormat df = new jxl.write.DateFormat(
				"dd MM yyyy hh:mm:ss");// 设置日期的格式
		WritableCellFormat wcfDF = new WritableCellFormat(df);
		DateTime labelDTF = new DateTime(1, 3, new java.util.Date(), wcfDF);
		ws.addCell(labelDTF);

		// (8)添加图片 只支持PNG格式的图片
		File image = new File("f://preview.png");
		// 前两位是起始格,后两位是图片占多少个格,并非是位置,四个参数的类型都是double,依次是 x, y, width, height,注意,
		// 这里的宽和高可不是图片的宽和高,而是图片所要占的单位格的个数
		WritableImage wimage = new WritableImage(3, 6, 4, 8, image);
		ws.addImage(wimage);

		// (10)添加批注
		Label labelStr = new Label(1, 10, "");

		// 合并单元格 co1 row1 co2 row2
		ws.mergeCells(3, 0, 5, 0);// 合并第一行的第4列到第6列 水平方向
		ws.mergeCells(3, 1, 3, 5);// 合并第4列的的第二行到第六行 垂直方向
		ws.mergeCells(1, 6, 2, 9);

		// 设置边框
		WritableCellFormat wcsB = new WritableCellFormat();
		wcsB.setBorder(Border.ALL, BorderLineStyle.DOUBLE);
		wcsB.setBackground(Colour.GREEN);// 背景色
		Label border = new Label(1, 4, "边框设置", wcsB);
		ws.addCell(border);
		// 写入excle工作表
		wwb1.write();
		System.out.println("利用jxl向excle写入数据完成");
		// 关闭excle工作簿对象
		wwb1.close();

	}

	// 利用jxl.jar包取excle表格的数据
	public static void getExcelData(String path) throws BiffException,
			IOException {
		InputStream is = new FileInputStream(path);
		WorkbookParser rwb = (WorkbookParser) WorkbookParser.getWorkbook(is);
		System.out.println("获得工作薄中工作表sheet的个数=" + rwb.getNumberOfSheets());
		Sheet[] sheets = rwb.getSheets();// 返回工作薄(Workbook)中工作表(Sheet)对象数组
		Sheet rs = rwb.getSheet(0);
		System.out.println("获得sheet的名称=" + rs.getName());
		System.out.println("获得sheet中所包含的总列数=" + rs.getColumns());
		System.out.println("获得sheet中所包含的总行数=" + rs.getRows());
		Cell[] cells1 = rs.getColumn(0);// 获取某一列所有的单元格
		System.out.println("cells1======" + cells1.length);
		Cell[] cells2 = rs.getRow(0);// 获取某一行的所有单元格
		Cell c00 = rs.getCell(0, 0);// 第一个是列数,第二个是行数
		// 获取单元格内容
		String contents = c00.getContents();// getContents()将任何类型的Cell值都作为一个字符串返回
		System.out.println("content====" + contents);
		// 字符串
		if (c00.getType() == CellType.LABEL) {
			LabelCell labelc00 = (LabelCell) c00;
			String strc00 = labelc00.getString();
			System.out.println(strc00);
		}
		// 数字
		if (c00.getType() == CellType.NUMBER) {
		
			NumberCell number00 = (NumberCell) c00;
			double strc00 = number00.getValue();
			System.out.println(strc00);
		}
		// 时间
		if (c00.getType() == CellType.DATE) {
			DateCell datec00 = (DateCell) c00;
			Date strc00 = datec00.getDate();
			System.out.println(strc00);
		}
		rwb.close();
		is.close();
	}

}

 类似资料: