`
lbyzx123
  • 浏览: 479606 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

java导出txt和excel

    博客分类:
  • java
 
阅读更多

1、java导出txt通用类

package com.anxiesoft.report;

import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import com.anxiesoft.util.DateUtil;

/**
 * 导出txt通用类
 * 
 * @author Administrator
 * 
 */
public class ExportTxtUtil {
	private static Map<String, String> attrMap;
	static {
		attrMap = new HashMap<String, String>();
		attrMap.put("betweenProperty", "\t\t");
		attrMap.put("betweenRecord", "\r\n");
	}
	private static List<String> properties;
	private static String[] title;

	public static List<String> getProperties() {
		if (properties == null)
			return new ArrayList<String>();
		return properties;
	}

	public static void setProperties(List<String> properties) {
		ExportTxtUtil.properties = properties;
	}

	public static String[] getTitle() {
		return title;
	}

	public static void setTitle(String[] title) {
		ExportTxtUtil.title = title;
	}

	public static void transferModelToTxt(File file, List<Object> list) {
		// 获取属性间的分隔符
		String betweenPropery = (String) attrMap.get("betweenProperty");
		// 获取记录间的分隔符
		String betweenRecord = attrMap.get("betweenRecord").toString();
		BufferedOutputStream buff = null;
		FileOutputStream outSTr = null;
		try {
			outSTr = new FileOutputStream(file);
			buff = new BufferedOutputStream(outSTr);
			StringBuffer sb = new StringBuffer();
			for (int i = 0; i < title.length; i++) {
				if (i == title.length - 1) {
					sb.append(title[i] + betweenRecord);
				} else {
					sb.append(title[i] + betweenPropery);
				}
			}
			for (Object obj : list) {
				Class<?> clz = obj.getClass();
				Field[] fields = clz.getDeclaredFields();
				if (properties != null && properties.size() > 0) {
					for (String property : properties) {
						for (int i = 0; i < fields.length; i++) {
							Field field = fields[i];
							String fieldName = field.getName();
							if (property.equals(fieldName)) {
								// 把属性名的第一个字母变成大写
								String firstLetter = fieldName.substring(0, 1)
										.toUpperCase();
								String getMethodName = "get" + firstLetter
										+ fieldName.substring(1);
								// 获得和属性对应的getXXX()方法
								Method getMethod = clz.getMethod(getMethodName,
										new Class[] {});
								// 调用原对象的getXXX()方法
								Object value = getMethod.invoke(obj,
										new Object[] {});
								if (value instanceof Date) {
									String val = DateUtil
											.convertDate2String((Date) value,
													"yyyy-MM-dd HH:mm:ss");
									sb.append(val + betweenPropery);
								}
								// 把为null的用""代替
								if (value == null) {
									value = "";
								}
								if (properties.size() == i) {
									sb.append(value);
								} else {
									sb.append(value + betweenPropery);
								}
								break;
							}
						}
					}
				}
				sb.substring(0, sb.length() - 2);
				sb.append(betweenRecord);

			}
			buff.write(sb.toString().getBytes("UTF-8"));
			buff.flush();
			buff.close();
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			try {
				buff.close();
				outSTr.close();
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
	}
}

 2、java导出excel通用类

import java.io.File;
import java.io.IOException;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.List;
import jxl.Workbook;
import jxl.format.Border;
import jxl.format.BorderLineStyle;
import jxl.write.Label;
import jxl.write.NumberFormat;
import jxl.write.NumberFormats;
import jxl.write.WritableCellFormat;
import jxl.write.WritableSheet;
import jxl.write.WritableWorkbook;
import jxl.write.WriteException;
import jxl.write.biff.RowsExceededException;

/**
 * 导出Excel通用类
 * 
 * 请先设置表头和属性列表,然后调用transferModelToExcel
 * 
 * @author Administrator
 * 
 */
public class ExportExcelUtil {
	private static NumberFormat nf = null;
	private static WritableCellFormat wcfN = null;
	private static WritableCellFormat wcfNText = null;
	private static String[] title;
	private static List<String> properties;

	public static List<String> getProperties() {
		if (properties == null)
			return new ArrayList<String>();
		return properties;
	}

	public static void setProperties(List<String> properties) {
		ExportExcelUtil.properties = properties;
	}

	public static String[] getTitle() {
		return title;
	}

	public static void setTitle(String[] title) {
		ExportExcelUtil.title = title;
	}

	/**
	 * 格式话数字
	 * 
	 * @return
	 */
	private static NumberFormat getNf() {
		if (nf == null) {
			return nf = new NumberFormat("#.##");
		} else {
			return nf;
		}
	}

	/**
	 * 数字格式化样式
	 * 
	 * @return
	 * @throws WriteException
	 */
	private static WritableCellFormat getWcfN() throws WriteException {
		if (wcfN == null) {
			wcfN = new WritableCellFormat(getNf());
			wcfN.setBorder(Border.ALL, BorderLineStyle.THIN);
			return wcfN;
		} else {
			return wcfN;
		}
	}

	/**
	 * 文本格式化样式
	 * 
	 * @return
	 * @throws WriteException
	 */
	private static WritableCellFormat getWcfNText() throws WriteException {
		if (wcfNText == null) {
			wcfNText = new WritableCellFormat(NumberFormats.TEXT);
			wcfNText.setBorder(Border.ALL, BorderLineStyle.THIN);
			return wcfNText;
		} else {
			return wcfNText;
		}
	}

	/**
	 * 填充第i个Sheet
	 * 
	 * @param i
	 * @param objects
	 * @param ws
	 * @throws WriteException
	 * @throws RowsExceededException
	 */
	private static void fillSheet(int i, Object[][] objects, WritableSheet ws)
			throws WriteException, RowsExceededException {
		for (int j = 0; j < objects.length; j++) {
			for (int j2 = 0; j2 < objects[j].length; j2++) {
				String temp = "";
				if (objects[j][j2] != null)
					temp = objects[j][j2].toString();
				if (objects[j][j2] instanceof Double) {
					jxl.write.Number labelNF = new jxl.write.Number(j2, j,
							Double.parseDouble(temp), getWcfN());
					ws.addCell(labelNF);
				} else {
					Label labelC2 = new Label(j2, j, temp, getWcfNText());
					ws.addCell(labelC2);
				}
			}
		}
	}

	/**
	 * 计算有几个工作簿,加上表头是100000001行
	 * 
	 * @param title
	 *            该Excel的表头
	 * @param data
	 *            需要保存的数据
	 * @return <Object[][]保存一个工作簿的数据
	 */
	private static List<Object[][]> countSheet(String[] heading, Object[][] data) {
		List<Object[][]> list = new ArrayList<Object[][]>();
		int SheetCount = data.length / 100000000 + 1;
		if (data.length == 0) {
			Object[][] newStr = new Object[1][heading.length];
			newStr[0] = heading;
			list.add(newStr);
		} else {
			int oi = 0;
			for (int j = 0; j < SheetCount; j++) {
				Object[][] newStr = null;
				if (j + 1 == SheetCount) {
					newStr = new Object[data.length % 100000000 + 1][heading.length];
				} else {
					newStr = new Object[100000001][heading.length];
				}
				newStr[0] = heading;
				for (int i = 1; i < 100000001; i++) {
					newStr[i] = data[oi];
					oi++;
					if (oi == data.length)
						break;
				}
				list.add(newStr);
			}
		}
		return list;
	}

	/**
	 * 设置首行冻结
	 * 
	 * @param ws
	 */
	private static void setIndex(WritableSheet ws, int index) {
		ws.getSettings().setVerticalFreeze(index);
	}

	private static Object[][] list2ObjectArray(List list) {
		Object[][] result = new Object[list.size()][title.length];
		try {
			if (list != null && list.size() > 0) {
				for (int i = 0; i < list.size(); i++) {
					Object obj = list.get(i);
					Class<?> clz = obj.getClass();
					Field[] fields = clz.getDeclaredFields();
					if (properties != null && properties.size() > 0) {
						for (int j = 0; j < properties.size(); j++) {
							String property = (String) properties.get(j);
							for (int k = 0; k < fields.length; k++) {
								Field field = fields[k];
								String fieldName = field.getName();
								if (fieldName.equals(property)) {
									// 把属性名的第一个字母变成大写
									String firstLetter = fieldName.substring(0,
											1).toUpperCase();
									String getMethodName = "get" + firstLetter
											+ fieldName.substring(1);
									// 获得和属性对应的getXXX()方法
									Method getMethod = clz.getMethod(
											getMethodName, new Class[] {});
									// 调用原对象的getXXX()方法
									Object value = getMethod.invoke(obj,
											new Object[] {});
									result[i][j] = value;
									break;
								}
							}
						}
					}
				}
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
		return result;
	}

	public static void transferModelToExcel(File file, List<Object> list)
			throws IOException, RowsExceededException, WriteException {
		List<Object[][]> dataList = countSheet(title, list2ObjectArray(list));
		WritableWorkbook wwb = Workbook.createWorkbook(file);
		for (int i = 0; i < dataList.size(); i++) {
			Object[][] objects = dataList.get(i);
			WritableSheet ws = wwb.createSheet("Sheet" + (i + 1), i);
			setIndex(ws, 1);
			fillSheet(i, objects, ws);
		}
		wwb.write();
		wwb.close();
	}

}

 

 

分享到:
评论

相关推荐

    java导出TXT和Excel文件

    导出Excel文件利用apache的poi第三方包,可在阿帕奇官网下载(最新版本为3.8,支持office2010)。解压文件后,只需要把项目导入到eclipse,再将hibernate.cfg.xml里连接Oracle的URL和用户名、密码更改下。参考entity...

    java导出图片到excel

    在Java编程中,导出数据到Excel是一种常见的需求,尤其当需要将图片与文本一起展示在电子表格中时。这个任务通常涉及到使用第三方库来处理Excel文件,因为Java标准库并未提供直接支持图像到Excel的功能。以下是一些...

    java poi导出图片到excel示例代码

    使用Java POI,可以将图片导出到Excel中,这需要使用到Drawings类和Picture类。首先,需要创建一个Drawings对象,然后使用Drawings对象的addPicture方法将图片添加到Excel中。 3. 使用Java POI下载Excel文件 在示例...

    java 导出excel,带图片的Excel导出

    在Java编程中,导出Excel是一项常见的任务,特别是在数据分析、报表生成或数据交换等领域。而带图片的Excel导出则增加了复杂性,因为涉及到二进制数据的处理和Excel特定格式的支持。以下是一些关于如何在Java中实现...

    Java导出数据到Excel文件中(支持多表头)

    总结来说,Java导出数据到Excel文件支持多级表头的过程涉及以下步骤: 1. 引入Apache POI库。 2. 创建`SXSSFWorkbook`和`SXSSFSheet`对象。 3. 设计和创建多级表头,一级表头在前,二级表头在其下。 4. 从数据库查询...

    java导出到excel的工具类

    在Java编程中,导出数据到Excel是一种常见的需求,特别是在数据分析、报表生成或者数据交换的场景下。Apache POI是一个强大的库,专为处理Microsoft Office格式的文件,尤其是Excel(.xlsx和.xls)文件。本篇文章将...

    java导出excel树结构工具类

    该工具类实现java导出树形结构的方法,并未采用excel分组功能实现,而是根据树节点显示层级设置excel样式。针对easyUi,treeGrid开发的导出excel功能。方法简便实用、性强、通俗易懂。项目中亲测,no problem。

    Java导出数据到Excel文件中(支持多页签)

    Java导出数据到Excel文件中,支持多页签形式,如通过Java导出一个名为“各部门人员列表”,然后在文件中有三个页签,分别为“研发部”、“综合部”、“财务部”。其中这三个页签里面的数据就是通过Java导出到Excel...

    java导出word、excel、pdf、txt文件,同时兼容office2003和office2007

    2. **导出Excel文档**: 使用XSSFWorkbook类处理.xlsx文件,而HSSFWorkbook处理.xls文件。创建工作簿、工作表、行和单元格,然后设置值和格式。例如,创建一个简单的Excel表格: ```java XSSFWorkbook workbook ...

    java导出excel复杂表头

    本示例涉及的主题是“java导出excel复杂表头”,这意味着我们要处理的不是简单的单级表头,而是包含多级或者多层次结构的表头。在描述中提到这是一个可以直接运行的Java工程,但需要进一步改造为Web下载服务。 首先...

    java导出复杂Excel内容数据动态循环

    java导出复杂Excel内容数据动态循环

    java复杂模板excel导出例子

    在Java编程中,导出复杂的Excel模板是一项常见的需求,尤其在数据分析、报表生成或数据交换等场景中。本文将深入探讨如何使用Java实现这一功能,包括选用的库、步骤、以及处理复杂模板的关键技巧。 首先,Java中最...

    java 导出数据到excel 之 WritableWorkbook

    java 导出数据到excel 之 WritableWorkbook

    java操作数据库 导出excel

    Java操作数据库并导出Excel是一项常见的任务,尤其在数据分析、报表生成或数据迁移等领域。这里主要涉及两个核心技术:Java数据库连接(JDBC)用于与数据库交互,以及Apache POI库用于处理Excel文件。 首先,Java...

    java导出excel超过65536条记录出错

    java导出excel超过65536条记录出错 java导出excel超过65536条记录出错 java导出excel超过65536条记录出错 java导出excel超过65536条记录出错

    java导出数据到Excel

    在Java开发中,将数据导出到Excel是一种常见的需求,特别是在数据分析、报表生成或数据交换等场景。Excel作为Microsoft Office套件的一部分,以其强大的表格处理功能和良好的兼容性深受用户喜爱。下面,我们将深入...

    java Excel导出导入

    java Excel 导出 导入java Excel 导出 导入java Excel 导出 导入java Excel 导出 导入java Excel 导出 导入java Excel 导出 导入java Excel 导出 导入java Excel 导出 导入

    java导出excel POI jar包

    Java导出Excel是Java开发中常见的需求,尤其是在数据处理和报表生成方面。Apache POI库是Java领域中广泛使用的工具,它允许开发者读写Microsoft Office格式的文件,包括Excel(.xlsx和.xls)。本篇文章将深入讲解...

    excel批量导出.java

    java实现excel批量导出功能的所有代买实现逻辑,及源码。适合初级、中级、高级程序员,用户一看就明白

    java 导出excel(方法二)

    在Java编程中,导出Excel数据是常见的任务,特别是在数据处理和报表生成的场景下。本教程将聚焦于使用jxl库来实现这一功能。jxl是一个流行且强大的Java库,能够读写Microsoft Excel文件。这里我们将介绍如何利用jxl...

Global site tag (gtag.js) - Google Analytics