`
tntxia
  • 浏览: 1507229 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

Java生成Excel表格的代码

阅读更多

题记:

 

这是我到宇信易诚的第二个年头,我被调到了数据部门,现在的我现在无休止的和数据与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) {

	}

}

 

分享到:
评论

相关推荐

    java代码生成excel表并下载

    在Java编程领域,生成Excel表格是一项常见的需求,尤其在数据导出、报表生成或数据分析时。本主题聚焦于“java代码生成excel表并下载”,这是一个关键的后端功能,允许用户自定义表格内容并选择下载路径。下面我们将...

    Java生成excel表格设置公式并填充数据

    Java编程调用PageOffice实现从空白的excel文件动态生成excel表格,设置公式并填充数据。 集成PageOffice不但能够实现在线编辑、保存真正的Office文档,而且还可以轻松实现Word、Excel文档的动态数据填充、格式控制和...

    java生成excel图表

    "Java生成Excel图表" Java生成Excel图表是使用Java语言来生成Excel图表的过程。Excel图表是指使用Excel软件生成的图表,例如柱状图、折线图、饼状图等。Java语言可以使用各种库和框架来生成Excel图表,例如...

    java生成excel表格

    `java生成excel表格.zip`和`java生成excel文件表格`可能是包含其他示例代码或已生成的Excel文件。你可以解压这些文件,查看和运行其中的代码,以了解更多的用法和功能,例如如何读取Excel数据,如何设置单元格格式,...

    java生成excel表格需要的3个jar包

    在"java生成excel表格需要的3个jar包"中,提到的三个关键文件是: 1. poi-2.5.1-final-20040804.jar:这是Apache POI的核心库,包含了处理Excel文件的主要类和接口。在这个版本中,你可以找到用于创建、读取和修改...

    生成Excel表格代码

    用于将从数据库输出的数据输出到Excel文件的代码,生成Excel表格文件的类

    java生成excel

    Java 生成 Excel 文件并下载 Java 生成 Excel 文件是指使用 Java 语言生成 Excel 文件的过程。Excel 文件是一种常用的电子表格文件格式,广泛应用于数据存储和分析。在 Java 中,可以使用 Apache POI 库来生成 ...

    Java操作Excel表格

    当我们谈论“Java操作Excel表格”时,通常是指使用Java来读取、写入或处理Microsoft Excel文件,这在数据分析、报表生成或者数据交换等场景中非常常见。本主题将围绕Java如何与Excel交互进行深入探讨。 首先,Java...

    java绝对生成excel报表

    总结,Java生成Excel报表的过程涉及到文件I/O操作、使用第三方库(如JExcelApi)、创建和操作工作簿和工作表对象、设置单元格内容和样式等技术。通过熟练掌握这些知识点,你就能高效地在Java程序中生成各种复杂的...

    java生成excel报表

    在压缩包文件“GreateExcel”中,可能包含了示例代码或教程,用于演示如何使用Apache POI生成Excel报表。通过阅读和学习这个文件,开发者可以更好地理解和掌握使用Apache POI创建Excel报表的具体方法和技巧,提升...

    java的poi生成excel图表demo

    通过这个“java的poi生成excel图表demo”,我们可以学习如何利用POI创建动态的、数据驱动的Excel曲线图,进一步提升数据的可视性和理解性。这个压缩包中的“EexcelChart”可能是示例代码、测试数据或生成的Excel文件...

    java 生成Excel,可根据模板格式生成 Excel打印专用 报表

    在Java编程环境中,生成Excel报表是一项常见的任务,特别是在数据分析、数据导出或报表制作的场景中...以上就是使用Java生成基于模板的Excel报表的基本步骤和知识点,实际开发中可能还需要根据业务需求进行调整和优化。

    POI导出Excel表格

    在这个“POI导出Excel表格”的实例中,我们将深入探讨如何利用Apache POI进行Excel文件的导入与导出操作。 首先,我们需要在项目中集成Apache POI库。如果你使用的是Maven,可以在pom.xml文件中添加以下依赖: ```...

    java代码生成Excel

    使用java代码生成Excel表格。简单易懂。下载之后修改获取数据库地址之后就可以直接使用

    Java 原生生成表格图片

    在IT行业中,尤其是在Java开发领域,有时候我们需要生成各种类型的输出,比如表格图片。这在处理数据可视化、报表生成、邮件附件或彩信内容时尤其有用。`Java 原生生成表格图片`这个主题就是关于如何利用Java编程...

    java excel中表格导成png图片

    在Java编程环境中,将Excel表格转换为PNG图片是一项常见的需求,尤其在数据可视化或报告生成时。本篇文章将深入探讨如何使用Java实现这一功能,主要涉及Apache POI库的运用和其他相关技术。 Apache POI是一个强大的...

    java实现生成Excel(默认.xls,可自己修改文件类型)文件程序

    java实现生成Excel(.xls)文件程序,并封装了从浏览器下载的方法,压缩包内含有使用说明,希望大神们指教,互相学习

    java导出excel的jar包及例子代码

    在这个示例中,`exportExcel`方法接收一个二维字符串数组`data`,表示Excel表格的数据,以及一个`outputPath`,用于指定生成的Excel文件路径。我们首先创建一个`XSSFWorkbook`实例,它是用来处理.xlsx格式Excel文件...

    poi生成excel表格

    在这个场景中,我们关注的是如何使用POI库在Java中生成Excel表格。以下是对标题、描述和标签所涉及知识点的详细说明: 1. **Apache POI 简介** Apache POI 是Java平台上的一个库,它允许开发者读写Microsoft ...

    java 生成 excel 包含jar包

    Java生成Excel是编程中常见的需求,特别是在数据处理和报表生成的场景下。Java与Excel的交互通常通过第三方库实现,例如Apache POI、JExcelAPI等。本示例中提到的"java 生成 excel 包含jar包",指的是一个包含相关...

Global site tag (gtag.js) - Google Analytics