Java Excel导出

一、Excel依赖包POI

(1)Maven配置

        <dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>3.7</version></dependency>

(2)jar下载地址http://poi.apache.org/download.html


二、Java代码实例

Excel工具代码

package com.mk.util;import com.mk.bean.LogInfo;
import org.apache.poi.hssf.usermodel.*;import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.apache.poi.ss.util.CellRangeAddress;public class Excels {public static byte[] export(String sheetName, String title, List<LogInfo> list, int start, int end) {if (list == null||start>end) {return null;}HSSFWorkbook workbook = new HSSFWorkbook(); //工作簿initWorkbook(workbook, sheetName, title, list,start,end);//先写到字节数组,在从字节数组读出  ByteArrayOutputStream os = new ByteArrayOutputStream();try {workbook.write(os);byte[] bytes = os.toByteArray();return bytes;} catch (IOException ex) {Logger.getLogger(Excels.class.getName()).log(Level.SEVERE, null, ex);} finally {try {os.close();} catch (IOException ex) {Logger.getLogger(Excels.class.getName()).log(Level.SEVERE, null, ex);}}return null;}private static final int MAX_ROWS = 65535;/*** 初始化工作簿* @param workbook 工作簿* @param sheetName 工作表名* @param title  标题* @param list  数据* @param start 起始索引,起始值为0* @param end   截止索引,为末尾索引+1*/private static void initWorkbook(HSSFWorkbook workbook, String sheetName, String title,List<LogInfo> list, int start, int end) {assert end - start <= MAX_ROWS - 2;HSSFSheet sheet = workbook.createSheet(sheetName); //工作表 initTitle(workbook, sheet, title, 0, 16, 800, 0, 0, 0, 2);// 属性样式 HSSFCellStyle attrCellStyle = createStyle(workbook, 10, true, HSSFFont.BOLDWEIGHT_BOLD);// 默认样式HSSFCellStyle defaultCellStyle = createStyle(workbook, 10, true, HSSFFont.BOLDWEIGHT_NORMAL);//属性行HSSFRow attrRow = sheet.createRow(1);final int baseFont=10;sheet.setColumnWidth(0, baseFont*400);sheet.setColumnWidth(1, baseFont*800);sheet.setColumnWidth(2, baseFont*1200);HSSFCell cell = attrRow.createCell(0);cell.setCellValue("索引");cell.setCellStyle(attrCellStyle);cell = attrRow.createCell(1);cell.setCellValue("时间");cell.setCellStyle(attrCellStyle);cell = attrRow.createCell(2);cell.setCellValue("信息");cell.setCellStyle(attrCellStyle);DateFormat dateFomater = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");for (int i = 2; start < end; i++) {LogInfo logInfo = list.get(start++);HSSFRow row = sheet.createRow(i);//除开标题和属性行//索引cell = row.createCell(0);cell.setCellValue(logInfo.getIndex());cell.setCellStyle(defaultCellStyle);//时间cell = row.createCell(1);cell.setCellValue(dateFomater.format(logInfo.getTime()));cell.setCellStyle(defaultCellStyle);//信息cell = row.createCell(2);cell.setCellValue(logInfo.getInfo());cell.setCellStyle(defaultCellStyle);}}/*** 设置工作表标题** @param workbook 工作簿* @param sheet 工作表* @param title 标题* @param rowIndex 当前行* @param fontSize 字体* @param height 高度* @param firstRow 合并区域起始行* @param lastRow 合并区域末尾行* @param firstCol 合并区域起始列* @param lastCol 合并区域末尾列*/private static void initTitle(HSSFWorkbook workbook, HSSFSheet sheet,String title, int rowIndex, int fontSize, int height, int firstRow,int lastRow, int firstCol, int lastCol) {HSSFCellStyle titleCellStyle = createStyle(workbook, fontSize, true, HSSFFont.BOLDWEIGHT_BOLD);//标题行HSSFRow titleRow = sheet.createRow(0);titleRow.setHeight((short) height);    //标题行高度HSSFCell titleCell = titleRow.createCell(rowIndex);  //标题单元titleCell.setCellValue(title);   //设置标题titleCell.setCellStyle(titleCellStyle);sheet.addMergedRegion(new CellRangeAddress(firstRow, lastRow, firstCol, lastCol));//指定合并区域  }private static HSSFCellStyle createStyle(HSSFWorkbook workbook, int fontSize, boolean wrapText, short boldweight) {// 标题字体HSSFFont font = workbook.createFont();font.setFontHeightInPoints((short) fontSize);// 字体大小font.setBoldweight(boldweight);   //字体加粗//标题样式HSSFCellStyle cellStyle = workbook.createCellStyle();cellStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);//水平中间对齐cellStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);//垂直中间对其cellStyle.setBorderTop(HSSFCellStyle.BORDER_THIN); //顶边cellStyle.setBorderRight(HSSFCellStyle.BORDER_THIN);//右边cellStyle.setBorderBottom(HSSFCellStyle.BORDER_THIN);//底边cellStyle.setBorderLeft(HSSFCellStyle.BORDER_THIN); //左边cellStyle.setWrapText(wrapText);  //自动换行cellStyle.setFont(font);//样式字体return cellStyle;}
}

日志类

package com.mk.bean;import java.util.Date;public class LogInfo {private int index;private  Date time;private  String info;public int getIndex() {return index;}public void setIndex(int index) {this.index = index;}public Date getTime() {return time;}public void setTime(Date time) {this.time = time;}public String getInfo() {return info;}public void setInfo(String info) {this.info = info;}
}

测试代码

package com.mk.testmaven;import com.mk.bean.LogInfo;
import com.mk.util.Excels;
import java.io.FileOutputStream;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;public class Test {public static void main(String[] args) {List<LogInfo> list=new ArrayList<>();LogInfo logInfo=new LogInfo();logInfo.setIndex(0);logInfo.setInfo("你好");logInfo.setTime(new Date(2018,9,12));list.add(logInfo );logInfo=new LogInfo();logInfo.setIndex(1);logInfo.setInfo("问你");logInfo.setTime(new Date(2018,9,15));list.add(logInfo );logInfo=new LogInfo();logInfo.setIndex(2);logInfo.setInfo("世界");logInfo.setTime(new Date(2018,9,17));list.add(logInfo );byte[] bs=Excels.export("1", "日志", list,0,list.size());try (FileOutputStream outputStream=new FileOutputStream("D:/log.xls")){outputStream.write(bs);outputStream.flush();} catch (Exception e) {}}
}



本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/331340.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

junit4和junit5_JUnit5 TestSuite替代

junit4和junit5JUnit4具有TestSuite类来聚合多个测试。 这在JUnit 5中不可用。通常&#xff0c;通过套件中的一堆命名测试进行的测试发现有些糟透了。 但是&#xff0c;如果目标不是测试发现&#xff0c;而是不同测试类之间的资源共享&#xff0c;那么创建一个父对象是有意义的…

Redis入门(一)之安装

一、下载Redis &#xff08;1&#xff09;Window 下载地址&#xff1a;https://github.com/MSOpenTech/redis/releases &#xff08;2&#xff09;Linux 下载地址&#xff1a;http://redis.io/download 二、安装Redis &#xff08;1&#xff09;window版本 A.解压Redis的zi…

mockito参数匹配_Mockito匹配器优先

mockito参数匹配这篇文章是意见。 让我们看一下Mockito中用于在Java中进行测试的verify方法。 示例&#xff1a; verify(myMock).someFunction(123) –期望在模拟ONCE上使用输入123调用someFunction 。 BDDMockito &#xff0c;我更喜欢完整的BDDMockito替代方案&#xff0c…

Redis入门(二)之数据类型

一、Redis 数据类型 Redis支持五种数据类型&#xff1a; &#xff08;1&#xff09;string&#xff08;字符串&#xff09; &#xff08;2&#xff09;hash&#xff08;哈希&#xff09; &#xff08;3&#xff09;list&#xff08;列表&#xff09; &#xff08;4&#x…

关于Object.clone克隆方法的测试

【0】README 0.1&#xff09;本文旨在用源代码测试说明&#xff0c; Object.clone 的 的克隆机制&#xff08;深拷贝 还是 浅拷贝&#xff09; 的问题&#xff1b; 0.2&#xff09;本文还添加了对System.arraycopy本地方法的测试&#xff08;干货——推荐使用该方法进行数组复…

超音速 启动_超音速亚原子图

超音速 启动MicroProfile GraphQL现在包含在刚发布的Quarkus 1.5.0版本中。 现在&#xff0c;您可以使用code.quarkus.io开始使用Quarkus&#xff0c;并包括SmallRye GraphQL Extension 。 这将创建一个具有以下依赖关系的Quarkus启动器应用程序&#xff1a; <dependency…

Java Json解析

一、Json &#xff08;1&#xff09;语法a.名称/值对数据表示b.大括号持有的对象和每个名称后跟“&#xff1a;”&#xff08;冒号&#xff09;&#xff0c;名称/值对的分离&#xff0c;&#xff08;逗号&#xff09;。c.方括号持有数组和值&#xff0c;&#xff08;逗号&#…

flink 卡夫卡_卡夫卡–一次语义学

flink 卡夫卡在分布式环境中&#xff0c;故障是很常见的情况&#xff0c;可以随时发生。 在Kafka环境中&#xff0c;代理可能崩溃&#xff0c;网络故障&#xff0c;处理故障&#xff0c;发布消息时失败或无法使用消息等。这些不同的场景引入了不同类型的数据丢失和重复。 失败…

Word中标题、图表自动编号的方法

转自&#xff1a;http://blog.sciencenet.cn/blog-344887-543229.html一般情况下&#xff0c;Word文档需要为标题提供连续编号&#xff0c;默认的标题样式并没有自动编号的功能&#xff0c;系统默认的标题样式效果如下图&#xff1a;正确设置标题自动编号的方法具体步骤如下&am…

java jsp总结

一、jsp简介 JSP&#xff08;全称Java Server Pages&#xff09;是由 Sun Microsystems 公司倡导和许多公司参与共同创建的一种使软件开发者可以响应客户端请求&#xff0c;而动态生成 HTML、XML 或其他格式文档的Web网页的技术标准。 JSP 技术是以 Java 语言作为脚本语言的&am…

maven 构建增量包_使用Maven进行增量构建

maven 构建增量包这是2020年&#xff0c;如果您要开始任何新的基于Java的项目&#xff0c;那么gradle应该是第一选择&#xff0c;但是由于某些原因&#xff0c;如果您仍然对Maven感兴趣&#xff0c;那么您可能会发现这篇文章很有用。 Maven Java / scala编译器插件对增量编译提…

带Quarkus的Qute模板

Quarkus附带了自己的模板引擎Qute&#xff0c;该引擎已经包含了一组有趣的功能。 在下面的视频中&#xff0c;我将展示基于动作的MVC与JAX-RS的基本用法&#xff0c;该行为将我们的请求转发到HTML模板。 要自己尝试Qute&#xff0c;请查看以下资源&#xff1a; 示例项目 Qut…

Spring的IoC与DI差异

一、IoC IoC&#xff0c;全称为Inversion of Control&#xff0c;即控制反转。 IoC是依赖倒置原则的一种代码设计思想&#xff0c;把创建对象的权利交给框架&#xff0c;是框架的重要特征。其包括依赖注入&#xff08;Dependency Injection&#xff0c;简称DI&#xff09;和依赖…

jvm(3)-垃圾收集器与内存分配策略

【0】README0.1&#xff09;本文部分文字转自&#xff1a;深入理解jvm&#xff0c;旨在学习 垃圾收集器与内存分配策略 的基础知识&#xff1b;【1】垃圾回收概述1&#xff09;GC&#xff08;Garbage Collection&#xff09;需要完成的3件事情&#xff1a;哪些内容需要回收&…

防火墙例外里没有远程桌面_证明没有例外

防火墙例外里没有远程桌面您如何证明虚无的存在&#xff1f; 你应该&#xff1f; 在我编写的某些测试中&#xff0c;尤其是围绕验证或创建空对象的测试中&#xff0c;我真正想写的是这样的&#xff1a; assertThat( ... call some code ... ) .doesntThrow(); 您可以合理地编…

Java工程师必备技能

一、JavaSE &#xff08;1&#xff09;Java基础 1、数据结构 2、算法 3、包装类 4、字符串 5、异常处理 6、类与接口 7、泛型 8、集合 9、IO操作 10、序列化 11、迭代 12、枚举 13、properties 14、压缩 15、日期 &#xff08;2&#xff09;Java进阶 1、多线…

打破双亲委派么,怎么打破_打破了vs你错了

打破双亲委派么,怎么打破为微服务构建REST API时&#xff0c;需要做出一些关于响应的设计决策。 某些响应显然是微服务周围协议的产物-例如3xx代码之类的东西都与重定向和路由有关。 通常&#xff0c;您将尝试获取正确的2xx代码以取得成功。 如有疑问&#xff0c;将为200&…

java如何查看调用记录_查看Java记录

java如何查看调用记录JEP 359 &#xff08;可在JDK 14中用作预览功能&#xff09;将记录引入Java。 记录是对普通数据聚合建模的简单方法。 一个简单的范围记录如下所示&#xff1a; record Range( int from, int to) {} 记录定义实际上与具有以下内容的最终类相同&#xff1…

递归 反转字符串_使用递归反转字符串

递归 反转字符串1.简介 在本文中&#xff0c;您将学习如何使用递归方法来反转字符串。 第一个程序是反转字符串&#xff0c;第二个程序将读取用户的输入。 在之前的文章中&#xff0c;我已经展示了如何不使用任何内置函数来反转字符串&#xff0c;以及如何反转字符串中的单词 …

jvm(4)-虚拟机性能监控与故障处理工具

【0】README0.1&#xff09;本文文字描述转自 “深入理解jvm”&#xff0c;旨在了解 虚拟机性能监控与故障处理工具的基础知识&#xff08;仅仅在于了解&#xff09;&#xff1b; 【1】概述1&#xff09;给一个系统定位问题的时候&#xff0c;知识&#xff0c;经验是关键基础&a…