Java生成Excel表格的代码

1. 我们先定义这三个类

DataItem类,表示一个单元格内的数字

package com.tntxia.pem.entity;

public class DataItem {

	private String value;

	private String dataType;

	private String cellStyle="";

	public String getCellStyle() {
		return cellStyle;
	}

	public void setCellStyle(String cellStyle) {
		this.cellStyle = cellStyle;
	}

	/**
	 * 空构造函数
	 */
	public DataItem(){

	}

	/**
	 * 字符串参数的构造函数,默认将参数作为这个DataItem的值
	 */
	public DataItem(String value){
		this.value = value;
	}

	public String getDataType() {
		return dataType;
	}

	public void setDataType(String dataType) {
		this.dataType = dataType;
	}

	public String getValue() {
		return value;
	}

	public void setValue(String value) {
		this.value = value;
	}

}

  DataRow类,表示Excel中的一行,由多个DataItem组成

package com.tntxia.pem.entity;

import java.util.ArrayList;

public class DataRow {

	private ArrayList<DataItem> dataItems=new ArrayList<DataItem>();

	public ArrayList<DataItem> getDataItems() {
		return dataItems;
	}

	public void setDataItems(ArrayList<DataItem> dataItems) {
		this.dataItems = dataItems;
	}

	public void add(DataItem item){
		this.dataItems.add(item);
	}

	public void add(String value){
		this.dataItems.add(new DataItem(value));
	}

	public int size(){
		return this.getDataItems().size();
	}

}

  DataList类,整个表的数据,由多个DataRow组成。

package com.tntxia.pem.entity;

import java.util.ArrayList;

public class DataList {

	private ArrayList<DataRow> rows= new ArrayList<DataRow>();

	public ArrayList<DataRow> getRows() {
		return rows;
	}

	public void setRows(ArrayList<DataRow> rows) {
		this.rows = rows;
	}

	public void add(DataRow row){
		rows.add(row);
	}

	public void remove(int index){
		rows.remove(index);
	}

	// 把另外一个数据集合,注入到当前数据集合里面来。
	public void inject(DataList dataList){
		for(DataRow row : dataList.getRows()){
			this.rows.add(row);
		}
	}

	public String toString(){
		String res = "{";
		for(int i=0;i<rows.size();i++){
			DataRow row = rows.get(i);
			res+="{";
			for(int k=0;k<row.size();k++){
				res+= row.getDataItems().get(k).getValue()+",";
			}
			res+="},";
		}
		res+="}";
		return res;
	}

	public String[][] toTwoDArray(){
		ArrayList<DataRow> dataRows = this.getRows();
		String[][] result = new String[dataRows.size()][];
		int most = 0;
		for(int i=0;i<dataRows.size();i++){
			DataRow row = dataRows.get(i);
			ArrayList<DataItem> items = row.getDataItems();
			if(most<items.size()){
				most = items.size();
			}
			result[i]= new String[most];

			for(int j=0;j<most;j++){
				if(j<items.size()){
					DataItem item = items.get(j);
					result[i][j]=item.getValue();
				}else{
					result[i][j]="[null]";
				}
			}
		}
		return result;
	}

}

  2. 写一个Excel的Util类

package com.tntxia.pem;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Locale;

import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.poifs.filesystem.POIFSFileSystem;

import com.tntxia.pem.entity.DataItem;
import com.tntxia.pem.entity.DataList;
import com.tntxia.pem.entity.DataRow;

import jxl.Cell;
import jxl.CellType;
import jxl.Sheet;
import jxl.Workbook;
import jxl.WorkbookSettings;
import jxl.format.Border;
import jxl.format.BorderLineStyle;
import jxl.format.Colour;
import jxl.write.Label;
import jxl.write.WritableCell;
import jxl.write.WritableCellFormat;
import jxl.write.WritableFont;
import jxl.write.WritableSheet;
import jxl.write.WritableWorkbook;
import jxl.write.WriteException;

/**
 * Excel的工具类
 *
 * @author chensx
 *
 */
