Java操作Excel文件

要用Java操作Excel文件需要使用到一个Jar包:jxl.jar,所以首先需要从网上下载这个Jar包。

要读取的Excel文件如下图所示:

Java操作Excel文件_第1张图片

Java操作Excel文件_第2张图片

文件名为“Example.xls”,里边有两个工作表,第一个工作表的名字为“Product”,第二个工作表的名字为“Customer”。我们将分别读取这个Excel文件中的两个工作表中的内容,并打印出来。

代码如下:

package cn.com.huixin.exercise;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.text.DateFormat;
import java.text.DecimalFormat;
import java.text.SimpleDateFormat;
import java.util.Date;

import jxl.Cell;
import jxl.CellType;
import jxl.DateCell;
import jxl.NumberCell;
import jxl.Sheet;
import jxl.Workbook;
import jxl.read.biff.BiffException;

public class ExcelFileOperation {

	public static void main(String[] args) throws IOException {
		int rows = 0;
		int columns = 0;
		double doublue = 0.0;
		String content = null;
		String[] columnName = null;
		StringBuffer buffer = null;
		InputStream inputStream = null;
		Workbook workbook = null;
		Sheet[] sheets = null;
		Cell cell = null;
		NumberCell numberCell = null;
		DateCell dateCell = null;
		Date date = null;
		DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
		DecimalFormat decimalFromat2 = new DecimalFormat(".00");
		DecimalFormat decimalFromat6 = new DecimalFormat(".000000");
		try {
			// 获取Excel文件输入流
			inputStream = new FileInputStream("F:\\Files\\Example.xls");
			// 获取工作簿
			workbook = Workbook.getWorkbook(inputStream);
			// 获取工作表
			sheets = workbook.getSheets();
			for (Sheet sheet : sheets) {
				// 获取工作表名为"Product"的对象
				if ("Product".equals(sheet.getName())) {
					buffer = new StringBuffer("产品信息:\n");
					// 获取工作表中的行数
					rows = sheet.getRows();
					// 获取工作表中的列数
					columns = sheet.getColumns();
					// 获取列名
					columnName = new String[columns];
					for (int i = 0; i < columns; i++) {
						columnName[i] = sheet.getCell(i, 0).getContents();
					}
					// 读取单元格中的内容
					for (int i = 1; i < rows; i++) {
						for (int j = 0; j < columns; j++) {
							if (j > 0) {
								buffer.append(", ");
							}
							cell = sheet.getCell(j, i);
							content = cell.getContents();
							if ("单价".equals(columnName[j])) {
								buffer.append(columnName[j] + ": ");
								// 如果单元格中的内容是数字格式,则将该单元格(cell)强制装换为NumberCell,然后调用该对象(numberCell)的getValue()方法来获取值,而不是调用cell的getContents()方法.
								if ((content != null) && (CellType.NUMBER == cell.getType())) {
									numberCell = (NumberCell) cell;
									// 此处如果不做强制转换的处理,直接调用cell的getContents()方法来获取值得话,则3.838125取出之后就会变成3.838。
									doublue = numberCell.getValue();
									content = decimalFromat2.format(doublue);
								}
							} else if ("总额(万元)".equals(columnName[j])) {
								buffer.append("总额: ");
								if ((content != null) && (CellType.NUMBER == cell.getType())) {
									numberCell = (NumberCell) cell;
									doublue = numberCell.getValue();
									// 此处使用DecimalFormat的目的是指定Double类型的精确度,即精确到小数点后几位,否则JRE就会自动精确到小数点后12位,这不符合我们的要求。
									content = decimalFromat6.format(doublue * 10000);
								}
							} else if ("购买日期".equals(columnName[j])) {
								buffer.append(columnName[j] + ": ");
								// 如果是日期格式,则将cell对象强制转换为DateCell,然后调用DateCell的getDate()来获取单元格的内容。
								if ((content != null) && (CellType.DATE == cell.getType())) {
									dateCell = (DateCell) cell;
									date = dateCell.getDate();
									// 调用DateFormat的format()方法来格式化日期对象 。
									content = dateFormat.format(date);
								}
							} else {
								buffer.append(columnName[j] + ": ");
							}
							buffer.append(content);
						}
						buffer.append("\n");
					}
					System.out.println(buffer.toString());
				}
				// 获取工作表名为"Customer"的对象
				if ("Customer".equals(sheet.getName())) {
					buffer = new StringBuffer("客户信息:\n");
					rows = sheet.getRows();
					columns = sheet.getColumns();
					columnName = new String[columns];
					for (int i = 0; i < columns; i++) {
						columnName[i] = sheet.getCell(i, 0).getContents();
					}
					// 读取单元格中的内容
					for (int i = 1; i < rows; i++) {
						for (int j = 0; j < columns; j++) {
							if (j > 0) {
								buffer.append(", ");
							}
							cell = sheet.getCell(j, i);
							content = cell.getContents();
							if ("消费总额(万元)".equals(columnName[j])) {
								buffer.append("消费总额: ");
								if ((content != null) && (CellType.NUMBER == cell.getType())) {
									numberCell = (NumberCell) cell;
									doublue = numberCell.getValue();
									content = decimalFromat6.format(doublue * 10000);
								}
							} else if ("消费日期".equals(columnName[j])) {
								buffer.append(columnName[j] + ": ");
								if ((content != null) && (CellType.DATE == cell.getType())) {
									dateCell = (DateCell) cell;
									date = dateCell.getDate();
									content = dateFormat.format(date);
								}
							} else {
								buffer.append(columnName[j] + ": ");
							}
							buffer.append(content);
						}
						buffer.append("\n");
					}
					System.out.println(buffer.toString());
				}
			}
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (BiffException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			workbook.close();
			inputStream.close();
		}
	}

}

下来进行写Excel文件的操作,最终的Excel文件效果如下图所示:

Java操作Excel文件_第3张图片

代码如下:

package cn.com.huixin.exercise;

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

import jxl.Workbook;
import jxl.format.Alignment;
import jxl.format.Colour;
import jxl.write.Label;
import jxl.write.WritableCellFormat;
import jxl.write.WritableSheet;
import jxl.write.WritableWorkbook;
import jxl.write.WriteException;

public class OperteExcel {

