java导出excel
java自定义注解在excel导出时的使用
java自定义注解在excel导出时的使用在Java中,自定义注解是一种用于在程序中进行标记的机制。
通过定义自己的注解,可以为类、方法、字段等元素添加元数据,用于描述它们的特性和行为。
在Excel导出时,自定义注解可以用来定义导出的字段和格式,并且可以通过反射机制来读取注解信息,实现自动导出的功能。
下面是一个简单的自定义注解示例:```javaimport ng.annotation.*;String name( default ""; // 导出字段的名称int width( default 20; // 导出字段的宽度String format( default ""; // 导出字段的格式```定义了注解之后,可以在需要导出的类中使用该注解对字段进行标记。
例如:```javapublic class Userprivate String name;private int age;//其他字段和方法...```接下来,可以编写一个用于导出Excel的工具类。
该类可以使用反射来读取类的字段和注解信息,并根据注解信息生成相应的Excel文件。
以下是一个简单的Excel导出工具类示例:```javapublic class ExcelExportUtilpublic static <T> void exportToExcel(List<T> data, Class<T> clazz, String filePath)//创建工作簿和工作表Workbook workbook = new HSSFWorkbook(;Sheet sheet = workbook.createSheet("Sheet1");//获取类的字段和注解信息Field[] fields = clazz.getDeclaredFields(;for (int i = 0; i < fields.length; i++)Field field = fields[i];ExcelField excelField =field.getAnnotation(ExcelField.class);if (excelField != null)//获取注解信息String fieldName = (;int width = excelField.width(;//设置列宽sheet.setColumnWidth(i, width * 256);//创建表头单元格Row headerRow = sheet.getRow(0);if (headerRow == null)headerRow = sheet.createRow(0);}Cell headerCell = headerRow.createCell(i); headerCell.setCellValue(fieldName);}}//创建数据行for (int i = 0; i < data.size(; i++)T item = data.get(i);Row dataRow = sheet.getRow(i + 1);if (dataRow == null)dataRow = sheet.createRow(i + 1);}for (int j = 0; j < fields.length; j++)Field field = fields[j];if (field.isAccessible()try//获取字段值Object value = field.get(item);//创建数据单元格并填充数据Cell dataCell = dataRow.createCell(j); if (value instanceof String) dataCell.setCellValue((String) value); } else if (value instanceof Integer) dataCell.setCellValue((int) value);} else if (value instanceof Double) dataCell.setCellValue((double) value); }} catch (IllegalAccessException e)e.printStackTrace(;}}}}// 保存Excel文件try (FileOutputStream outputStream = newFileOutputStream(filePath))workbook.write(outputStream);} catch (IOException e)e.printStackTrace(;}}```在上面的示例中,exportToExcel方法接收一个泛型列表和类的字节码对象,通过反射来读取类的字段和注解信息,并根据注解信息生成Excel文件。
javaexcel导出(可自定义导出列)
javaexcel导出(可⾃定义导出列)import java.beans.PropertyDescriptor;import java.io.FileOutputStream;import java.io.IOException;import java.io.OutputStream;import ng.reflect.Field;import ng.reflect.Method;import java.text.SimpleDateFormat;import java.util.ArrayList;import java.util.Collection;import java.util.Date;import java.util.Iterator;import java.util.List;import java.util.regex.Matcher;import java.util.regex.Pattern;import ermodel.HSSFCell;import ermodel.HSSFCellStyle;import ermodel.HSSFClientAnchor;import ermodel.HSSFComment;import ermodel.HSSFFont;import ermodel.HSSFPatriarch;import ermodel.HSSFRichTextString;import ermodel.HSSFRow;import ermodel.HSSFSheet;import ermodel.HSSFWorkbook;import org.apache.poi.hssf.util.HSSFColor;public class ExportExcelUtil<T> {public String[] exportExcelHeader(Class<T> clz){Field fields[] = clz.getDeclaredFields();String[] name = new String[fields.length];try{Field.setAccessible(fields, true);for (int i = 1; i < fields.length; i++) {name[i] = fields[i].getName();System.out.println(name[i] + "-> ");}}catch(Exception e){e.printStackTrace();}return name;}public void exportExcel(Collection<T> dataset, OutputStream out) {exportExcel("导出EXCEL⽂档", null,null, dataset, out, "yyyy-MM-dd");}public void exportExcel(String[] headers, Collection<T> dataset,OutputStream out) {exportExcel("导出EXCEL⽂档", null,headers, dataset, out, "yyyy-MM-dd");}public void exportExcel(String title, String[] headers,Collection<T> dataset, OutputStream out) {exportExcel(title,null, headers, dataset, out, "yyyy-MM-dd");}public void exportExcel(String title,String[] headerTitle, String[] headers,Collection<T> dataset, OutputStream out) {exportExcel(title,headerTitle, headers, dataset, out, "yyyy-MM-dd");}public void exportExcel(String[] headerTitle,String[] headers, Collection<T> dataset,OutputStream out, String pattern) {exportExcel("导出EXCEL⽂档",headerTitle, headers, dataset, out, pattern);}/*** 这是⼀个通⽤的⽅法,利⽤了JAVA的反射机制,可以将放置在JAVA集合中并且符号⼀定条件的数据以EXCEL 的形式输出到指定IO设备上** @param title* 表格标题名* @param headerTitle* 表格属性列名数组(标题)若为null,默认显⽰headers* @param headers* 表格属性列名数组* @param dataset* 需要显⽰的数据集合,集合中⼀定要放置符合javabean风格的类的对象。
java导出excel浏览器直接下载或者或以文件形式导出
java导出excel浏览器直接下载或者或以⽂件形式导出看代码吧~/*** excel表格直接下载*/public static void exportExcelByDownload(HSSFWorkbook wb,HttpServletResponse httpServletResponse,String fileName) throws Exception {//响应类型为application/octet- stream情况下使⽤了这个头信息的话,那就意味着不想直接显⽰内容httpServletResponse.setContentType(MediaType.APPLICATION_OCTET_STREAM_VALUE);//attachment为以附件⽅式下载httpServletResponse.setHeader("Content-Disposition","attachment;filename=" + URLEncoder.encode(fileName + ".xls","utf-8"));/*** 代码⾥⾯使⽤Content-Disposition来确保浏览器弹出下载对话框的时候。
* response.addHeader("Content-Disposition","attachment");⼀定要确保没有做过关于禁⽌浏览器缓存的操作*/httpServletResponse.setHeader("Cache-Control", "No-cache");httpServletResponse.flushBuffer();wb.write(httpServletResponse.getOutputStream());wb.close();}/*** excel以⽂件的形式导出* @throws Exception*/public static void exportExcelByFile(HSSFWorkbook wb,String fileName,String path) throws Exception{ByteArrayOutputStream stream = new ByteArrayOutputStream();wb.write(stream);FileOutputStream outputStream = new FileOutputStream(path + fileName);outputStream.write(stream.toByteArray());stream.close();outputStream.close();}java查询数据导出excel并返回给浏览器下载效果图:1.点击导出表按钮2.接着就会出现下图3.点击上图中的确定按钮再接着就会出现下图4.点击上图中的保存按钮接着就会出现下图,浏览器下载完成后的提⽰5.打开下载好的⽂件如下图好了,废话不多少,上代码jsp前端代码<div style="height:30px;"><a>时间:</a><input id="startDateConsume" type="text" class="easyui-datebox"> <a>-</a><input id="endDateConsume" type="text" class="easyui-datebox"><a>消费类型:</a><select id="consumesType" name=""><option value="0" selected="selected">所有</option><option value="1">报名费</option><option value="2">酒⽔零⾷类</option></select><a>⽀付状态:</a><select id="conPaymentStatus" name=""><option value="0" selected="selected">所有</option><option value="1">未⽀付</option><option value="2">已⽀付</option></select><a id="btnConsumesSearch" class="easyui-linkbutton"data-options="iconCls:'icon-search'" style="margin-left:10px">查询</a><a>(查询出来的数据可统计)</a><a id="consumesOutExcel" class="easyui-linkbutton" style="" data-options="iconCls:'icon-redo'">导出表</a></div>js前端代码$(function() {//导出excel表$('#consumesOutExcel').on('click',function(){exportExcel();});});function exportExcel() {$.messager.confirm('确认', '确认把该搜索结果导出Excel表格?', function(r) {if (r) {var startTime = $('#startDateConsume').val();var endTime = $('#endDateConsume').val();var consumesType = $('#consumesType').val();var conPaymentStatus = $('#conPaymentStatus').val();$.messager.progress({title : '处理中',msg : '请稍后',});$.messager.progress('close');location.href="web/vip/exportExcel.xlsx?startTime=" rel="external nofollow" +startTime+"&endTime="+endTime+"&consumesType="+consumesType+"&conPaymentStatus="+conPaymentStatus; }});}java后端代码@Controller@RequestMapping("/vip")public class VipController {//⽂件下载:导出excel表@RequestMapping(value = "/exportExcel.xlsx",method = RequestMethod.GET)@ResponseBodypublic void exportExcel(HttpServletRequest request,HttpServletResponse response) throws UnsupportedEncodingException{//⼀、从后台拿数据if (null == request || null == response){return;}List<VipConsumes> list = null;String startTime = request.getParameter("startTime");String endTime = request.getParameter("endTime");int consumesType = Integer.parseInt(request.getParameter("consumesType"));int conPaymentStatus =Integer.parseInt(request.getParameter("conPaymentStatus"));VipConsumesExample example = new VipConsumesExample();if(consumesType!=0 && conPaymentStatus!=0){example.createCriteria().andTimeBetween(startTime, endTime).andConsumeTypeEqualTo(consumesType).andStatusEqualTo(conPaymentStatus);}else if(consumesType ==0 && conPaymentStatus!=0) {example.createCriteria().andTimeBetween(startTime, endTime).andStatusEqualTo(conPaymentStatus);}else if(consumesType!=0 && conPaymentStatus==0){example.createCriteria().andTimeBetween(startTime, endTime).andConsumeTypeEqualTo(consumesType);}else {example.createCriteria().andTimeBetween(startTime, endTime);}list = this.vipConsumesDao.selectByExample(example);//⼆、数据转成excelrequest.setCharacterEncoding("UTF-8");response.setCharacterEncoding("UTF-8");response.setContentType("application/x-download");String fileName = "消费记录.xlsx";fileName = URLEncoder.encode(fileName, "UTF-8");response.addHeader("Content-Disposition", "attachment;filename=" + fileName); // 第⼀步:定义⼀个新的⼯作簿XSSFWorkbook wb = new XSSFWorkbook();// 第⼆步:创建⼀个Sheet页XSSFSheet sheet = wb.createSheet("startTimeendTime");sheet.setDefaultRowHeight((short) (2 * 256));//设置⾏⾼sheet.setColumnWidth(0, 4000);//设置列宽sheet.setColumnWidth(1,5500);sheet.setColumnWidth(2,5500);sheet.setColumnWidth(3,5500);sheet.setColumnWidth(11,3000);sheet.setColumnWidth(12,3000);sheet.setColumnWidth(13,3000);XSSFFont font = wb.createFont();font.setFontName("宋体");font.setFontHeightInPoints((short) 16);XSSFRow row = sheet.createRow(0);XSSFCell cell = row.createCell(0);cell.setCellValue("流⽔号 ");cell = row.createCell(1);cell.setCellValue("微信名 ");cell = row.createCell(2);cell.setCellValue("微信订单号");cell = row.createCell(3);cell.setCellValue("消费时间");cell = row.createCell(4);cell.setCellValue("消费类型");cell = row.createCell(5);cell.setCellValue("剩余积分 ");cell = row.createCell(6);cell.setCellValue("新增积分 ");cell = row.createCell(7);cell.setCellValue("扣除积分 ");cell = row.createCell(8);cell.setCellValue("消费⾦额");cell = row.createCell(9);cell.setCellValue("⽀付⽅式");cell = row.createCell(10);cell.setCellValue("⽀付状态 ");cell = row.createCell(11);cell.setCellValue("钱包原始⾦额");cell = row.createCell(12);cell.setCellValue("钱包扣除⾦额");cell = row.createCell(13);cell.setCellValue("钱包剩余⾦额");XSSFRow rows;XSSFCell cells;for (int i = 0; i < list.size(); i++) {// 第三步:在这个sheet页⾥创建⼀⾏rows = sheet.createRow(i+1);// 第四步:在该⾏创建⼀个单元格cells = rows.createCell(0);// 第五步:在该单元格⾥设置值cells.setCellValue(list.get(i).getConsumeId());cells = rows.createCell(1);cells.setCellValue(list.get(i).getName());cells = rows.createCell(2);cells.setCellValue(list.get(i).getOrderNumber());cells = rows.createCell(3);cells.setCellValue(list.get(i).getTime());cells = rows.createCell(4);if (list.get(i).getConsumeType() == 2) {cells.setCellValue("酒⽔零⾷费");} else {cells.setCellValue("报名费");}cells = rows.createCell(5);cells.setCellValue(list.get(i).getIntegral());cells = rows.createCell(6);cells.setCellValue(list.get(i).getIntegralIn());cells = rows.createCell(7);cells.setCellValue(list.get(i).getIntegralOut());cells = rows.createCell(8);cells.setCellValue(list.get(i).getMoney());cells = rows.createCell(9);if (list.get(i).getPayment() == 2) {cells.setCellValue("积分抵现");} else if (list.get(i).getPayment() == 3) {cells.setCellValue("微信⽀付");} else if (list.get(i).getPayment() == 4) {cells.setCellValue("现⾦");} else if (list.get(i).getPayment() == 1) {cells.setCellValue("钱包");}cells = rows.createCell(10);if (list.get(i).getStatus() == 2) {cells.setCellValue("已⽀付");} else if (list.get(i).getStatus() == 1) {cells.setCellValue("未⽀付");}cells = rows.createCell(11);cells.setCellValue(list.get(i).getWalletOriginal());cells = rows.createCell(12);cells.setCellValue(list.get(i).getWalletOut());cells = rows.createCell(13);cells.setCellValue(list.get(i).getWalletSurplus());}try {OutputStream out = response.getOutputStream();wb.write(out);out.close();wb.close();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}以上为个⼈经验,希望能给⼤家⼀个参考,也希望⼤家多多⽀持。
exportbigexcel 用法
exportbigexcel 用法ExportBigExcel是一个基于Java的开源项目,用于将大量数据导出到Excel文件中。
它提供了方便的方式来处理大型数据集,并将其转换为可读取和分析的Excel文件。
在本文中,我们将详细讨论ExportBigExcel项目的用法,解释其核心功能,以及提供一些示例代码来帮助你更好地理解和应用这个项目。
一、导入ExportBigExcel要使用ExportBigExcel项目,首先我们需要将其导入到我们的Java项目中。
我们可以通过以下方式来实现:1. 在pom.xml文件中添加ExportBigExcel的依赖项:xml<dependency><groupId>com.github.export-big-excel</groupId><artifactId>export-big-excel</artifactId><version>1.0.0</version></dependency>2. 或者,您可以从项目的GitHub存储库中下载ExportBigExcel的JAR文件,并将其添加到您的项目中。
在完成导入过程后,我们就可以开始使用ExportBigExcel项目了。
二、创建数据模型在使用ExportBigExcel将数据导出到Excel文件之前,我们需要先创建一个数据模型。
数据模型是一个POJO类,定义了我们要导出的数据的字段和属性。
例如,如果我们要导出一个学生信息列表,我们可以创建一个名为Student的类,如下所示:javapublic class Student {private String name;private int age;private String grade;省略构造函数、getter和setter方法}在这个例子中,我们定义了学生的姓名、年龄和班级等属性。
Java导入导出Excel工具类ExcelUtil
Java导⼊导出Excel⼯具类ExcelUtil导出就是将List转化为Excel(listToExcel)导⼊就是将Excel转化为List(excelToList)导⼊导出中会出现各种各样的问题,⽐如:数据源为空、有重复⾏等,我⾃定义了⼀个ExcelException异常类,⽤来处理这些问题。
异常类导出⼯具类:public Map<String,Object> exportMessageExcelFile(String title, String[] headers,List dossierList, OutputStream out, String pattern){boolean flag = true;Map<String,Object> map = new HashMap<String,Object>();StringBuffer messageFile = new StringBuffer();// 声明⼀个⼯作薄HSSFWorkbook workbook = new HSSFWorkbook();// ⽣成⼀个表格HSSFSheet sheet = workbook.createSheet(title);// 设置表格默认列宽度为15个字节sheet.setDefaultColumnWidth((short) 15);// ⽣成⼀个样式HSSFCellStyle style = workbook.createCellStyle();style.setBorderBottom(HSSFCellStyle.BORDER_THIN);style.setBorderLeft(HSSFCellStyle.BORDER_THIN);style.setBorderRight(HSSFCellStyle.BORDER_THIN);style.setBorderTop(HSSFCellStyle.BORDER_THIN);style.setAlignment(HSSFCellStyle.ALIGN_CENTER);//产⽣表格标题⾏HSSFRow row = sheet.createRow(0);for (short i = 0; i < headers.length; i++) {HSSFCell cell = row.createCell(i);cell.setCellStyle(style);HSSFRichTextString text = new HSSFRichTextString(headers[i]);cell.setCellValue(text);}for(int i = 0; i< dossierList.size();i++){Object[] obj = (Object[]) dossierList.get(i);row = sheet.createRow(i+1);for (int j = 0; j < obj.length; j++) {HSSFCell cell = row.createCell(j);cell.setCellStyle(style);if(j==0){cell.setCellValue(i+1);//序号}if(j==1){//Logger.debug("obj[5]"+obj[5]);cell.setCellValue(obj[5]==null?"":obj[5].toString());//办理⼈}if(j==2){//Logger.debug("obj[3]"+obj[3]);cell.setCellValue(obj[3]==null?"":obj[3].toString());//办理时间}if(j==3){// Logger.debug("obj[2]"+obj[2]);cell.setCellValue(obj[2]==null?obj[6]==null?"":obj[6].toString():obj[2].toString());//办理意见if(null!=obj[6]&&!"".equals(obj[6])){messageFile.append(obj[6].toString()+",");}break;}}}map.put("messageFile", messageFile.toString().endsWith(",")?messageFile.toString().substring(0, messageFile.toString().length()-1):messageFile.toString());try {workbook.write(out);} catch (IOException e) {e.printStackTrace();flag = false;}finally {//清理资源try {if(out != null){out.close();}} catch (IOException e) {e.printStackTrace();}}map.put("flag", flag);return map;}测试类:public static void main(String[] args) {ExportExcel<Object> ex = new ExportExcel<Object>();String[] headers = { "学号"};List<Object[]> dataset = new ArrayList<Object[]>();dataset.add(new Object[]{"1"});dataset.add(new Object[]{"2"});dataset.add(new Object[]{"3"});dataset.add(new Object[]{"4"});dataset.add(new Object[]{"5"});try {OutputStream out = new FileOutputStream("C://Users//Lenovo//Desktop/aa.xls");ex.exportMessageExcelFile("测试POI导出EXCEL⽂档", headers, dataset, out, "yyyy-MM-dd"); } catch (FileNotFoundException e) {// TODO Auto-generated catch blocke.printStackTrace();}}。
hutool工具类实现的简易excel文件导出方法
hutool工具类实现的简易excel文件导出方法一、前言Excel文件作为数据存储和交换的重要工具,在各种场景下都有着广泛的应用。
然而,对于一些非专业的开发者来说,手动编写Excel 文件的导出功能可能会显得有些复杂。
为此,我们介绍一种使用hutool工具类实现的简易Excel文件导出方法。
二、hutool工具类介绍hutool是一组Java工具类的集合,提供了大量实用的功能,如文件操作、网络操作、日期时间处理等。
它具有简洁、高效、易用的特点,为开发者提供了很大的便利。
三、Excel文件导出步骤1.导入hutool库首先,需要在项目中导入hutool库,以便使用其中的功能。
可以通过Maven或Gradle等方式将其添加到项目依赖中。
2.创建Excel文件使用hutool提供的ExcelWriter类,可以很方便地创建一个Excel文件。
3.写入数据使用ExcelWriter类的write方法,可以将数据写入到Excel文件中。
支持写入各种类型的数据,如字符串、数字、日期等。
4.保存Excel文件完成数据写入后,需要调用ExcelWriter类的close方法来保存Excel文件。
四、示例代码以下是一个简单的示例代码,演示了如何使用hutool工具类实现Excel文件的导出:```javaimportcn.hutool.core.io.FileUtil;importcn.hutool.core.util.ExcelUtil;importcn.hutool.core.util.StrUtil;importjava.io.File;importjava.util.ArrayList;importjava.util.List;publicclassExcelExporter{publicstaticvoidmain(String[]args){//创建Excel文件StringfileName="example.xlsx";Filefile=FileUtil.getSingleFile(fileName);ExcelWriterwriter=newExcelWriter(file);//写入数据List<String>data1=newArrayList<>();data1.add("姓名");data1.add("年龄");writer.write(StrUtil.repeatCell("数据1",2));//写入标题行writer.write(data1);//写入数据行List<String>data2=newArrayList<>();data2.add("张三");data2.add("25");writer.write(data2);//写入数据行//关闭Excel文件writer.close();}}```五、总结使用hutool工具类实现Excel文件的导出,可以简化开发过程,提高效率。
java导出注解国际化标题excel title
Java导出注解国际化标题Excel Title1. 背景介绍在Java开发过程中,经常会碰到需要将数据导出到Excel表格的需求。
为了让导出的Excel表格更加专业和友好,通常会对Excel的标题进行国际化处理。
而为了简化开发人员的工作量,提高代码的可维护性,可以使用注解来实现Excel标题的国际化处理。
2. 注解的概念注解是一种代码级别的说明,它能够对程序代码进行补充说明,不影响代码的实际运行。
在Java中,注解是一种特殊的标记,格式为Annotation。
开发者可以使用注解为程序代码加入一些补充信息,这些信息可以用来描述代码的行为、形式和结构。
3. Java导出注解在Java中,有许多成熟的框架可以实现数据的导出,如POI、EasyExcel等。
在这些框架中,通常会提供注解的方式来实现Excel标题的配置。
开发者可以在实体类的字段上使用注解进行标题的配置,从而实现标题的国际化处理。
4. 实现步骤在实际的开发中,可以按照以下步骤来实现Java导出注解国际化标题Excel Title:(1)在实体类的字段上使用注解进行标题的配置。
可以使用ExcelProperty注解来指定字段在Excel中的标题。
(2)在国际化配置文件中配置标题的文字。
可以使用properties文件来存储不同语言版本的标题文字,然后在程序中根据当前语言环境来加载相应的标题文字。
(3)在导出Excel的代码中,根据注解配置和国际化配置来生成Excel的标题行。
可以通过反射的方式获取字段上的注解配置,再根据当前语言环境加载对应的标题文字,最后生成Excel的标题行。
5. 代码示例以下是一个简单的代码示例,演示了如何使用注解来实现Java导出国际化标题Excel Title:```javapublic class User {ExcelProperty(value = "", index = 0)private String name;ExcelProperty(value = "user.age", index = 1)private Integer age;}```在上述代码中,使用了ExcelProperty注解来指定字段在Excel中的标题,同时指定了标题在Excel中的列索引。
java 导出 excel 最佳实践,java 大文件 excel 避免OOM(内存溢出)
产品需求产品经理需要导出一个页面的所有的信息到 EXCEL 文件。
需求分析对于 excel 导出,是一个很常见的需求。
最常见的解决方案就是使用 poi 直接同步导出一个 excel 文件。
客户体验 & 服务性能•客户体验如果导出的文件比较大,比如几十万条数据,同步导出页面就会卡主,用户无法进行其他操作。
•服务性能导出的时候,任务比较耗时就会阻塞主线程。
如果导出的服务是暴露给外部(前后端分离),这种大量的数据传输十分消耗性能。
解决方案使用异常处理导出请求,后台 MQ 通知自己进行处理。
MQ 消费之后,多线程处理 excel 文件导出,生成文件后上传到 FTP 等文件服务器。
前端直接查询并且展现对应的任务执行列表,去FTP 等文件服务器下载文件即可。
EXCEL 导出需要考虑的问题OOM正常的 poi 在处理比较大的 excel 的时候,会出现内存溢出。
网上的解决方案也比较多。
比如官方的SXSSF (Since POI 3.8 beta3)解决方式。
或者使用封装好的包1.easypoi ExcelBatchExportServer2.hutool BigExcelWriter原理都是强制使用 xssf 版本的Excel。
你也可以使用easyexcel,当然这个注释文档有些欠缺,而且设计的比较复杂,不是很推荐。
我这里使用的是hutool BigExcelWriter,懒得自己再写一遍。
FULL GC如果一次查询100W 条数据库,然后把这些信息全部加载到内存中,是不可取的。
建议有2个:1.限制每一次分页的数量。
比如一次最多查询 1w 条。
分成 100 次查询。
(必须)2.限制查询得总条数。
比如限制为最多 10W 条。
(根据实际情况选择)虽然使用者提出要导出类似于 3 个月的所有信息,但是数量太多,毫无意义。
(提出者自己可能体会不到)尽量避免 FULL-GC 的情况发生,因为目前的所有方式对于 excel 的输出流都会占用内存,100W 条很容易导致 FULL-GC。
java实现数据的Excel导出,自定义导出字段,转换字典值
java实现数据的Excel导出,⾃定义导出字段,转换字典值第⼀版代码:基础功能跳转此⽂章:简介新增功能:1. 添加⾃定义字段导出功能, ⽤户可以选择字段进⾏导出2. 将字典类型数据进⾏转换(如:0=⼥,1=男, 将0转换为⼥, 1转换为男)3. 添加表头格式4. 随机⽂件名称, 防⽌多次导出时⽂件覆盖问题实现代码Excel注解@Retention(RetentionPolicy.RUNTIME)@Target(ElementType.FIELD)public @interface Excel {/*** 导出到Excel中的名字*/String name() default "";/*** ⽇期格式, 如: yyyy-MM-dd*/String dateFormat() default "";/*** 字典的key值*/String dictKey() default "";/*** 读取内容转表达式 (如: 0=男,1=⼥,2=未知)*/String dictExp() default "";}123456789101112131415161718192021222324public class ExcelUtil<T> {/*** ⼯作薄*/private Workbook wb;/*** ⼯作表*/private Sheet sheet;/*** 需要导出的数据*/private List<T> exportList;/*** 对象的class对象*/private Class<T> clazz;/*** 被选中需要导出的字段名称*/private Map<String, Object> checkedFieldsName;/*** 被选中需要导出的字段对象*/private List<Field> checkedFields;/*** 包含需要字典转换的字段对象*/private List<Field> fieldsContainDict;/*** 对象中的字典值*/private Map<String, Map<String, String>> dicts;private ExcelUtil(){}public ExcelUtil(Class<T> clazz){this.clazz = clazz;}/**** @param list* @param sheetName* @param fieldsName*/public void exportExcel(List<T> list, Map<String, Object> fieldsName, String sheetName){ // 初始化数据init(list, sheetName, fieldsName);// 转换字典值try {convertDict();} catch (IllegalAccessException e) {e.printStackTrace();}// sheet第⼀⾏加⼊名称数据createTopRow();// sheet其他⾏,添加⽬标数据try {createOtherRow();} catch (IllegalAccessException e) {e.printStackTrace();}// 导出wbtry(OutputStream outFile = new FileOutputStream(generateFileName())){wb.write(outFile);} catch (IOException e) {e.printStackTrace();}}}/*** 添加导出数据*/private void createOtherRow() throws IllegalAccessException {for (int rowNum = 1; rowNum <= exportList.size(); rowNum++) {Row row = sheet.createRow(rowNum);T t = exportList.get(rowNum - 1);for (int colNum = 0; colNum < checkedFields.size(); colNum++) {Cell cell = row.createCell(colNum);Field field = checkedFields.get(colNum);field.setAccessible(true);// 单元格设置值addCell(cell, field, t);}}}/*** 单元格中添加数据** @param cell 单元格* @param field 字段* @param t list中的⼀条数据*/private void addCell(Cell cell, Field field, T t) throws IllegalAccessException {Class<?> fieldType = field.getType();if (String.class == fieldType) {cell.setCellValue((String) field.get(t));} else if ((Integer.TYPE == fieldType) || (Integer.class == fieldType)) {cell.setCellValue((Integer) field.get(t));} else if ((Long.TYPE == fieldType) || (Long.class == fieldType)) {cell.setCellValue((Long) field.get(t));} else if ((Double.TYPE == fieldType) || (Double.class == fieldType)) {cell.setCellValue((Double) field.get(t));} else if ((Float.TYPE == fieldType) || (Float.class == fieldType)) {cell.setCellValue((Float) field.get(t));} else if (Date.class == fieldType) {String dateFormat = field.getAnnotation(Excels.class).dateFormat();cell.setCellValue(dateFormat((Date) field.get(t), dateFormat));}}/*** 时间格式转换* @param date ⽇期* @param dateFormat ⽇期格式* @return*/private String dateFormat(Date date, String dateFormat) {if (dateFormat == null || "".equals(dateFormat)) {dateFormat = "yyyy-MM-dd HH:mm:ss";}SimpleDateFormat df = new SimpleDateFormat(dateFormat);return df.format(date);}/*** sheet第⼀⾏加⼊名称数据*/private void createTopRow() {Row row = sheet.createRow(0);Map<String, CellStyle> styles = createStyles(wb);for (int index = 0; index < checkedFields.size(); index++) {Cell cell = row.createCell(index);cell.setCellValue(checkedFields.get(index).getAnnotation(Excels.class).name()); System.out.println(styles.get("header"));cell.setCellStyle(styles.get("header"));}}private void convertDict() throws IllegalAccessException {for (Field field : fieldsContainDict) {Excels annotation = field.getAnnotation(Excels.class);String dictKey = annotation.dictKey();field.setAccessible(true);for (T t : exportList) {// 获取字段值String o = (String) field.get(t);field.set(t, dicts.get(dictKey).get(o));}}}/*** 将数据导出Excel** @param list 需要导出的数据* @param sheetName ⼯作表名称*/public void exportExcel(List<T> list, String sheetName){exportExcel(list, null, sheetName);}/*** 将数据导出Excel** @param list 需要导出的数据*/public void exportExcel(List<T> list) {exportExcel(list, null, "sheet");}/*** 初始化*/public void init(List<T> list ,String sheetName, Map<String, Object> fieldsName){ this.checkedFieldsName = fieldsName;this.exportList = list;// 初始化导出数据initExportList();// 初始化⼯作薄initWorkbook();// 初始化⼯作表initSheet(sheetName);// 初始化checkedFields, fieldsContainDictinitFields();// 根据注解⽣成⽣成字典generateObjDict();}/*** 初始化导出数据*/private void initExportList(){// 防⽌导出过程中出现空指针if(Objects.isNull(this.exportList)) {this.exportList = new ArrayList<>();}}/*** 初始化⼯作簿*/private void initWorkbook(){this.wb = new SXSSFWorkbook();}/*** 初始化⼯作表*/private void initSheet(String sheetName){this.sheet = wb.createSheet(sheetName);}* 1.如果checkedFieldsName没有定义(未⾃定义导出字段),所有字段全部导出 * 2.如果checkedFieldsName进⾏了定义,根据定义字段进⾏导出*/private void initFields(){// 获取对象所有字段对象Field[] fields = clazz.getDeclaredFields();// 过滤出checkedFieldsthis.checkedFields = Arrays.asList(fields).stream().filter(item -> {if(!Objects.isNull(this.checkedFieldsName)) {if (item.isAnnotationPresent(Excel.class)) {return checkedFieldsName.containsKey(item.getName());}} else {return item.isAnnotationPresent(Excel.class);}return false;}).collect(Collectors.toList());// 过滤出fieldsContainDictthis.fieldsContainDict = Arrays.asList(clazz.getDeclaredFields()).stream().filter(item -> !"".equals(item.getAnnotation(Excel.class).dictExp())).collect(Collectors.toList(}/*** 通过扫描字段注解⽣成字典数据*/private void generateObjDict(){if(fieldsContainDict.size() == 0) {return;}if(dicts == null) {dicts = new HashMap<>(); // Map<String, List<Map<String, String>>>}for (Field field : fieldsContainDict) {String dictKey = field.getAnnotation(Excel.class).dictKey();String exps = field.getAnnotation(Excel.class).dictExp();String[] exp = exps.split(",");Map<String, String> keyV = new HashMap<>();dicts.put(dictKey, keyV);for (String s : exp) {String[] out = s.split("=");keyV.put(out[0], out[1]);}System.out.println("字典值:"+ dicts);}}/*** 创建表格样式** @param wb ⼯作薄对象* @return 样式列表*/private Map<String, CellStyle> createStyles(Workbook wb){Map<String, CellStyle> styles = new HashMap<String, CellStyle>();// 数据格式CellStyle style = wb.createCellStyle();style.setAlignment(HorizontalAlignment.CENTER);style.setVerticalAlignment(VerticalAlignment.CENTER);style.setBorderRight(BorderStyle.THIN);style.setRightBorderColor(IndexedColors.GREY_50_PERCENT.getIndex()); style.setBorderLeft(BorderStyle.THIN);style.setLeftBorderColor(IndexedColors.GREY_50_PERCENT.getIndex());style.setBorderTop(BorderStyle.THIN);dataFont.setFontHeightInPoints((short) 10);style.setFont(dataFont);styles.put("data", style);// 表头格式style = wb.createCellStyle();style.cloneStyleFrom(styles.get("data"));style.setAlignment(HorizontalAlignment.CENTER);style.setVerticalAlignment(VerticalAlignment.CENTER);style.setFillForegroundColor(IndexedColors.GREY_50_PERCENT.getIndex()); style.setFillPattern(FillPatternType.SOLID_FOREGROUND);Font headerFont = wb.createFont();headerFont.setFontName("Arial");headerFont.setFontHeightInPoints((short) 10);headerFont.setBold(true);headerFont.setColor(IndexedColors.WHITE.getIndex());style.setFont(headerFont);styles.put("header", style);return styles;}/*** ⽣成随机名称,防⽌⽂件复写* @return*/private String generateFileName(){return "D:\\" + UUID.randomUUID().toString().replace("-", "") + ".xlsx";}}12345678910111213141516171819202122232425262728293031323334353637383948 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369使⽤⽅法将对象加上⼯具类需要的注解: @Data@NoArgsConstructor@AllArgsConstructorpublic class Student {@Excel(name = "姓名")private String name;@Excel(name = "年龄")private Integer age;@Excel(name = "出⽣⽇期", dateFormat = "yyyy-MM-dd")private Date birthday;@Excel(name = "性别", dictKey = "sex", dictExp = "1=男,2=⼥")private String sex;}1234567891011121314151617测试字典转换public static void main(String[] args) {ArrayList<Student> data = new ArrayList<>();Student student = new Student();student.setName("tom");student.setAge(19);student.setSex("1");student.setBirthday(new Date());data.add(student);ExcelUtil<Student> util = new ExcelUtil<>(Student.class);util.exportExcel(data, "⼈员信息表");}123456789101112输出结果:结果可以看出, 已将1转换为男了测试选择字段导出:若不⾃定义导出的字段, ⼯具将会把所有带有Excel注解的字段进⾏导出, 如上⽅所⽰。
java导出大批量(百万以上)数据的excel文件
java导出⼤批量(百万以上)数据的excel⽂件本⽂实例为⼤家分享了java导出百万以上数据的excel⽂件,供⼤家参考,具体内容如下1.传统的导出⽅式会消耗⼤量的内存,2003每个sheet页最多65536条数据,2007每个sheet页可以达到100万条数据以上,2007会在⽣成Workbook时清理数据,所以2007导出量更⼤;2.可以导出多个excel⽂件到某个⽬录中,然后打包下载;3.导出excel格式的xml⽂件,这种⽅式可以分批导出数据,适⽤于⼤批量数据的导出,以下简单介绍这种⽅式:代码如下:package com.epay.utils;/*** ⼤数据量导出成EXCEL或XML* @author qad* 2017-04-22*/import java.io.BufferedOutputStream;import java.io.DataOutputStream;import java.io.File;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;public class Test {public static void main(String[] args) {StringBuffer sb = new StringBuffer();try {DataOutputStream rafs = new DataOutputStream(new BufferedOutputStream(new FileOutputStream(new File("d://test.xls"))));sb.append("<?xml version=\"1.0\" encoding=\"GBK\" ?>");sb.append("\n");sb.append("<?mso-application progid=\"Excel.Sheet\"?>");sb.append("\n");sb.append("<Workbook xmlns=\"urn:schemas-microsoft-com:office:spreadsheet\"");sb.append("\n");sb.append(" xmlns:o=\"urn:schemas-microsoft-com:office:office\"");sb.append("\n");sb.append(" xmlns:x=\"urn:schemas-microsoft-com:office:excel\"");sb.append("\n");sb.append(" xmlns:ss=\"urn:schemas-microsoft-com:office:spreadsheet\"");sb.append("\n");sb.append(" xmlns:html=\"/TR/REC-html40\">");sb.append("\n");sb.append("<DocumentProperties xmlns=\"urn:schemas-microsoft-com:office:office\"> ");sb.append("\n");sb.append(" <Styles>\n");sb.append(" <Style ss:ID=\"Default\" ss:Name=\"Normal\">\n");sb.append(" <Alignment ss:Vertical=\"Center\"/>\n");sb.append(" <Borders/>\n");sb.append(" <Font ss:FontName=\"宋体\" x:CharSet=\"134\" ss:Size=\"12\"/>\n");sb.append(" <Interior/>\n");sb.append(" <NumberFormat/>\n");sb.append(" <Protection/>\n");sb.append(" </Style>\n");sb.append(" </Styles>\n");int sheetcount = 0;int recordcount = 65535;int currentRecord = 0;int total = 100000;int col = 20;sb.append("<Worksheet ss:Name=\"Sheet0\">");sb.append("\n");sb.append("<Table ss:ExpandedColumnCount=\"" + col+ "\" ss:ExpandedRowCount=\"" + total+ "\" x:FullColumns=\"1\" x:FullRows=\"1\">");sb.append("\n");for (int i = 0; i < total; i++) {if ((currentRecord == recordcount|| currentRecord > recordcount || currentRecord == 0)&& i != 0) {// ⼀个sheet写满currentRecord = 0;rafs.write(sb.toString().getBytes());sb.setLength(0);sb.append("</Table>");sb.append("<WorksheetOptions xmlns=\"urn:schemas-microsoft-com:office:excel\">");sb.append("\n");sb.append("<ProtectObjects>False</ProtectObjects>");sb.append("\n");sb.append("<ProtectScenarios>False</ProtectScenarios>");sb.append("\n");sb.append("</WorksheetOptions>");sb.append("\n");sb.append("</Worksheet>");sb.append("<Worksheet ss:Name=\"Sheet" + i / recordcount+ "\">");sb.append("\n");sb.append("<Table ss:ExpandedColumnCount=\"" + col+ "\" ss:ExpandedRowCount=\"" + recordcount+ "\" x:FullColumns=\"1\" x:FullRows=\"1\">");sb.append("\n");}sb.append("<Row>");for (int j = 0; j < col; j++) {System.out.println(i);sb.append("<Cell><Data ss:Type=\"String\">111</Data></Cell>");sb.append("\n");}sb.append("</Row>");if (i % 5000 == 0) {rafs.write(sb.toString().getBytes());rafs.flush();sb.setLength(0);}sb.append("\n");currentRecord++;}rafs.write(sb.toString().getBytes());sb.setLength(0);sb.append("</Table>");sb.append("<WorksheetOptions xmlns=\"urn:schemas-microsoft-com:office:excel\">");sb.append("\n");sb.append("<ProtectObjects>False</ProtectObjects>");sb.append("\n");sb.append("<ProtectScenarios>False</ProtectScenarios>");sb.append("\n");sb.append("</WorksheetOptions>");sb.append("\n");sb.append("</Worksheet>");sb.append("</Workbook>");sb.append("\n");rafs.write(sb.toString().getBytes());rafs.flush();rafs.close();} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}}}导出xml⽂件之后直接修改后缀名为.xlsx就可以直接打开,弊端:⽆法导出.xls格式的excel⽂件.以上只是⼀种简单想法,留待以后具体实现.扩展:既然可以使⽤xml⽂件导出excel,那么导出csv⽂件之后也可以直接改后缀名为.xls,⽬前只是⼀种想法,尚未证实可⾏性.以上就是本⽂的全部内容,希望对⼤家的学习有所帮助,也希望⼤家多多⽀持。
java通过POI和easypoi实现Excel的导出
java通过POI和easypoi实现Excel的导出前⾔在⼯作经常会遇到excel导出报表的功能,⾃⼰也做过⼀些,然后在项⽬⾥看到同事封装的⼀个excel导出⼯具类,着实不错,拿来分享⼀下。
然后,⼜在⽹上看到⼀个使⽤easypoi实现cxcel导出的博客,于是⾃⼰也仿着搞了⼀下,在这也分享⼀下。
使⽤POI实现excel导出⾸先,引⼊jar包,这是POI需要的jar包。
<dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>3.17</version></dependency>下⾯是主要的实现⽅法。
定义⼀个函数式接⼝,⽤于⾃定义格式。
package com.mz.util;import java.io.IOException;/*** @version V1.0* @Description:* @date 2018/10/31 17:16*/@FunctionalInterfacepublic interface ExportConsumer<ByteArrayOutputStream, Workbook, List> {/***⾃定义导出数据拼装* @param fileOut 输出流* @param wb workbook对象* @param listData 数据集* @throws IOException*/void accept(ByteArrayOutputStream fileOut, Workbook wb, List listData) throws IOException;}⼯具类主要⽅法package com.mz.util;import ermodel.Workbook;import org.springframework.http.HttpHeaders;import org.springframework.http.HttpStatus;import org.springframework.http.MediaType;import org.springframework.http.ResponseEntity;import java.io.ByteArrayOutputStream;import java.io.IOException;import java.nio.charset.StandardCharsets;import java.util.List;public class POIExportUtil {/*** 导出excel** @param fileOut 输出流* @param wb excel workbook对象* @param listData 需要导出的数据* @param consumer ⾃定义导出excel的格式* @param fileName ⽂件名* @return ResponseEntity* @throws IOException*/public static <T> ResponseEntity<byte[]> exportExcel(ByteArrayOutputStream fileOut,Workbook wb,List<T> listData,String fileName,ExportConsumer<ByteArrayOutputStream, Workbook, List<T>> consumer) throws IOException {consumer.accept(fileOut, wb, listData);HttpHeaders headers = new HttpHeaders();headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);headers.setContentDispositionFormData("attachment", new String((fileName + ".xls").getBytes(StandardCharsets.UTF_8), StandardCharsets.ISO_8859_1));return new ResponseEntity<>(fileOut.toByteArray(), headers, HttpStatus.OK);}}使⽤案例,页⾯通过<a>标签访即可。
mongo百万数据导出excel java代码
MongoDB是一个广泛使用的文档数据库,在处理大量数据时非常高效。
以mongo百万数据导出excel为主题,我将针对这一需求展开讨论。
在文章中,我将从mongo数据库的基本概念开始,逐步深入探讨如何使用java代码实现百万数据导出excel的功能。
1. MongoDB简介MongoDB是一个开源的文档型数据库,它以高性能、高可用性和灵活的数据模型而闻名。
在处理大量数据时,MongoDB能够提供出色的性能表现,因此在实际应用中被广泛使用。
其文档式数据存储结构和灵活的数据模型为程序员提供了很大的便利。
2. MongoDB数据导出在实际项目中,有时候我们需要将MongoDB中的数据导出到excel 表格中,以便进行进一步的分析和处理。
在这个过程中,需要使用java代码来实现数据的读取和导出功能。
在这篇文章中,我将共享一个实现百万数据导出excel的java代码示例,并提供详细的解释和分析。
3. Java代码实现在实际操作中,我们可以使用Java语言搭配MongoDB的Java驱动程序来实现数据的读取和导出功能。
我们需要建立连接到MongoDB 数据库的连接,并且查询需要导出的数据。
通过java代码将数据逐行写入excel表格中,最终完成百万数据导出excel的功能。
4. 个人观点和总结从个人观点来看,使用MongoDB进行大数据处理可以极大地提高程序的性能和灵活性。
与传统的关系型数据库相比,MongoDB在处理大量数据时更为高效和简洁。
而在实际操作中,通过java代码实现百万数据导出excel功能也为数据分析和处理提供了便利。
通过这篇文章,我希望读者能够深入了解MongoDB数据库的基本概念和数据导出功能,并能够通过java代码实现百万数据导出excel的功能。
我也希望读者能够在实际项目中灵活应用这些知识,提高工作效率和数据处理能力。
在撰写本文的过程中,我充分考虑了你对mongo百万数据导出excel java代码的需求,以多角度展开讨论,希望能够帮助你更深入地理解和使用相关知识。
JAVA导出数据到excel中大数据量的解决方法
JAVA导出数据到excel中⼤数据量的解决⽅法最近在做项⽬功能时,发现有20万以上的数据。
要求导出时直接导出成压缩包。
原来的逻辑是使⽤poi导出到excel,他是操作对象集合然后将结果写到excel中。
使⽤poi等导出时,没有考虑数据量的问题,量⽆法满⾜,有个⼏千⾏jvm就哭了。
更别提⼏万⾏⼏百万⾏数据了。
经过⼀天的研究发现⼀种不会消耗过多内存的⽅法:导出成csv格式⼤数据量的导出成csv格式分为以下⼏步:1.⾸先引⼊需要的jar包⼀下是我maven的配置⽅式<dependency><groupId>org.mvel</groupId><artifactId>mvel2</artifactId><version>2.2.8.Final</version></dependency><dependency><groupId>net.sourceforge.javacsv</groupId><artifactId>javacsv</artifactId><version>2.0</version></dependency>2.以下是具体的执⾏代码,我是⽤的是jdbcTemplatepublic class DownloadVehicleRepair extends AbstractJob {@Autowiredprivate JdbcTemplate jdbcTemplate;@Overrideprotected void executeBusiness(Long aLong) {System.out.println("开始执⾏!!!!!!!!!!");final String fileName = "车辆维修清单.csv";//压缩包⾥⾯的⽂件final String[] header = {"序号", "第三⽅机构代码", "机构名称", "分公司", "合作机构", "单位类别", "主品牌", "品牌名称","被投诉", "涉及欺诈", "⿊名单", "审核状态", "维护时间", "维护⼈员代码"};final String sql = "您需要执⾏sql”;jdbcTemplate.execute(new PreparedStatementCreator() {@Overridepublic PreparedStatement createPreparedStatement(Connection connection) throws SQLException {PreparedStatement pstmt = connection.prepareStatement(sql);return pstmt;}}, new PreparedStatementCallback<Integer>() {@Overridepublic Integer doInPreparedStatement(PreparedStatement preparedStatement) throws SQLException, DataAccessException {ResultSet rs = preparedStatement.executeQuery();try {CsvUtil.writeCsv(RuntimeEnvironmentUtil.getValue(SysConstent.code,SysConstent.path) + "\\VehicleRepairDetail.zip",fileName, header, rs);//RuntimeEnvironmentUtil.getValue()是为了获取你导出到服务器的路径} catch (Exception e) {e.printStackTrace();}return 0;}});System.out.println("导出完成!!!!!!!!!!!");}}3.以下是帮助类public class CsvUtil {// 编码类型public static final Charset CHARSET = Charset.forName("GBK");// 分隔符public static final char DELIMITER = ',';// ⽂件后缀public static final String SUFFIX = ".csv";public static void writeCsv(OutputStream out, String[] header, ResultSet rs)throws IOException, SQLException {CsvWriter writer = null;try {writer = new CsvWriter(out, CsvUtil.DELIMITER, CsvUtil.CHARSET);writeCsv(writer, header, rs);} finally {if (writer != null)writer.close();}}public static void writeCsv(CsvWriter writer, String[] header, ResultSet rs)throws IOException, SQLException {if (header != null)writer.writeRecord(header);ResultSetMetaData md = rs.getMetaData();int columnCount = md.getColumnCount();while (rs.next()) {for (int i = 1; i <= columnCount; i++)writer.write(rs.getString(i));writer.endRecord();}}public static void writeCsv(File file, String[] header, ResultSet rs)throws IOException, SQLException {BufferedOutputStream out = null;FileOutputStream fileOutputStream = null;try {fileOutputStream = new FileOutputStream(file);out = new BufferedOutputStream(fileOutputStream);writeCsv(out, header, rs);} finally {if (out != null) {out.flush();out.close();}if (fileOutputStream != null) {fileOutputStream.close();}}}public static void writeCsv(String csvFilePath, String[] header,ResultSet rs) throws IOException, SQLException {writeCsv(new File(csvFilePath), header, rs);}public static void writeCsv(String zipFilePath, String csvName, String[] header, ResultSet rs) throws IOException, SQLException {FileOutputStream fos = null;BufferedOutputStream bos = null;ZipOutputStream zos = null;try {fos = new FileOutputStream(zipFilePath);bos = new BufferedOutputStream(fos);zos = new ZipOutputStream(bos);zos.putNextEntry(new ZipEntry(csvName));writeCsv(zos, header, rs);} finally {StreamUtil.flush(zos);StreamUtil.close(zos);//StreamUtil.flush(bos);StreamUtil.close(bos);//StreamUtil.flush(fos);StreamUtil.close(fos);}}}public class StreamUtil {public static void flush(Flushable flushable) {if (flushable != null) {try {flushable.flush();} catch (IOException e) {e.printStackTrace();}}}public static void close(Closeable closeable){if(closeable!=null){try {closeable.close();} catch (IOException e) {e.printStackTrace();}}}}4.下⾯是下载时的action@RequestMapping(value = "/downloadVehicleRepair", method = RequestMethod.POST)public ResponseEntity<byte[]> download() throws IOException {String path = RuntimeEnvironmentUtil.getValue(SysConstent.code,SysConstent.path)+"\\VehicleRepairDetail.zip"; File file = new File(path);HttpHeaders headers = new HttpHeaders();String fileName = new String("车辆维修清单.zip".getBytes("UTF-8"), "iso-8859-1");//为了解决中⽂名称乱码问题headers.setContentDispositionFormData("attachment", fileName);headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);return new ResponseEntity<byte[]>(FileUtils.readFileToByteArray(file), headers, HttpStatus.OK);}总结:以上只是关键代码。
java 使用jxl技术excel文件进行导入和导出实验用到的知识与技术
java 使用jxl技术excel文件进行导入和导出实验用到的知识与技术Java是一种流行的编程语言,而JXL技术是一种用于处理Excel文件的Java库。
在本文中,我们将一步一步地介绍如何使用JXL技术导入和导出Excel文件。
我们将从JXL技术的概述开始,然后讨论如何导入Excel文件,接着是如何导出Excel文件。
JXL技术是一个基于Java的开源库,用于读取、写入和操作Microsoft Excel文件。
它提供了一组API,可以方便地处理Excel文件中的单元格、行和列。
不仅可以读取现有的Excel文件,还可以创建新的Excel文件并在其中写入数据。
JXL技术支持Excel的各种版本,包括xls和xlsx格式。
接下来,我们将讨论如何导入Excel文件。
首先,我们需要在项目中引入JXL库的依赖。
在Maven项目中,我们可以将以下依赖添加到pom.xml 文件中:xml<dependency><groupId>net.sourceforge.jexcelapi</groupId><artifactId>jxl</artifactId><version>2.6.12</version></dependency>一旦我们引入了JXL依赖,我们就可以使用它的API来导入Excel文件。
首先,我们需要创建一个Workbook对象,它代表整个Excel文件。
我们可以使用Workbook类的静态方法getWorkbook()来打开一个现有的Excel文件,例如:javaWorkbook workbook = Workbook.getWorkbook(newFile("path/to/excel.xls"));在Workbook对象上,我们可以执行各种操作,例如获取特定的工作表、读取单元格的值等。
javaexcel动态字段导出的方法
javaexcel动态字段导出的方法### Java Excel动态字段导出的方法在Java应用程序中,Excel文件的动态字段导出是一项常见需求,尤其是在报表生成和数据分析的场景下。
以下将详细介绍如何使用Java实现动态字段导出到Excel的方法。
#### 1.准备工作- 确保你的项目中引入了Apache POI库,这是一个强大的Java库,用于处理Microsoft Office文档。
- 创建一个Excel模板,如果你需要固定某些表头或者样式。
#### 2.实现动态字段导出的步骤##### 步骤1:定义数据模型首先,定义一个Java对象来表示Excel表中的数据模型。
```javapublic class DataModel {private String fieldName1;private int fieldNumber2;// 其他字段...// 省略getter和setter方法}```##### 步骤2:创建Excel工作簿```javaimport ermodel.*;import ermodel.XSSFWorkbook; Workbook workbook = new XSSFWorkbook(); Sheet sheet = workbook.createSheet("数据");Row headerRow = sheet.createRow(0);```##### 步骤3:设置表头动态设置表头,可以根据实际需求添加或减少字段。
```javaString[] headers = {"字段1", "字段2", "字段3"};for (int i = 0; i < headers.length; i++) {Cell cell = headerRow.createCell(i);cell.setCellValue(headers[i]);}```##### 步骤4:填充数据```javaList<DataModel> dataModels = // 假设这是你的数据源int rowNum = 1;for (DataModel model : dataModels) {Row row = sheet.createRow(rowNum++);row.createCell(0).setCellValue(model.getFieldName1());row.createCell(1).setCellValue(model.getFieldNumber2());// 其他字段...}```##### 步骤5:设置样式(可选)根据需要,可以为单元格设置样式。
java导出Excel大数据量,自己经验总结!(二)
java导出Excel⼤数据量,⾃⼰经验总结!(⼆)在上⼀次的基础上加上了样式,以及中⽂列名1package com.tommy.fundation.util;23import java.io.OutputStream;4import java.util.ArrayList;5import java.util.HashMap;6import java.util.Iterator;7import java.util.List;8import java.util.Map;9import java.util.Set;1011import javax.servlet.http.HttpServletResponse;1213import ermodel.HSSFWorkbook;14import ermodel.HSSFSheet;15import ermodel.HSSFCellStyle;16import ermodel.HSSFFont;17import ermodel.HSSFRow;18import ermodel.HSSFCell;19import ermodel.CellStyle;20import ermodel.Font;21import ermodel.IndexedColors;2223public class ExportExcel<T> {24public void doExcel(HttpServletResponse response, List<T> list, String fileName) throws Exception {25 String[] columnNames = new String[0];26 doExcel(response, list , columnNames, fileName);27 }28/**29 * 导出多张excel表,解决xls格式⾏数65535的限制30 * @author OnlyOne31 * @param response32 * @param list 需要处理的list数据集合33 * @param columnNames 与实体属性⼀⼀对应的列名34 * @param fileName ⽂件名35 * @throws Exception36*/37public void doExcel(HttpServletResponse response, List<T> list, String[] columnNames, String fileName) throws Exception {38 OutputStream os = response.getOutputStream();//获取输出流39 response.reset();40// 设置下载头部信息。
java easypoi 参数
java easypoi 参数
EasyPoi 是一个基于 Apache POI 实现的 Java Excel 导入导
出工具,它可以帮助我们快速、方便地进行 Excel 文件的读写操作。
在 EasyPoi 中,常见的参数包括:
1. Excel导出参数,在进行 Excel 导出时,我们需要指定导
出的数据集合、导出的 Excel 类型(比如 .xls 或 .xlsx)、导出
的文件名、导出的 sheet 名等。
2. Excel导入参数,在进行 Excel 导入时,我们需要指定导
入的 Excel 文件、导入的数据类型、导入的 sheet 名等。
3. 样式参数,在进行 Excel 导出时,我们可以指定单元格的
样式,比如字体、颜色、对齐方式等。
4. 数据格式参数,在进行 Excel 导出时,我们可以指定数据
的格式,比如日期格式、数字格式等。
5. 标题参数,在进行 Excel 导出时,我们可以指定表格的标题,包括标题的内容、样式等。
总的来说,EasyPoi 提供了丰富的参数选项,可以根据具体的
需求来灵活配置导出导入的参数,以实现定制化的 Excel 文件操作。
希望这些信息能够帮助到你。
java 导出excel数据的方法
java 导出excel数据的方法主题:Java 导出Excel 数据的方法引言:在开发Java应用程序时,经常需要将数据导出到Excel文件中。
Excel是一种常用的电子表格工具,可以对数据进行分析和可视化展示。
本文将介绍如何使用Java来导出Excel数据,以及实现这一功能的详细步骤。
1. 导入所需库首先,我们需要在Java项目中导入所需的库。
常用的库包括Apache POI和Apache POI-OOXML。
这些库提供了用于操作Excel 文件的类和方法。
2. 创建工作簿和工作表在Java中,我们通过HSSFWorkbook类创建一个新的Excel 工作簿。
然后,使用createSheet方法创建一个新的工作表对象。
我们可以为工作表指定名称,并将其附加到工作簿中。
3. 创建表头在工作表中,我们可以使用createRow方法创建一个新的行对象。
然后,使用createCell方法在行中创建单元格对象。
通过设置单元格的值,可以定义表头的内容。
4. 导出数据接下来,我们可以使用循环遍历数据集,并将数据写入Excel文件中。
每个数据项都可以被写入单元格对象中。
可以根据需要设置单元格的格式和样式。
5. 保存文件当所有数据都被写入Excel文件后,我们可以使用FileOutputStream类将工作簿中的数据保存到硬盘上的某个位置。
通过指定文件路径和文件名,可以将Excel文件保存在所需的位置。
6. 完整代码示例javaimport ermodel.HSSFWorkbook;import ermodel.*;import java.io.FileOutputStream;import java.util.List;public class ExcelExporter {public static void export(List<DataObject> data, String filePath) {try {Workbook workbook = new HSSFWorkbook();Sheet sheet = workbook.createSheet("Sheet 1");创建表头Row headerRow = sheet.createRow(0);Cell cell = headerRow.createCell(0);cell.setCellValue("Column 1");cell = headerRow.createCell(1);cell.setCellValue("Column 2");...导出数据int rowNum = 1;for (DataObject obj : data) {Row row = sheet.createRow(rowNum++);cell = row.createCell(0);cell.setCellValue(obj.getField1());cell = row.createCell(1);cell.setCellValue(obj.getField2());...}保存文件FileOutputStream fileOut = new FileOutputStream(filePath);workbook.write(fileOut);fileOut.close();System.out.println("Excel文件导出成功!");} catch (Exception e) {e.printStackTrace();}}}示例中,我们通过export方法将一个包含数据对象的列表导出到Excel文件中。
java输出表格
竭诚为您提供优质文档/双击可除java输出表格篇一:java导出报表exceljava导出excel表格20xx-06-0111:03:56作者:zhuangjixiang收藏我要投稿[java]之前做项目的时候需要数据库导出excel格式,由于项目赶没完成,现在分享下如何用java导出excel。
话不多说案例如下:之前做项目的时候需要数据库导出excel格式,由于项目赶没完成,现在分享下如何用java导出excel。
话不多说案例如下:首先要做的是导入一个jxl的包,网上很多。
首先是不连接数据库数据[java]packagejxltest;importjava.io.Fileoutputstream;importjava.io.outputstream;importjava.text.simpledateFormat; importjava.util.arraylist; importjava.util.date; importjava.util.list;importjxl.*;importjxl.format.alignment; importjxl.format.border; importjxl.format.borderlinestyle; importjxl.format.cellFormat; importjxl.write.boolean; bel;importjxl.write.number; importjxl.write.writablecellFormat; importjxl.write.writableFont; importjxl.write.writablesheet; importjxl.write.writableworkbook; publicclassjxlexample{/***数据库导出至excel表格*/publicstaticvoidmain(string[]args){ //准备设置excel工作表的标题string[]title={"编号","产品名称","产品价格","产品数量","生产日期","产地","是否出口"};try{//获得开始时间longstart=system.currenttimemillis();//输出的excel的路径stringfilepath="e:\\testjxl.xls";//创建excel工作薄writableworkbookwwb;//新建立一个jxl文件,即在e盘下生成testjxl.xlsoutputstreamos=newFileoutputstream(filepath);wwb=workbook.createworkbook(os);//添加第一个工作表并设置第一个sheet的名字writablesheetsheet=wwb.createsheet("产品清单",0);labellabel;for(inti=0;i //label(x,y,z)代表单元格的第x+1列,第y+1行,内容z//在label对象的子对象中指明单元格的位置和内容label=newlabel(i,0,title[i]);//将定义好的单元格添加到工作表中sheet.addcell(label);}//下面是填充数据/**保存数字到单元格,需要使用jxl.write.number*必须使用其完整路径,否则会出现错误**///填充产品编号jxl.write.numbernumber=newjxl.write.number(0,1,20xx 1001);sheet.addcell(number);//填充产品名称label=newlabel(1,1,"金鸽瓜子");sheet.addcell(label);/**定义对于显示金额的公共格式*jxl会自动实现四舍五入*例如2.456会被格式化为 2.46,2.454会被格式化为2.45**/jxl.write.numberFormatnf=newjxl.write.numberFormat("#.##");jxl.write.writablecellFormatwcf=newjxl.write.writab lecellFormat(nf);//填充产品价格jxl.write.numbernb=newjxl.write.number(2,1,2.45,wcf);sheet.addcell(nb);//填充产品数量jxl.write.numbernumb=newjxl.write.number(3,1,200);sheet.addcell(numb);/**定义显示日期的公共格式*如:yyyy-mm-ddhh:mm**/simpledateFormatsdf=newsimpledateFormat("yyyy-mm-dd ");stringnewdate=sdf.format(newdate());//填充出产日期label=newlabel(4,1,newdate);sheet.addcell(label);//填充产地label=newlabel(5,1,"陕西西安");sheet.addcell(label);/**显示布尔值**/jxl.write.booleanbool=newjxl.write.boolean(6,1,true);sheet.addcell(bool);/**合并单元格*通过writablesheet.mergecells(intx,inty,intm,intn);来实现的*表示将从第x+1列,y+1行到m+1列,n+1行合并***/sheet.mergecells(0,3,2,3);label=newlabel(0,3,"合并了三个单元格");packagejxltest;importjava.io.Fileoutputstream;importjava.io.outputstream; importjava.text.simpledateFormat; importjava.util.arraylist; importjava.util.date; importjava.util.list;importjxl.*;importjxl.format.alignment; importjxl.format.border; importjxl.format.borderlinestyle; importjxl.format.cellFormat; importjxl.write.boolean; bel;importjxl.write.number; importjxl.write.writablecellFormat; importjxl.write.writableFont; importjxl.write.writablesheet; importjxl.write.writableworkbook; publicclassjxlexample{/***数据库导出至excel表格*/publicstaticvoidmain(string[]args){//准备设置excel工作表的标题string[]title={"编号","产品名称","产品价格","产品数量","生产日期","产地","是否出口"};try{//获得开始时间longstart=system.currenttimemillis();//输出的excel的路径stringfilepath="e:\\testjxl.xls";//创建excel工作薄writableworkbookwwb;//新建立一个jxl文件,即在e盘下生成testjxl.xlsoutputstreamos=newFileoutputstream(filepath);wwb=workbook.createworkbook(os);//添加第一个工作表并设置第一个sheet的名字writablesheetsheet=wwb.createsheet("产品清单",0);labellabel;for(inti=0;i //label(x,y,z)代表单元格的第x+1列,第y+1行,内容z//在label对象的子对象中指明单元格的位置和内容label=newlabel(i,0,title[i]);//将定义好的单元格添加到工作表中sheet.addcell(label);}//下面是填充数据/**保存数字到单元格,需要使用jxl.write.number*必须使用其完整路径,否则会出现错误**///填充产品编号jxl.write.numbernumber=newjxl.write.number(0,1,20xx 1001);sheet.addcell(number);//填充产品名称label=newlabel(1,1,"金鸽瓜子");sheet.addcell(label);/**定义对于显示金额的公共格式*jxl会自动实现四舍五入*例如2.456会被格式化为 2.46,2.454会被格式化为2.45**/jxl.write.numberFormatnf=newjxl.write.numberFormat("#.##");jxl.write.writablecellFormatwcf=newjxl.write.writab lecellFormat(nf);//填充产品价格jxl.write.numbernb=newjxl.write.number(2,1,2.45,wcf);sheet.addcell(nb);//填充产品数量jxl.write.numbernumb=newjxl.write.number(3,1,200);sheet.addcell(numb);/**定义显示日期的公共格式*如:yyyy-mm-ddhh:mm**/simpledateFormatsdf=newsimpledateFormat("yyyy-mm-dd ");stringnewdate=sdf.format(newdate());//填充出产日期label=newlabel(4,1,newdate);sheet.addcell(label);//填充产地label=newlabel(5,1,"陕西西安");sheet.addcell(label);/**显示布尔值**/jxl.write.booleanbool=newjxl.write.boolean(6,1,true);sheet.addcell(bool);/**合并单元格*通过writablesheet.mergecells(intx,inty,intm,intn);来实现的*表示将从第x+1列,y+1行到m+1列,n+1行合并***/sheet.mergecells(0,3,2,3);label=newlabel(0,3,"合并了三个单元格");[java]viewplaincopyprintsheet.addcell(label);***定义公共字体格式*通过获取一个字体的样式来作为模板篇二:java实现生成pdF(包含文字,表格,图片) 需要的lib:itext-2.1.7.jaritextasian.jarpackagecom.demo.test;importjava.awt.color;importjava.io.File;importjava.io.Fileoutputstream;importcom.lowagie.text.chunk;importcom.lowagie.text.document;importcom.lowagie.text.Font;importcom.lowagie.text.chapter;importcom.lowagie.text.element;importcom.lowagie.text.image;importcom.lowagie.text.pagesize;importcom.lowagie.text.paragraph;importcom.lowagie.text.phrase;importcom.lowagie.text.pdf.baseFont;importcom.lowagie.text.pdf.pdfpcell;importcom.lowagie.text.pdf.pdfptable;importcom.lowagie.text.pdf.pdfwriter;/***生成pdF文件**@authorsmile*qq:1963938311**/publicclasspdFdemo{privatecolorblack=newcolor(0,0,0);//黑色privatecolorred=newcolor(255,0,0);//红色privatecolorblue=newcolor(0,0,255);//蓝色privateintbold=Font.bold;//粗体privateintnormal=Font.noRmal;//正常字体privateintitalic=Font.italic;//斜体privateintbolditalic=Font.bolditalic;//粗斜体privatefloatsetting=100;//首行缩进参数publicdocumentcreatedoc(stringfilename)throwsexception{。
java生成excel(多级表头)导出
java⽣成excel(多级表头)导出依赖⼯具包<dependencies><dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>5.3.5</version></dependency></dependencies>该⼯具包是对 Apache POI包的分装private void export(HttpServletResponse response, String fileName, List<?> projects, List<SummarizeDownloadColumns> columns) throws IOException { ExcelWriter bigWriter = ExcelUtil.getBigWriter();//创建⼀⾏空表头占个位置bigWriter.writeHeadRow(new LinkedList());//创建需要展⽰的的⼆级表头,{filedName,中⽂名}int lastCol = 0;for (int i = 0; i < columns.size(); i++) {if (columns.get(i).getChildren() != null) {for (int j = 0; j < columns.get(i).getChildren().size(); j++) {bigWriter.addHeaderAlias(columns.get(i).getChildren().get(j).getProp(), columns.get(i).getChildren().get(j).getLabel() + columns.get(i).getProp()); bigWriter.setColumnWidth(lastCol++, 30);}}}//根据需要合并添加第⼀列表头bigWriter.merge(0, 1, 0, 0, columns.get(0).getLabel(), true);bigWriter.merge(0, 0, 1, 14, "第⼀类(个⼈)", true);bigWriter.merge(0, 0, 15, 28, "第⼀类(企业)", true);bigWriter.merge(0, 0, 29, 42, "第⼆类(个⼈)", true);bigWriter.merge(0, 0, 43, 56, "第⼆类(企业)", true);bigWriter.merge(0, 0, 57, 64, "总计项", true);// 只导出配置好的列名bigWriter.setOnlyAlias(true);bigWriter.write(projects, true);StyleSet styleSet = bigWriter.getStyleSet();styleSet.setWrapText();response.setContentType("application/vnd.ms-excel;charset=utf-8");response.setHeader("filename", URLEncoder.encode(fileName + ".xlsx", "UTF-8"));ServletOutputStream out = response.getOutputStream();bigWriter.flush(out, true);bigWriter.close();IoUtil.close(out);}导出效果动态⽣成模板(只需要表头)String fileName = "sdjhds";try {ExcelWriter bigWriter = ExcelUtil.getBigWriter();List list = new ArrayList();list.add("表头1");list.add("表头2");bigWriter.writeHeadRow(list);response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(fileName, "utf-8") + ".xls");response.setHeader("filename", URLEncoder.encode(fileName, "utf-8") + ".xls");response.setHeader("Pragma", "no-cache");response.setHeader("Content-type", "application/octet-stream;charset=UTF-8");ServletOutputStream out = response.getOutputStream();bigWriter.flush(out, true);bigWriter.close();IoUtil.close(out);} catch (IOException e) {e.printStackTrace();}。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
class ExcelExport{
public String exportExcel() throws Exception{
//1:初始化数据
//excel的标题数据(只有一条)
ArrayList<String> fieldName = elecUserService.findFieldNameWithExcel();
//excel的内容数据(多条)
ArrayList<ArrayList<String>> fieldData = elecUserService.findFieldDataWithExcel(elecUser);
//2:调用封装的POI报表的导出类ExcelFileGenerator.java,完成excel报表的导出
ExcelFileGenerator excelFileGenerator = new ExcelFileGenerator(fieldName, fieldData);
/**导出报表的文件名*/
String filename = "用户报表("+DateUtils.dateToStringWithExcel(new Date())+").xls";
//处理乱码
filename = new String(filename.getBytes("gbk"),"iso-8859-1");
/**response中进行设置,总结下载,导出,需要io流和头*/
response.setContentType("application/vnd.ms-excel");
response.setHeader("Content-disposition", "attachment;filename="+filename);
response.setBufferSize(1024);
//获取输出流
OutputStream os = response.getOutputStream();
excelFileGenerator.expordExcel(os);//使用输出流,导出
return null;
}
}
class ExcelFileGenerator {
private final int SPLIT_COUNT = 15; //Excel每个工作簿的行数
private ArrayList<String> fieldName = null; //excel标题数据集
private ArrayList<ArrayList<String>> fieldData = null; //excel数据内容
private HSSFWorkbook workBook = null;
/**
* 构造器
* @param fieldName 结果集的字段名
* @param data
*/
public ExcelFileGenerator(ArrayList<String> fieldName, ArrayList<ArrayList<String>>
fieldData) {
this.fieldName = fieldName;
this.fieldData = fieldData;
}
/**
* 创建HSSFWorkbook对象
* @return HSSFWorkbook
*/
public HSSFWorkbook createWorkbook() {
workBook = new HSSFWorkbook();//创建一个工作薄对象
int rows = fieldData.size();//总的记录数
int sheetNum = 0; //指定sheet的页数
if (rows % SPLIT_COUNT == 0) {
sheetNum = rows / SPLIT_COUNT;
} else {
sheetNum = rows / SPLIT_COUNT + 1;
}
for (int i = 1; i <= sheetNum; i++) {//循环2个sheet的值
HSSFSheet sheet = workBook.createSheet("Page " + i);//使用workbook对象创建sheet对象
HSSFRow headRow = sheet.createRow((short) 0); //创建行,0表示第一行(本例是excel的标题)
for (int j = 0; j < fieldName.size(); j++) {//循环excel的标题
HSSFCell cell = headRow.createCell( j);//使用行对象创建列对象,0表示第1列
/**************对标题添加样式begin********************/
//设置列的宽度/
sheet.setColumnWidth(j, 6000);
HSSFCellStyle cellStyle = workBook.createCellStyle();//创建列的样式对象
HSSFFont font = workBook.createFont();//创建字体对象
//字体加粗
font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
//字体颜色变红
font.setColor(HSSFColor.RED.index);
//如果font中存在设置后的字体,并放置到cellStyle对象中,此时该单元格中就具有了样式字体
cellStyle.setFont(font);
/**************对标题添加样式end********************/
//添加样式
cell.setCellType(HSSFCell.CELL_TYPE_STRING);
if(fieldName.get(j) != null){
//将创建好的样式放置到对应的单元格中
cell.setCellStyle(cellStyle);
cell.setCellValue((String) fieldName.get(j));//为标题中的单元格设置值}else{
cell.setCellValue("-");
}
}
//分页处理excel的数据,遍历所有的结果
for (int k = 0; k < (rows < SPLIT_COUNT ? rows : SPLIT_COUNT); k++) {
if (((i - 1) * SPLIT_COUNT + k) >= rows)//如果数据超出总的记录数的时候,就退出循环
break;
HSSFRow row = sheet.createRow((short) (k + 1));//创建1行
//分页处理,获取每页的结果集,并将数据内容放入excel单元格
ArrayList<String> rowList = (ArrayList<String>) fieldData.get((i - 1) * SPLIT_COUNT + k);
for (int n = 0; n < rowList.size(); n++) {//遍历某一行的结果
HSSFCell cell = row.createCell( n);//使用行创建列对象
if(rowList.get(n) != null){
cell.setCellValue((String) rowList.get(n).toString());
}else{
cell.setCellValue("");
}
}
}
}
return workBook;
}
public void expordExcel(OutputStream os) throws Exception {
workBook = createWorkbook();
workBook.write(os);//将excel中的数据写到输出流中,用于文件的输出
os.close();
}
}。