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文件。
java实现导出Excel(跨行跨列)
java实现导出Excel(跨行跨列)在Java中,可以使用Apache POI库来实现导出Excel文件,并且可以实现跨行和跨列的功能。
Apache POI是一个开源的Java库,可以处理Microsoft Office格式的文档,包括Excel。
以下是使用Apache POI库实现导出Excel文件的步骤:1. 首先,需要引入Apache POI依赖。
可以在Maven或Gradle中添加以下依赖项:```xml<!-- Apache POI --><dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>4.1.2</version></dependency><dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>4.1.2</version></dependency>2. 创建一个Workbook对象,该对象代表一个Excel文件:```javaWorkbook workbook = new XSSFWorkbook(;```3. 创建一个Sheet对象,该对象代表Excel文件中的一个工作表:```javaSheet sheet = workbook.createSheet("Sheet1");```4. 创建行和单元格,根据需要设置跨行和跨列的属性。
可以使用CellRangeAddress类来实现跨行和跨列的功能:```javaRow row = sheet.createRow(0);Cell cell = row.createCell(0);cell.setCellValue("跨行跨列");//合并单元格,从第1行到第3行,从第1列到第5列CellRangeAddress cellRangeAddress = new CellRangeAddress(0, 2, 0, 4);sheet.addMergedRegion(cellRangeAddress);5. 将数据写入Excel文件中的单元格:```javaRow row = sheet.createRow(0);Cell cell = row.createCell(0);cell.setCellValue("Hello");```6. 将Workbook对象写入到文件中:```javaFileOutputStream fileOutputStream = new FileOutputStream("output.xlsx");workbook.write(fileOutputStream);fileOutputStream.close(;```完整的示例代码如下所示:```javaimport ermodel.*;import org.apache.poi.ss.util.CellRangeAddress;import ermodel.XSSFWorkbook;import java.io.FileOutputStream;import java.io.IOException;public class ExcelExporterpublic static void main(String[] args) throws IOExceptionWorkbook workbook = new XSSFWorkbook(;Sheet sheet = workbook.createSheet("Sheet1");Row row = sheet.createRow(0);Cell cell = row.createCell(0);cell.setCellValue("跨行跨列");//合并单元格,从第1行到第3行,从第1列到第5列CellRangeAddress cellRangeAddress = new CellRangeAddress(0, 2, 0, 4);sheet.addMergedRegion(cellRangeAddress);FileOutputStream fileOutputStream = newFileOutputStream("output.xlsx");workbook.write(fileOutputStream);fileOutputStream.close(;System.out.println("Excel文件导出成功!");}```执行该代码后,会在项目的根目录下生成一个名为`output.xlsx`的Excel文件,其中包含一个跨行和跨列的单元格。
Java导出Excel完整例子+完整代码,使用easypoi导出Excel+通用工具类
Java导出Excel完整例子+完整代码,使用easypoi导出Excel+通用工具类前言:在之前写Excel导入导出功能的时候,使用更多的可能是apache 的poi,相信用过poi的应该都会感觉poi使用起来还是有点点麻烦的,所以,如果你是:不太熟悉poi的、不想写太多重复太多的、只是简单的导入导出的。
那么相信我,使用easypoi绝对很适合。
easypoi,正如同它的名字一样,主打的功能就是容易,让一个没见接触过poi的人员,就可以很方便的写出Excel导出、Excel导入,通过简单的注解就可以完成以前复杂的写法。
so,今天就用easypoi来做一个导出Excel的完整案例,项目是SpringBoot的项目一、引入pom依赖<!-- excle导入导出依赖包 start --><dependency><groupId>cn.afterturn</groupId><artifactId>easypoi-base</artifactId><version>3.2.0</version></dependency><de pendency><groupId>cn.afterturn</groupId><artifactId>easyp oi-web</artifactId><version>3.2.0</version></dependency><de pendency><groupId>cn.afterturn</groupId><artifactId>easyp oi-annotation</artifactId><version>3.2.0</version></dependenc y><!-- excle导入导出依赖包 end -->注意:有的文章或者博客可能说可以不用上边三个依赖这么麻烦,直接用 easypoi-spring-boot-starter 一个依赖就可以了但是,用easypoi-spring-boot-starter 这个可能会导致你的springboot项目jar包依赖冲突,所以还是推荐使用上边的三个依赖二、定义需要导出的实体对象Userimport cn.afterturn.easypoi.excel.annotation.Excel;import cn .afterturn.easypoi.excel.annotation.ExcelTarget;import lombok.D ata;import java.io.Serializable;import java.util.Date;/*** 导出对应的实体类** @author caoju*/@ExcelTarget("user")@Datapublic class User implements Serializable {@Excel(name = "id",width=7)private In teger id;@Excel(name = "姓名",width=15)private String name;@Excel(name = "性别",replace = { "男_1", "女_2" },width=10)private Integer sex;@Excel(name = "创建时间",exportFormat = "yyyy-MM-dd HH:mm:ss",width=25)private Date createTime;}三、Excel导出工具类和导出自定义样式类不要看下面的两个类这么长,好像多复杂似的别担心!就是个工具类而已啦~你懂的,直接ctrl c、ctrl v(我也懂的,热爱编程的你,最喜欢的就是这个 c v大法,简单粗暴,不多bibi!hia hia hia~~~)import cn.afterturn.easypoi.excel.ExcelExportUtil;import cn. afterturn.easypoi.excel.entity.ExportParams;import cn.afterturn.e asypoi.excel.entity.TemplateExportParams;import cn.afterturn.ea sypoi.excel.entity.enmus.ExcelType;import com.xiaoleilu.hutool.d ate.DateUtil;import com.xiaoleilu.hutool.util.StrUtil;import lomb ok.extern.slf4j.Slf4j;import ermodel.Workbo ok;import javax.servlet.http.HttpServletResponse;import java.io.I OException;import java.io.OutputStream;import .URLEnc oder;import java.util.ArrayList;import java.util.List;import java.uti l.Map;/*** Excel导出工具类** @author caoju*/@Slf4jpublic class ExcelUtils {/** 允许导出的最大条数 */private static final Integer EXPORT_EXCEL_MAX_NUM = 10000;/*** 导出Excel** @param workbook workbook流* @param fileName 文件名* @param response 响应*/public static void exportExcel(Workbook workbook, String file Name, HttpServletResponse response) {//给文件名拼接上日期fileName = fileName + StrUtil.UNDERLINE + DateUtil.today();//输出文件try (OutputStream out = response.getOutputStream()) {//获取文件名并转码String name = URLEncoder.encode(fileName, "UTF-8");//设置编码response.setCharacterEncoding("UTF-8");//设置http响应头告诉浏览器,以下载的形式处理响应的数据response.setContentType("application/force-download");//设置下载文件的默认名称response.setHeader("Content-Disposition", "attachment;filename=" + name + ".xlsx");//输出表格workbook.write(out);} catch (IOException e) {log.error("文件导出异常,详情如下:", e);} finally {try {if (workbook != null) {//关闭输出流workbook.close();}} catch (IOException e) {log.error("文件导出异常,详情如下:", e);}}}/*** 获取导出的 Workbook对象** @param title 大标题* @param sheetName 页签名* @param object 导出实体* @param list 数据集合* @return Workbook*/public static Workbook getWorkbook(Stri ng title, String sheetName, Class object, List list) {//判断导出数据是否为空if (list == null) {list = new ArrayList<>();}//判断导出数据数量是否超过限定值if (list.size() > EXPORT_EXCEL_MAX_NUM) {title = "导出数据行数超过:" + EXPORT_EXCEL_MAX_NUM + "条,无法导出、请添加查询条件后再进行导出!";list = new ArrayList<>();}//导出参数ExportParams exportParams = new ExportParams(title, sheetNa me, ExcelType.XSSF);//设置导出样式,可以不设置使用默认的样式,这里用的是自定义样式exportParams.setStyle(ExcelStyle.class);//输出Workbook流return ExcelExportUtil.exportExcel(exportParams, object, list);}/** * 获取导出的 Workbook对象** @param path 模板路径* @param map 导出内容map* @return Workbook*/public static Workbook getWorkboo k(String path, Map<String, Object> map) {//获取导出模板TemplateExportParams params = new TemplateExportParams(p ath);//设置导出样式params.setStyle(ExcelStyle.class);//输出Workbook流return ExcelExportUtil.exportExcel(params, map);}} import cn.afterturn.easypoi.excel.entity.params.ExcelExportE ntity;import cn.afterturn.easypoi.excel.entity.params.ExcelForEac hParams;import cn.afterturn.easypoi.excel.export.styler.ExcelExp ortStylerDefaultImpl;import cn.afterturn.easypoi.excel.export.sty ler.IExcelExportStyler;import ermodel.*;/*** Excel导出自定义样式类** @author caoju*/public class ExcelStyle extends ExcelExportSt ylerDefaultImpl implements IExcelExportStyler {private static fin al short STRING_FORMAT = (short) BuiltinFormats.getBuiltinFor mat("TEXT");private static final short FONT_SIZE_TEN = 10;privat e static final short FONT_SIZE_ELEVEN = 11;private static final sh ort FONT_SIZE_TWELVE = 12;/*** 大标题样式*/private CellStyle headerStyle;/*** 每列标题样式*/private CellStyle titleStyle;/*** 数据行样式*/private CellStyle styles;public ExcelStyle(Workbook workbook) {super(workbook);this.init(workbook);}/*** 初始化样式** @param workbook*/private void init(Workbook workbook) {/ /大标题样式this.headerStyle = initHeaderStyle(workbook);//每列标题样式this.titleStyle = initTitleStyle(workbook);//数据行样式this.styles = initStyles(workbook);}/*** 大标题样式** @param color* @return*/@Overridepublic CellStyle getHead erStyle(short color) {return headerStyle;}/*** 每列标题样式** @param color* @return*/@Overridepublic CellStyle getTitleS tyle(short color) {return titleStyle;}/*** 数据行样式** @param parity 可以用来表示奇偶行* @param entity 数据内容* @return 样式*/@Overridepublic CellStyle getStyles(boolean parity, ExcelExpo rtEntity entity) {return styles;}/*** 获取样式方法** @param dataRow 数据行* @param obj 对象* @param data 数据*/@Overridepublic CellStyle getStyles(Cell cell, int dataRow, Exc elExportEntity entity, Object obj, Object data) {return getStyles(t rue, entity);}/*** 模板使用的样式设置*/@Overridepublic CellStyle getT emplateStyles(boolean isSingle, ExcelForEachParams excelForEachParams) {return null;}/*** 初始化--大标题样式** @param workbook* @return*/private CellStyle initHeaderStyl e(Workbook workbook) {CellStyle style = getBaseCellStyle(work book);style.setFont(getFont(workbook, FONT_SIZE_TWELVE, tru e));return style;}/*** 初始化--每列标题样式** @param workbook* @return*/private CellStyle initTitleStyle( Workbook workbook) {CellStyle style = getBaseCellStyle(workbo ok);style.setFont(getFont(workbook, FONT_SIZE_ELEVEN, false)); //背景色 POI IndexedColors 编码与颜色枚举类对照 : https:///ju_362204801/article/details/1060791 71style.setFillForegroundColor(IndexedColors.PALE_BLUE.getInd ex());style.setFillPattern(FillPatternType.SOLID_FOREGROUND);re turn style;}/*** 初始化--数据行样式** @param workbook* @return*/private CellStyle initStyles(Wor kbook workbook) {CellStyle style = getBaseCellStyle(workbook); style.setFont(getFont(workbook, FONT_SIZE_TEN, false));style.se tDataFormat(STRING_FORMAT);return style;}/*** 基础样式** @return*/private CellStyle getBaseCellStyle(Workbook workb ook) {CellStyle style = workbook.createCellStyle();//下边框style.setBorderBottom(BorderStyle.THIN);//左边框style.setBorderLeft(BorderStyle.THIN);//上边框style.setBorderTop(BorderStyle.THIN);//右边框style.setBorderRight(BorderStyle.THIN);//水平居中style.setAlignment(HorizontalAlignment.CENTER);//上下居中style.setVerticalAlignment(VerticalAlignment.CENTER);//设置自动换行style.setWrapText(true);return style;}/*** 字体样式** @param size 字体大小* @param isBold 是否加粗* @return*/private Font getFont(Workbook workbook, short siz e, boolean isBold) {Font font = workbook.createFont();//字体样式font.setFontName("宋体");//是否加粗font.setBold(isBold);//字体大小font.setFontHeightInPoints(size);return font;}} 再说一下哈,上边面两个类虽然很长,但就是个工具类而已啦~ 不多说!你懂的!直接ctrl c、ctrl v四、测试导出方法的Controllerimport mon.collect.Lists;import com.qtyc.u tils.ExcelUtils;import org.springframework.web.bind.annotation. RequestMapping;import org.springframework.web.bind.annotat ion.RequestMethod;import org.springframework.web.bind.anno tation.RestController;import javax.servlet.http.HttpServletRespo nse;import java.util.Date;import java.util.List;/*** 导出Excel测试Controller** @author caoju*/@RestControllerpublic class ExcelE xportController {/*** 导出Excel测试*/@RequestMapping(value = "/exportExcelTest", method = Req uestMethod.GET)public void exportExcelTest(HttpServletRespon se response) {List<User> personList = this.findUser();ExcelUtils.e xportExcel(ExcelUtils.getWorkbook("用户信息列表", "用户信息", User.class, personList), "用户信息列表导出", response);}/*** 模拟数据库查询返回用户信息*/private List<User> findUser() {List<User> list = Lists.newArray List();User user = new User();user.setId(10);user.setName("张三");user.setSex(1);user.setCreateTime(new Date());list.add(user);Us er user1 = new User();user1.setId(26);user1.setName("李四");user1.setSex(1);user1.setCreateTime(new Date());list.add(user1 );User user2 = new User();user2.setId(28);user2.setName("王丽");user2.setSex(2);user2.setCreateTime(new Date());list.add(user2 );return list;}}五、测试浏览器输入:可以看到浏览器左下角弹出了下载窗口,自动下载了Excel打开下载的文件夹可以看到刚才下载的Excel打开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();}}}以上为个⼈经验,希望能给⼤家⼀个参考,也希望⼤家多多⽀持。
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 最佳实践,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>标签访即可。
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 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文件中。
SpringBoot实现Excel导入导出好用到爆POI可以扔掉了
SpringBoot实现Excel导入导出好用到爆POI可以扔掉了SpringBoot是一个适用于开发Java应用程序的开源框架,可以用于构建独立的、可扩展且高效的应用程序。
在SpringBoot中,我们可以很方便地实现Excel的导入和导出功能,而且使用起来非常简单方便,大大提高了开发效率。
在传统的Java应用程序开发中,我们通常使用Apache POI这个库来处理Excel文件。
POI是一个非常强大的Java库,可以读写Excel文件,但是使用起来相对麻烦,并且需要大量的代码来处理各种复杂的Excel格式。
而在SpringBoot中,我们可以使用一些开源的库来简化Excel的导入导出操作,例如EasyExcel、JExcel和Apache POI提供的SXSSFWorkbook等。
首先,我们来看一下如何实现Excel的导入功能。
在SpringBoot中,我们可以使用EasyExcel这个库来实现Excel的导入功能。
EasyExcel是阿里巴巴开源的一个用于读写Excel文件的Java库,与Apache POI相比,EasyExcel的使用更加简洁高效。
要使用EasyExcel实现Excel的导入功能,我们只需要引入EasyExcel的依赖,并编写一些简单的代码即可。
下面是一个示例:1. 首先,我们需要在pom.xml文件中添加EasyExcel的依赖:```xml<dependency><artifactId>easyexcel</artifactId><version>2.2.11</version></dependency>```2. 接下来,我们需要创建一个用于处理Excel导入的Controller类,例如:```javapublic class ExcelControllertryEasyExcel.read(file.getInputStream(, ExcelData.class, new ExcelDataListener().sheet(.doRead(;return "导入成功";} catch (IOException e)e.printStackTrace(;return "导入失败";}}```3. 最后,我们需要创建一个实现`AnalysisEventListener`接口的类,用于处理Excel文件的数据。
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();}。
excelexportutil.exportexcel 用法 -回复
excelexportutil.exportexcel 用法-回复Excelexportutil是一个用于导出Excel文件的工具类,在Java开发中被广泛使用。
它提供了一些方便的方法,可以快速将数据导出到Excel表格中,并且支持自定义样式和格式。
本文将以"excelexportutil.exportexcel 用法"为主题,从简介、导出数据、自定义样式和格式三个方面,一步一步地回答问题,帮助读者了解和使用Excelexportutil。
第一部分:简介Excelexportutil是一个开源的Java类库,可以方便地导出数据到Excel 表格中。
它基于POI(Apache POI)库开发,提供了一系列的方法和工具,简化了数据导出的流程,减少了开发人员的工作量。
第二部分:导出数据使用Excelexportutil导出数据非常简单。
首先,导入相关的类和包:import com.example.util.Excelexportutil;import com.example.model.DataModel;接下来,创建一个包含需要导出的数据的列表:List<DataModel> dataList = new ArrayList<>();dataList.add(new DataModel("张三", 20, "男"));dataList.add(new DataModel("李四", 25, "女"));然后,调用Excelexportutil的exportExcel方法进行导出:Excelexportutil.exportExcel(dataList, "导出数据", "Sheet1", DataModel.class, "导出文件.xlsx");上述代码中,第一个参数是数据列表,第二个参数是导出文件的标题,第三个参数是Sheet的名称,第四个参数是数据模型的Class对象,第五个参数是导出文件的名称。
easypoi template 汇总合计
Easypoi是一个Java的Excel导入导出工具,它可以帮助我们快速、方便地对Excel进行操作。
其中,Easypoi的template模板功能可以用来实现对Excel模板的导出和导入,而在导出和导入的过程中,我们经常需要对数据进行汇总和合计。
本文将结合Easypoi的template 功能,探讨如何实现Excel模板的汇总合计,并给出相应的示例代码。
一、使用Easypoi实现Excel模板的导出1. 创建Excel模板文件在使用Easypoi导出Excel模板之前,首先需要创建一个Excel文件作为模板。
可以使用Excel软件手动创建一个模板,也可以使用Easypoi提供的注解和POJO类来动态生成模板文件。
2. 导出数据到模板在创建好模板文件之后,我们可以使用Easypoi的导出功能将数据导出到模板中。
通过指定数据源和模板文件,Easypoi可以自动将数据填充到指定位置,并生成最终的Excel文件。
二、使用Easypoi实现Excel模板的导入1. 上传Excel模板文件当用户需要导入Excel数据时,我们首先需要提供一个上传Excel 文件的功能。
用户可以通过网页或其他方式将Excel文件上传到系统中。
2. 解析Excel文件接收到用户上传的Excel文件后,我们可以使用Easypoi的导入功能对Excel文件进行解析。
Easypoi可以根据模板文件的格式自动将Excel中的数据解析成相应的POJO对象,方便后续的操作和处理。
三、汇总合计的实现1. 汇总数据在导入Excel数据后,我们可能需要对数据进行汇总,以便对整体情况进行分析和统计。
Easypoi提供了相应的API可以帮助我们实现数据的汇总功能。
2. 合计数据除了汇总数据外,有时还需要对某些字段进行合计,例如某一列的总和或平均值。
Easypoi同样提供了API来帮助我们实现对数据的合计。
四、示例代码1. Excel模板的导出```java// 创建Excel模板Workbook workbook = new HSSFWorkbook();Sheet sheet = workbook.createSheet("Sheet1");Row row = sheet.createRow(0);Cell cell = row.createCell(0);cell.setCellValue("尊称");// ... 其他字段FileOutputStream fos = new FileOutputStream("template.xls"); workbook.write(fos);fos.close();```2. Excel模板的导入```java// 解析Excel文件FileInputStream fis = new FileInputStream("import.xlsx"); ImportParams params = new ImportParams();params.setTitleRows(1);params.setHeadRows(1);List<User> list = ExcelImportUtil.importExcel(fis, User.class, params);```3. 数据的汇总和合计```java// 汇总数据List<User> userList = new ArrayList<>();// ... 添加数据int totalAge = userList.stream().mapToInt(User::getAge).sum(); // 合计数据double averageScore =userList.stream().mapToDouble(User::getScore).average().orElse( 0.0);```五、总结通过Easypoi的template功能,我们可以方便地实现Excel模板的导出和导入,并且可以轻松地对数据进行汇总和合计。
Java导出Excel使用POI之SXSSFWorkbook方式
package avicit.mms.mes.mesexceptionbillz.service;
import java.io.Serializable; import java.text.SimpleDateFormat; import java.util.List; import java.util.Map;
import ermodel.HSSFCellStyle; import org.apache.poi.hssf.util.HSSFColor; import ermodel.Cell; import ermodel.CellStyle; import ermodel.Font; import ermodel.Row; import ermodel.Sheet; import org.apache.poi.ss.util.CellRangeAddress; import org.apache.poi.xssf.streaming.SXSSFSheet; import org.apache.poi.xssf.streaming.SXSSFWorkbook; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service;
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
headfont.setFontHeightInPoints((short) 22);// 字体大小
headfont.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);// 加粗
* 第四个参数:第二个单元格的列数(从0开始)
*/
CellRangeAddress range = new CellRangeAddress(0, 0, 0, 7);
sheet.addMergedRegion(range);
sheet.createFreezePane(1, 3);// 冻结
// 设置列宽
sheet.setColumnWidth(0, 1000);
sheet.setColumnWidth(1, 3500);
sheet.setColumnWidth(2, 3500);
centerstyle.setWrapText(true);
centerstyle.setLeftBorderColor(HSSFColor.BLACK.index);
centerstyle.setBorderLeft((short) 1);
centerstyle.setRightBorderColor(HSSFColor.BLACK.index);
columnHeadStyle.setBorderLeft((short) 1);// 边框的大小
columnHeadStyle.setRightBorderColor(HSSFColor.BLACK.index);// 右边框的颜色
columnHeadStyle.setBorderRight((short) 1);// 边框的大小
columnHeadStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);// 左右居中
columnHeadStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);// 上下居中
centerstyle.setFillForegroundColor(HSSFColor.WHITE.index);// 设置单元格的背景颜色.
try {
// 创建第一行
HSSFRow row0 = sheet.createRow(0);
centerstyle.setBorderRight((short) 1);
centerstyle.setBorderBottom(HSSFCellStyle.BORDER_THIN); // 设置单元格的边框为粗体
centerstyle.setBottomBorderColor(HSSFColor.BLACK.index); // 设置单元格的边框颜色.
style.setFillForegroundColor(HSSFColor.WHITE.index);// 设置单元格的背景颜色.
// 另一个样式
HSSFCellStyle centerstyle = workbook.createCellStyle();
font.setFontName("宋体");
font.setFontHeightInPoints((short) 10);
// 普通单元格样式
HSSFCellStyle style = workbook.createCellStyle();
sheet.setColumnWidth(7, 2500);
// Sheet样式
HSSFCellStyle sheetStyle = workbook.createCellStyle();
// 背景色的设定
sheetStyle.setFillBackgroundColor(HSSFColor.GREY_25_PERCENT.index);
// 设置行高
row0.setHeight((short) 900);
// 创建第一列
HSSFCell cell0 = row0.createCell(0);
cell0.setCellValue(new HSSFRichTextString("中非发展基金投资项目调度会工作落实情况对照表"));
style.setWrapText(true);
style.setLeftBorderColor(HSSFColor.BLACK.index);
style.setBorderLeft((short) 1);
style.setRightBorderColor(HSSFColor.BLACK.index);
// 另一个字体样式
HSSFFont columnHeadFont = workbook.createFont();
columnHeadFont.setFontName("宋体");
columnHeadFont.setFontHeightInPoints((short) 10);
cell0.setCellStyle(headstyle);
/**
* 合并单元格
* 第一个参数:第一个单元格的行数(从0开始)
* 第二个参数:第二个单元格的行数(从0开始)
* 第三个参数:第一个单元格的列数(从0开始)
// 另一个样式
HSSFCellStyle headstyle = workbook.createCellStyle();
headstyle.setFont(headfont);
headstyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);// 左右居中
columnHeadStyle.setBorderBottom(HSSFCellStyle.BORDER_THIN); // 设置单元格的边框为粗体
columnHeadStyle.setBottomBorderColor(HSSFColor.BLACK.index); // 设置单元格的边框颜色
centerstyle.setFont(font);
centerstyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);// 左右居中
centerstyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);// 上下居中
HSSFWorkBooK用法 .
public ActionResult excelPrint() {
HSSFWorkbook workbook = new HSSFWorkbook();// 创建一个Excel文件
HSSFSheet sheet = workbook.createSheet();// 创建一个Excel的Sheet
// 设置列的样式
for (int i = 0; i <= 14; i++) {
sheet.setDefaultColumnStyle((short) i, sheetStyle);
}
// 设置字体
HSSFFont headfont = workbook.createFont();
// 前景色的设定
sheetStyle.setFillForegroundColor(HSSFColor.GREY_25_PERCENT.index);
// 填充模式
sheetStyle.setFillPattern(HSSFCellStyle.FINE_DOTS);
sheet.setCoeet.setColumnWidth(4, 6500);
sheet.setColumnWidth(5, 6500);
sheet.setColumnWidth(6, 6500);
style.setBorderRight((short) 1);
style.setBorderBottom(HSSFCellStyle.BORDER_THIN); // 设置单元格的边框为粗体
style.setBottomBorderColor(HSSFColor.BLACK.index); // 设置单元格的边框颜色.
headstyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);// 上下居中
headstyle.setLocked(true);
headstyle.setWrapText(true);// 自动换行
style.setFont(font);
style.setAlignment(HSSFCellStyle.ALIGN_LEFT);// 左右居中
style.setVerticalAlignment(HSSFCellStyle.VERTICAL_TOP);// 上下居中
// 创建第二行
HSSFRow row1 = sheet.createRow(1);
HSSFCell cell1 = row1.createCell(0);
cell1.setCellValue(new HSSFRichTextString("本次会议时间:2009年8月31日 前次会议时间:2009年8月24日"));
columnHeadStyle.setLocked(true);
columnHeadStyle.setWrapText(true);
columnHeadStyle.setLeftBorderColor(HSSFColor.BLACK.index);// 左边框的颜色