public class ExcelUtil {

	/** 不居中不加粗,内无边框,白底黑字,上边框 */
	private static WritableCellFormat wcf_mbwb = null;

	/** 居中加粗,白底黑字 */
	private static WritableCellFormat getWcfMBWB() {
		if (wcf_mbwb == null) {
			WritableFont wcf_mbwb_font = new WritableFont(WritableFont
					.createFont("宋体"), 10, WritableFont.BOLD);
			try {
				wcf_mbwb_font.setColour(Colour.BLACK);
				wcf_mbwb = new WritableCellFormat(wcf_mbwb_font);
				wcf_mbwb.setAlignment(jxl.format.Alignment.CENTRE);
				wcf_mbwb
						.setVerticalAlignment(jxl.format.VerticalAlignment.CENTRE);
				wcf_mbwb.setBackground(Colour.WHITE);
				wcf_mbwb.setBorder(Border.ALL, BorderLineStyle.THIN,
						Colour.BLACK);
				wcf_mbwb.setWrap(true);
			} catch (WriteException e) {
				e.printStackTrace();
			}
		}
		return wcf_mbwb;
	}

	/**
	 * 创建空白Excel文件,如果文件已经存在,为了避免覆盖已有文件引起的麻烦,直接返回
	 */
	public static void createExcelFile(String filePath) {
		File file = new File(filePath);
		if (file.exists()) {
			return;
		} else {
			try {
				file.createNewFile();
			} catch (Exception e) {
				e.printStackTrace();
				return;
			}

		}
		WorkbookSettings ws = new WorkbookSettings();
		ws.setLocale(new Locale("en", "EN"));
		try {
			WritableWorkbook workbook = null;
			workbook = Workbook.createWorkbook(file, ws);

			if (workbook.getSheets().length == 0) {
				workbook.createSheet("1", 0);
			}
			workbook.write();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	/**
	 * 将dataList里面的数据生成一张Excel表格
	 */
	public static void createExcelFile(String filePath, DataList dataList) {
		WritableWorkbook workbook = null;
		File file = new File(filePath);
		try {
			workbook = Workbook.createWorkbook(file);
			WritableSheet sheet = null;
			if (workbook.getSheets().length == 0) {
				sheet = workbook.createSheet("sheet", 0);
			} else {
				sheet = workbook.getSheet(0);
			}
			ArrayList<DataRow> rows = dataList.getRows();
			for (int i = 0; i < rows.size(); i++) {
				DataRow row = rows.get(i);
				ArrayList<DataItem> items = row.getDataItems();
				for (int j = 0; j < items.size(); j++) {
					DataItem item = items.get(j);
					Label value_label = null;
					// 如果Item里面设置了样式,现在只有样式1
					if (item.getCellStyle().equals("1")) {
						value_label = new Label(j, i, item.getValue(),
								getWcfMBWB());
					} else {
						value_label = new Label(j, i, item.getValue());
					}
					sheet.addCell(value_label);
				}
			}
			workbook.write();
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			try {
				workbook.close();
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
	}

	/**
	 * 拷贝后,进行修改,其中file1为被copy对象,file2为修改后创建的对象
	 * 尽单元格原有的格式化修饰是不能去掉的,我们还是可以将新的单元格修饰加上去, 以使单元格的内容以不同的形式表现
	 *
	 * @param file1
	 * @param file2
	 */
	public static void modifyExcel(File file1, File file2) {
		try {
			Workbook rwb = Workbook.getWorkbook(file1);
			WritableWorkbook wwb = Workbook.createWorkbook(file2, rwb);// copy
			int sheetCount = wwb.getNumberOfSheets();
			for (int i = 0; i < sheetCount; i++) {
				WritableSheet ws = wwb.getSheet(i);
				int rows = ws.getRows();
				for (int k = 0; k < rows; k++) {
					Cell[] rowCells = ws.getRow(k);
					for (int j = 0; j < rowCells.length; j++) {
						WritableCell wc = ws.getWritableCell(j, k);
						// 判断单元格的类型,做出相应的转换
						if (wc.getType() == CellType.LABEL) {
							Label label = (Label) wc;
							if (label.getString().equals("北京京北方科技股份有限公司")) {
								label.setString("北京宇信易诚科技有限公司");
							}
						}
					}
				}
				wwb.write();
				wwb.close();
				rwb.close();
			}

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

	public static DataList readDataFromFile(String file, int startIndex) {

		POIFSFileSystem fs = null;
		HSSFWorkbook wb = null;
		DataList dataList = new DataList();

		try {
			fs = new POIFSFileSystem(new FileInputStream(file));
			wb = new HSSFWorkbook(fs);
		} catch (IOException e) {
			e.printStackTrace();
			return null;
		}

		HSSFSheet sheet = wb.getSheetAt(0);
		HSSFRow row = null;
		HSSFCell cell = null;
		int rowNum;
		rowNum = sheet.getLastRowNum();
		for (int i = startIndex; i <= rowNum; i++) {
			row = sheet.getRow(i);
			if (row == null)
				continue;
			DataRow dataRow = new DataRow();
			int cellNum = row.getLastCellNum();
			for (int k = 0; k < cellNum; k++) {
				cell = row.getCell((short) k);
				if (cell == null) {
					dataRow.add(new DataItem(null));
				} else {
					if (cell.getCellType() == HSSFCell.CELL_TYPE_NUMERIC) {
						dataRow.add(String.valueOf((int) cell
								.getNumericCellValue()));
					} else if (cell.getCellType() == HSSFCell.CELL_TYPE_STRING) {
						dataRow.add(cell.getStringCellValue());
					}
				}
			}

			dataList.add(dataRow);

		}
		return dataList;
	}

	public static DataList readDataFromFiles(int startIndex) {
		File root = new File("F:\\exel\\五期导出记录2");
		File[] files = root.listFiles();
		DataList dataList = new DataList();
		for (File file : files) {
			DataList dl = readDataFromFile(file.getAbsolutePath(), startIndex);
			dataList.inject(dl);
		}
		return dataList;
	}

	public static void append(File modelFile, File destFile, int modelStart,
			int pasteFileStart) {
		DataList dataList = readDataFromFiles(pasteFileStart);
		System.out.println(dataList.getRows().size());
		try {
			Workbook rwb = Workbook.getWorkbook(modelFile);
			WritableWorkbook wwb = Workbook.createWorkbook(destFile, rwb);

			WritableSheet ws = wwb.getSheet(0);

			for (int i = 0; i < dataList.getRows().size(); i++) {
				DataRow row = dataList.getRows().get(i);
				ArrayList<DataItem> dataItems = row.getDataItems();
				for (int k = 0; k < dataItems.size(); k++) {
					DataItem item = dataItems.get(k);
					Label itemLabel = new Label(k, i + modelStart, item
							.getValue());
					ws.addCell(itemLabel);
				}
			}

			wwb.write();
			wwb.close();
			rwb.close();

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

	public static DataList readExcel(String filePath) {
		DataList list = new DataList();
		try {
			FileInputStream in = new FileInputStream(filePath);
			Workbook wb = Workbook.getWorkbook(in);
			Sheet sheet = wb.getSheet(0);
			for (int i = 0; i < sheet.getRows(); i++) {
				DataRow dataRow = new DataRow();
				list.add(dataRow);
				Cell[] cells = sheet.getRow(i);
				for (int k = 0; k < cells.length; k++) {
					DataItem item = new DataItem(cells[k].getContents());
					dataRow.add(item);
				}
			}
		} catch (Exception e) {
			e.printStackTrace();
		}

		return list;

	}

	public static void main(String[] args) {

	}

}

  

时间: 2024-10-12 00:08:51

Java生成Excel表格的代码的相关文章

java生成excel表格和pdf并实现下载弹出框

今天在pdf和excel中都实现了在浏览器弹出下载框 将之前在网上查找的生成excel表格代码稍微修改下: public class CreateSimpleExcelToDisk { /** * @功能:手工构建一个简单格式的Excel */ private static List<News> getNews() throws Exception { List<News> data = new ArrayList<News>(); NewsDao dao = new

【PHP】PHP使用PHPExcel生成Excel表格文件(附带随机生成英文名函数)

[PHP]PHP使用PHPExcel生成Excel表格文件(附带随机生成英文名函数) 前言 由于业务需要,我们需要从业务中汇总数据,并生成Excel文件. 思路是这样的 PHP要导出Excel表格文件->找一个好用的第三方库吧->在Composer的Packages里找一个吧->PHPExcel这么多收藏,就它了! PHPExcel 概述 PHPExcel is a library written in pure PHP and providing a set of classes th

Java读取excel表格

Java读取excel表格 一般都是用poi技术去读取excel表格的,但是这个技术又是什么呢 什么是Apache POI? Apache POI是一种流行的API,它允许程序员使用Java程序创建,修改和显示MS Office文件.这由Apache软件基金会开发使用Java分布式设计或修改Microsoft Office文件的开源库.它包含类和方法对用户输入数据或文件到MS Office文档进行解码. Apache POI Apache POI是Apache软件基金会提供的100%开源库.大多

nodejs实现,每天定时自动读取数据库数据-生成excel表格-发送给老板邮箱(promise版)

async版:http://blog.csdn.net/zzwwjjdj1/article/details/52129192 写这个版本主要是,promise比较好用,而且,现在已经是nodejs的内置对象了,无须再引用第三方库 -- 需要的工具 数据库    mysql 连接数据库模块 mysql  基本封装: http://blog.csdn.net/zzwwjjdj1/article/details/51991348 自动运行模块   node-schedule 基本使用 : http:/

Java -&gt; 把Excel表格中的数据写入数据库与从数据库中读出到本地 (未完善)

写入: private void insertFile(HttpServletRequest request, HttpServletResponse response) throws IOException { String path_member = request.getParameter("path_member"); List list = this.insert("f:/tmp001.xls", "gs_sale_members");

java生成excel文件工具类实例

import java.io.File; import java.io.IOException; import jxl.Workbook; import jxl.write.Label; import jxl.write.WritableSheet; import jxl.write.WritableWorkbook; import jxl.write.WriteException; import jxl.write.biff.RowsExceededException; import org.

java生成excel和读取excel例子

关于使用java的操作excel的方法有很多种,我的http://blog.csdn.net/qq_20545159/article/details/45132041价绍过,下面是使用jxl生成xls格式的excel简单的代码. 使用jxl生成excel文件首先必须将jxl.jar的包加到你的项目的路径下. package com.silence.excel; import java.io.File; import jxl.Workbook; import jxl.write.Label; im

java对excel表格的上传和下载处理

Excel表格文件的上传和下载,java中涉及到文件肯定会有io流的知识. 而excel文件就要涉及到poi技术,而excel的版本包括:2003-2007和2010两个版本, 即excel的后缀名为:xls和xlsx. 这里我是按照正规的项目流程做的案例,所以可能会比网上的一些Demo复杂一些.不过文件的上传和下载基本都是一套固定的流程,只是每个人的实现方式不太相同. 数据库我用的是MySql. 下面是我的项目目录: 按照正常的项目做了分层处理,文件上传的业务我放到了service处理,而文件

JavaWeb开发中采用FreeMarker生成Excel表格

最近做了一个需求,要求导出一个采购合同的Excel表格,这个表格样式比较多.由于是合同,这个Excel表格里面有好多格式要求,比如结尾处签字那部分就有格式要求.这里介绍种采用FreeMarker的api来生成Excel文件的方案 一.方案的对比 针对这个需求我想了2个方案,介绍如下 方案一:先做一个合同的表格模板,然后把变量都填充成类似EL表达式的样子.然后通过poi 相关类把模板读到内存中,把里面的变量的值替换,然后生成下载文件. 方案二:先做一个合同的表格模板,然后转换成xml文件,然后再改