	public void writeExcel() throws WriteException, IOException {
		WritableWorkbook writableWorkbook = null;
		WritableSheet writableSheet = null;
		WritableCellFormat format_title = null;
		Label label = null;
		try {
			// 指定文件的路径及文件名
			writableWorkbook = Workbook.createWorkbook(new File("F:\\Exercise.xls"));
			// Excel文件中的工作表。"图书信息"为工作表名,"0"为该工作表的顺序,从0开始
			writableSheet = writableWorkbook.createSheet("图书信息", 0);

			// 设置单元格格式
			format_title = new WritableCellFormat();
			// 设置标题栏的背景色
			format_title.setBackground(Colour.GRAY_25);
			// 设置标题栏中文本的对齐方式为居中对齐
			format_title.setAlignment(Alignment.CENTRE);

			// 构造单元格中的Label对象。第一个0为列号,第二个0为行号,"ISBN"为单元格中的内容
			label = new Label(0, 0, "ISBN", format_title);
			// 添加单元格
			writableSheet.addCell(label);

			label = new Label(1, 0, "书名", format_title);
			writableSheet.addCell(label);

			label = new Label(2, 0, "出版社", format_title);
			writableSheet.addCell(label);

			label = new Label(3, 0, "作者", format_title);
			writableSheet.addCell(label);

			label = new Label(4, 0, "价格", format_title);
			writableSheet.addCell(label);

			label = new Label(0, 1, "9787302204015");
			writableSheet.addCell(label);

			label = new Label(1, 1, "计算机网络(第2版)");
			writableSheet.addCell(label);

			label = new Label(2, 1, "清华大学出版社");
			writableSheet.addCell(label);

			label = new Label(3, 1, "胡道元");
			writableSheet.addCell(label);

			label = new Label(4, 1, "39");
			writableSheet.addCell(label);

			label = new Label(0, 2, "978-7-121-09669-3");
			writableSheet.addCell(label);

			label = new Label(1, 2, "西门子PLC编程指令与梯形图快速入门 ");
			writableSheet.addCell(label);

			label = new Label(2, 2, "电子工业出版社 ");
			writableSheet.addCell(label);

			label = new Label(3, 2, "李若谷 ");
			writableSheet.addCell(label);

			label = new Label(4, 2, "24 ");
			writableSheet.addCell(label);

			label = new Label(0, 3, "978-7-04-016550-0");
			writableSheet.addCell(label);

			label = new Label(1, 3, "工业设计工程基础Ⅰ——材料及加工技术基础");
			writableSheet.addCell(label);

			label = new Label(2, 3, "高等教育出版社");
			writableSheet.addCell(label);

			label = new Label(3, 3, "赵英新");
			writableSheet.addCell(label);

			label = new Label(4, 3, "29");
			writableSheet.addCell(label);
			// 输出Excel文件
			writableWorkbook.write();
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			if (writableWorkbook != null) {
				writableWorkbook.close();
			}
		}
	}

	public static void main(String[] args) {
		OperteExcel operteExcel = new OperteExcel();
		try {
			operteExcel.writeExcel();
		} catch (WriteException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

}

 

你可能感兴趣的:(Java)