`
as11051105
  • 浏览: 60124 次
  • 性别: Icon_minigender_1
  • 来自: 贵阳
社区版块
存档分类
最新评论

WEB中以cvs格式导出数据

阅读更多
实例为SSH项目,县公司导出售后报表的DEMO,先要导入jxl.jar:
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.lang.reflect.Field;
import java.util.List;

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

/**
 * 导出文件工具类
 */
public class ExportUtil {

	/**
	 * 创建TXT或者CSV文件
	 * 
	 * @param list 查询出的结果
	 * @param head 表头
	 * @param proerty 需要导出的列(与head对应)
	 * @param fileName 文件名
	 * @return
	 * @throws Exception
	 */
	
	public static File createTxtFile(List list, List<String> head, List<String> proerty, String fileName) throws Exception {
		File file = new File(fileName);
		BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream(file));

		StringBuilder sb = new StringBuilder();
		for (String str : head) {
			sb.append("\t" + str + ",");
		}
		sb.append("\r\n");
		Long row = 0L;
		for (Object obj : list) {
			Class className = obj.getClass();
			// 反射所有字段
			@SuppressWarnings("unused")
			Field[] fields = className.getDeclaredFields();

			for (String str : proerty) {
				// 若该字段是需要导出的字段则写入Excel
				Object o = ReflectUtils.getProertyValue(obj, str);
				String value = o == null ? "" : o.toString();
				// 设置cell的值
				sb.append("\t" + value + ",");
			}
			sb.append("\r\n");

			if (row % 1000 == 0) {
				out.write(sb.toString().getBytes(LX100Constant.CHAR_SET));
				out.flush();
				sb = new StringBuilder();
			}
		}
		out.write(sb.toString().getBytes(LX100Constant.CHAR_SET));
		out.flush();
		out.close();
		return file;
	}

	/**
	 * 创建excel文件
	 * 
	 * @param list
	 * @param head
	 * @param proerty
	 * @param fileName
	 * @return
	 * @throws Exception
	 */
	public static File createExcel(List list, List<String> head, List<String> proerty, String fileName) throws Exception {

		// 创建输出文件
		File file = new File(fileName);
		int line = 0;
		int row = 0;
		int sheetNum = 1;
		// 表头格式
		WritableCellFormat wcfF = new jxl.write.WritableCellFormat();
		wcfF.setAlignment(jxl.format.Alignment.CENTRE);
		wcfF.setVerticalAlignment(jxl.format.VerticalAlignment.CENTRE);
		@SuppressWarnings("unused")
		Colour olour;
		wcfF.setBackground(Colour.LIGHT_ORANGE);
		WritableWorkbook wwb = Workbook.createWorkbook(file);
		WritableSheet ws = wwb.createSheet("第" + sheetNum + "页", sheetNum);
		// 设置冻结首行

		ws.getSettings().setVerticalFreeze(1);
		ws.getSettings().setFitWidth(100);
		// 数据格式
		WritableCellFormat dateDcfF = new jxl.write.WritableCellFormat();
		dateDcfF.setWrap(true);
		dateDcfF.setAlignment(jxl.format.Alignment.CENTRE);
		dateDcfF.setVerticalAlignment(jxl.format.VerticalAlignment.CENTRE);

		// 控制列宽
		ws.setColumnView(0, 10);
		ws.setColumnView(1, 18);
		ws.setColumnView(2, 18);
		ws.setColumnView(3, 18);
		ws.setColumnView(4, 18);
		ws.setColumnView(5, 25);
		ws.setColumnView(6, 18);
		ws.setColumnView(7, 18);
		ws.setColumnView(8, 18);
		ws.setColumnView(9, 18);
		ws.setColumnView(10, 18);
		ws.setColumnView(11, 18);
		ws.setColumnView(12, 18);
		ws.setColumnView(13, 18);
		ws.setColumnView(14, 18);
		ws.setColumnView(15, 18);

		sheetNum++;
		// 写入表头
		for (String str : head) {
			Label label = new Label(line, 0, str, wcfF);
			ws.addCell(label);
			line++;
		}
		row++;
		// 写入数据
		for (Object obj : list) {
			line = 0;
			Class className = obj.getClass();
			// 反射所有字段
			Field[] fields = className.getDeclaredFields();

			for (String str : proerty) {
				for (Field field : fields) {
					// 若该字段是需要导出的字段则写入Excel
					if (str.equals(field.getName())) {
						// 修改相应filed的权限
						boolean accessFlag = field.isAccessible();
						field.setAccessible(true);

						// 读取对象中相应的属性的值
						String value = field.get(obj).toString();
						if (str.equals("commendTime")) {
							value = field.get(obj).toString().substring(0, 19);
						}
						// 设置cell的值
						Label label = new Label(line, row, value, dateDcfF);
						ws.addCell(label);

						// 恢复相应field的权限
						field.setAccessible(accessFlag);
						line++;
					}
				}
			}
			row++;
			// 行数超过10000行是数据放入下一个sheet
			if (row % 10000 == 0) {
				// 设置标题格式
				line = 0;
				row = 0;
				ws = wwb.createSheet("第" + sheetNum + "页", sheetNum);
				// 设置冻结首行
				ws.getSettings().setVerticalFreeze(1);
				// 控制列宽
				ws.setColumnView(0, 10);
				ws.setColumnView(1, 18);
				ws.setColumnView(2, 18);
				ws.setColumnView(3, 18);
				ws.setColumnView(4, 18);
				sheetNum++;
				// 再次写入表头
				for (String str : head) {
					Label label = new Label(line, 0, str, wcfF);
					ws.addCell(label);
					line++;
				}
				row++;
			}
		}
		// 写入数据并关闭文件
		wwb.write();
		wwb.close();

		return file;
	}

}

POJO实体类

/**
 * 售后信息
 */
public class FreeCallInfo {
	//商品ID
	private Long goodsId;
	// 机型
	private String goodsName;
	//县公司Id
	private Long cityId;
	// 县公司名称
	private String cityName;
	// 分公司Id
	private Long countyId;
	/ 分公司名称
	private String countyName;
	// 数量
	private Long maintainNumber;
	// 修复方式
	private String maintainType;
	//维修方式
	private Long auditIsMaintain;
	//get、set
}


查找数据的方法:
public List<FreeCallInfo> query(Long cityId, Long countyId, Long mainType, String keyWord, String startTime, String endTime) {
		Object[] objs = null;
	    StringBuilder sb = new StringBuilder(
	        " select gi.goods_name as goodsName, " +
	        "case" +
	         " when fm.audit_is_machine = 0 then" +
	         "  '维修'" +
	         " when fm.audit_is_machine = 1 then " +
	         "  '换机'" +
	         " when fm.audit_is_machine = 2 then " +
	         "  '丢失'" +
	       " end as maintainType," +
			        "count(fm.goods_id) as maintainNumber" +
			  " from erp_freecall_monitor fm" +
			  " left join erp_goods_info gi" +
			  "   on fm.goods_id = gi.id" +
			  " left join erp_organisation oo" +
			  "   on oo.id = fm.org_id" +
			  " left join erp_dim_county dc" +
			  "   on oo.county_id = dc.county_id" +
			  " left join erp_dim_city cc" +
			  "   on cc.city_id = dc.city_id " +
			 " where fm.record_status = 2 ");
		if (mainType == 3) {
			objs = new Object[] { cityId, countyId, keyWord, startTime, endTime };
			sb.append("and oo.city_id = ? and oo.county_id = ? and gi.goods_name like ? ");
		} else {
			objs = new Object[] { cityId, countyId, mainType, keyWord, startTime, endTime };
			sb.append("and oo.city_id = ? and oo.county_id = ? and fm.audit_is_machine = ? and gi.goods_name like ? ");
		}
		sb.append("and to_char(fm.maintain_time, 'yyyy-MM-dd') >= ? " +
		  "and to_char(fm.maintain_time, 'yyyy-MM-dd') <= ? " );
	    sb.append("group by gi.goods_name, fm.audit_is_machine");
	    List list = (List) this.getJdbcTemplate().query(sb.toString(), objs,new RowMapperResultSetExtractor(new RowMapper() {
	      
	      public Object mapRow(ResultSet res, int arg1) throws SQLException {
	        FreeCallInfo fc = new FreeCallInfo();
	        fc.setGoodsName(res.getString("goodsName"));
	        fc.setMaintainType(res.getString("maintainType"));
	        fc.setMaintainNumber(res.getLong("maintainNumber"));
	        return fc;
	      }
	    }));
	    return list;
	}

页面的导出按钮:
	<input type="button" value="导出" <s:if test="pagination.total == 0">disabled="disabled"</s:if>
										onclick="window.location='<%=basePath%>afterSalesAction!countyExportMaintainInfo.action?mainType=${mainType}&keyWord=${keyWord}&startTime=${startTime}&endTime=${endTime}'" />


导出cvs的action:
/**
	 * 县公司导出售后维修报表
	 */
	public String countyExportMaintainInfo() {
		try {
			freeCallInfolList = freeCallMonitorService.query(user.getOrganisation().getCityId(), user.getOrganisation().getCountyId(), Long.valueOf(mainType), keyWord, startTime, endTime);
			String path = this.getServletContext().getRealPath("/");
			fileName = new String("县公司售后维修报表统计.CSV".getBytes(LX100Constant.CHAR_SET), "ISO8859_1");
			tmpFileName = "temp.csv";
			List<String> head = new ArrayList<String>();
			head.add("机型");
			head.add("维修方式");
			head.add("数量");
			List<String> proerty = new ArrayList<String>();
			proerty.add("goodsName");
			proerty.add("maintainType");
			proerty.add("maintainNumber");
			File file = ExportUtil.createTxtFile(freeCallInfolList, head, proerty, path + tmpFileName);
			inputStream = new FileInputStream(file);
			log.info("用户导出县公司售后维修报表成功");
		} catch (Exception e) {
			log.error("用户导出县公司售后维修报表异常,创建文件异常{}", new Object[] { e });
		}
		return "export_success";
	}

最后还要在sturts.xml中配置:
	<result name="export_success" type="stream">
	      		<param name="inputName">inputStream</param>
	            <param name="contentType">application/octet-stream</param>
				<param name="contentDisposition">attachment;filename="${fileName}"</param>
				<param name="bufferSize">500000</param>
	     	</result>

分享到:
评论

相关推荐

    php导出cvs格式的表格

    当需要从Web应用,如PHP驱动的网站,导出数据时,CSV是理想的选择,特别是对于账单、订单等大量结构化数据的批量导出。下面我们将深入探讨如何使用PHP实现CSV格式的数据导出。 1. CSV文件格式介绍: CSV文件由行...

    java实现csv导出千万级数据实例

    在IT行业中,处理大量数据是常见的挑战之一,尤其是在数据导出方面。本实例聚焦于“java实现csv导出千万级数据实例”,旨在提供一个高效、稳定的解决方案,避免因数据量过大而导致的性能问题,如Java中的栈溢出...

    PHP Excel导入导出 CSV导入导出.zip

    2. **CSV(Comma Separated Values)格式**:CSV是一种简单但非常实用的数据存储格式,以逗号分隔每一列数据。在PHP中,可以使用fgetcsv()和fputcsv()函数轻松地进行CSV文件的读写操作。对于小规模数据,CSV文件因其...

    php导入cvs格式的表格

    而CSV(Comma Separated Values)格式则是一种通用的数据交换格式,因其简洁和易读性,常用于导入和导出表格数据。本篇将详细介绍如何使用PHP处理CSV格式的表格数据并将其导入数据库,以满足大批量数据操作的需求。 ...

    PHP+Mysql导入或导出Excel文件

    3. **数据预处理**:可能需要对读取的数据进行清洗、格式转换等操作,以符合MySQL数据库中的数据类型和格式。 4. **连接MySQL数据库**:使用PHP的PDO或mysqli扩展,建立与MySQL数据库的连接。记得设置适当的连接...

    thinkphp下 导入导出csv文件

    在IT行业中,CSV(Comma Separated Values)文件是一种广泛使用的数据交换格式,因其简单、通用而备受青睐。ThinkPHP是中国流行的PHP框架之一,它提供了一系列功能强大的工具,包括处理CSV文件的导入与导出。在...

    Java避免UTF-8的csv文件打开中文出现乱码的方法

    csv文件是 comma separated values 的缩写,常用于数据交换和导入导出操作。然而,在Java中读取和写入csv文件时,中文字符如果不正确地处理,可能会出现乱码的情况。下面我们将详细介绍Java避免UTF-8的csv文件打开...

    java操作office和pdf文件(四)页面列表导出cvs_excel、pdf报表.pdf

    在Java编程中,处理Office文档和PDF文件是常见的任务,特别是在报表生成和数据导出的场景下。本篇文章主要介绍了如何使用Java来操作Office文件(如Excel)和PDF文件,以便将页面列表导出为CSV、Excel和PDF格式的报表...

    高性能网页JavaScriptCanvas电子表格系统源码.zip

    冻结单元格单元格函数行高和列宽设置复制, 剪切, 粘贴 自动填充插入行, 列 (处理中)删除行, 列 )隐藏行, 列支持多个sheet表打印数据验证导出XLSX导入XLSX导出CVS导入CVS中)导入图片 )数据筛选,高性能 Web ...

    CVS History-开源

    4. **导出功能**:能够将搜索结果导出为各种格式,如CSV或PDF,方便进一步分析或报告。 5. **社区支持**:得益于开源社区,用户可以获取及时的技术支持和更新,同时也可以贡献自己的改进和新功能。 在维护和升级...

    关于log4j,ejb,cvs,maven,mybatis

    在现代软件开发中,Web Service是一种允许不同系统之间交换数据和服务的方式,它基于SOAP(Simple Object Access Protocol)进行通信,SOAP是基于XML的协议,确保了跨平台和跨语言的兼容性。WSDL(Web Services ...

    Android传感器测试,包括加速度、方向等数据,保存到数据库.zip

    Android传感器测试,包括加速度、方向等数据,保存到数据库,可导出到Excel以便分析研究 软件开发设计:PHP、QT、应用软件开发、系统软件开发、移动应用开发、网站开发C++、Java、python、web、C#等语言的项目开发与...

    第05篇:常见的Web源码泄漏及其利用1

    修复措施是删除Web目录中的`.svn`文件夹,并规范使用导出功能。 3. **hg源码泄漏**:Mercurial(hg)版本控制系统在`hg init`后会创建`.hg`目录,攻击者利用dvcs-ripper(https://github.com/kost/dvcs-ripper)...

    Jive论坛源码下载

    论坛数据导出,可通过Web管理界面将论坛数据以树形结构导出到XML文件, 方便Web Services等拓展应用。 论坛版主功能,可设定论坛版主独立管理功能。 积分功能。 Jive论坛的开发是很有意思, 一开始的Jive 1.2.4是...

    PowerBuilder实例

    开发者可以方便地导入和导出源代码,与其他团队成员协作,以及利用版本控制系统如CVS或SVN进行代码版本管理。实例中可能包含关于团队开发流程和版本控制实践的相关代码。 总的来说,《PowerBuilder 8.0开发应用实例...

    配置管理cvsnt、cvstracnt、wincvs

    导入模块允许将现有的项目导入到CVS仓库,导出模块则用于将仓库中的项目复制到本地,便于开发和测试。 CvstracNT是一款与CVS集成的web界面工具,用于追踪代码版本和提供项目报告。它的安装和使用可以帮助团队更好地...

Global site tag (gtag.js) - Google Analytics