用poi来导出数据到excel文档
package cn.com.dyg.work.common.utils; import org.apache.poi.hssf.usermodel.HSSFRichTextString;
import org.apache.poi.hssf.usermodel.HSSFWorkbookFactory;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.ss.util.CellRangeAddress;
import org.apache.poi.xssf.usermodel.XSSFRichTextString;
import org.apache.poi.xssf.usermodel.XSSFWorkbookFactory; import java.util.List; /**
* 导出Excel公共方法
*
* @author yxb
* @version 1.0
*/
public class ExportExcelTool { //显示的导出表的标题
private String title;
//导出表的列名
private String[] rowName; private List<Object[]> dataList;
private boolean xssf; private String[] fieldNames; //构造方法,传入要导出的数据
public ExportExcelTool(String title, String[] rowName, String[] fieldNames, List<Object[]> dataList, boolean xssf) {
this.dataList = dataList;
this.rowName = rowName;
this.title = title;
this.xssf = xssf;
this.fieldNames = fieldNames;
} /**
* Create a new empty Workbook, either XSSF or HSSF depending
* on the parameter
*
* @return The created workbook
*/
public Workbook create() {
if (xssf) {
return XSSFWorkbookFactory.createWorkbook();
} else {
return HSSFWorkbookFactory.createWorkbook();
}
} /*
* 导出数据
* */
public Workbook export() {
try {
Workbook workbook = create(); // 创建工作簿对象
Sheet sheet = workbook.createSheet(title); // 创建工作表 // 产生表格标题行
Row rowm = sheet.createRow(0);
Cell cellTiltle = rowm.createCell(0); rowm.setHeight((short) (25 * 35)); //设置高度 //sheet样式定义【getColumnTopStyle()/getStyle()均为自定义方法 - 在下面 - 可扩展】 sheet.addMergedRegion(new CellRangeAddress(0, 0, 0, (rowName.length - 1)));
cellTiltle.setCellValue(title); // 定义所需列数
int fieldRow = fieldNames.length;
Row fieldName = sheet.createRow(1); // 在索引2的位置创建行(最顶端的行开始的第二行) fieldName.setHeight((short) (25 * 25)); //设置高度 // 将列头设置到sheet的单元格中
for (int n = 0; n < fieldRow; n++) {
Cell cellRowName = fieldName.createCell(n); //创建列头对应个数的单元格
RichTextString text;
if (xssf)
text = new XSSFRichTextString(fieldNames[n]);
else
text = new HSSFRichTextString(fieldNames[n]);
cellRowName.setCellValue(text); //设置列头单元格的值
} // 定义所需列数
int columnNum = rowName.length;
Row rowRowName = sheet.createRow(2); // 在索引2的位置创建行(最顶端的行开始的第二行) rowRowName.setHeight((short) (25 * 25)); //设置高度 // 将列头设置到sheet的单元格中
for (int n = 0; n < columnNum; n++) {
Cell cellRowName = rowRowName.createCell(n); //创建列头对应个数的单元格
RichTextString text;
if (xssf)
text = new XSSFRichTextString(rowName[n]);
else
text = new HSSFRichTextString(rowName[n]);
cellRowName.setCellValue(text); //设置列头单元格的值
} //将查询出的数据设置到sheet对应的单元格中
for (int i = 0; i < dataList.size(); i++) { Object[] obj = dataList.get(i);//遍历每个对象
Row row = sheet.createRow(i + 3);//创建所需的行数 row.setHeight((short) (25 * 20)); //设置高度 for (int j = 0; j < obj.length; j++) {
Cell cell; //设置单元格的数据类型
cell = row.createCell(j, CellType.STRING);
if (!"".equals(obj[j]) && obj[j] != null) {
cell.setCellValue(obj[j].toString()); //设置单元格的值
}
}
}
//让列宽随着导出的列长自动适应
for (int colNum = 0; colNum < columnNum; colNum++) {
int columnWidth = sheet.getColumnWidth(colNum) / 256;
for (int rowNum = 0; rowNum < sheet.getLastRowNum(); rowNum++) {
Row currentRow;
//当前行未被使用过
if (sheet.getRow(rowNum) == null) {
currentRow = sheet.createRow(rowNum);
} else {
currentRow = sheet.getRow(rowNum);
}
if (currentRow.getCell(colNum) != null) {
Cell currentCell = currentRow.getCell(colNum);
if (currentCell.getCellType() == CellType.STRING) {
int length = currentCell.getStringCellValue().getBytes().length;
if (columnWidth < length) {
columnWidth = length;
}
}
}
}
if (colNum == 0) {
sheet.setColumnWidth(colNum, (columnWidth - 2) * 256);
} else {
sheet.setColumnWidth(colNum, (columnWidth + 4) * 256);
} }
//
// if (workbook != null) {
// try {
// String fileName = "C:\\Users\\yangxiaobo\\Desktop/" + new SimpleDateFormat("yyyyMMddHHmmss").format(new Date()).toString();
// if (xssf)
// fileName += ".xlsx";
// else
// fileName += ".xls";
// FileOutputStream out = new FileOutputStream(fileName);
// workbook.write(out);
// out.close();
// } catch (IOException e) {
// e.printStackTrace();
// }
// } // String fileName = "" + new SimpleDateFormat("yyyyMMddHHmmss").format(new Date()).toString();
// if (xssf)
// fileName += ".xlsx";
// else
// fileName += ".xls";
return workbook;
} catch (Exception e) {
e.printStackTrace();
} return null;
}
}
用poi来导出数据到excel文档的更多相关文章
- NPOI 2.1.1 系列(2) 使用NPOI读取List或者datatable数据生成 Excel文档 ;Npoi生成 xlsx 2007以上文档
结合上一篇文章 NPOI 2.1.1 系列(1) 使用NPOI读取 Excel文档 ;NpoiExcelHelper 导入导出 2003格式 2007格式的 Excel; Npoi 导出 xlsx ...
- java 导出数据为word文档(保持模板格式)
导出数据到具体的word文档里面,word有一定的格式,需要保持不变 这里使用freemarker来实现: ①:设计好word文档格式,需要用数据填充的地方用便于识别的长字符串替换 如 aaaaa ...
- POI Java 导出数据到Excel
<dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifac ...
- PHP:引用Phpword导出数据到word文档
下载地址https://www.cnwenhui.cn/html/show-597.html(其中有中文使用手册可以下载看看) 1.首先要下载Phpword类库,放在如下图目录下 2.调用方法 pub ...
- struts2中利用POI导出Excel文档并下载
1.项目组负责人让我实现这个接口,因为以前做过类似的,中间并没有遇到什么太困难的事情.其他不说,先上代码: package com.tydic.eshop.action.feedback; impor ...
- 使用poi导出数据到excel
一.首先是导入poi所需要的jar包,我是用的是maven,添加jar包依赖 <dependency> <groupId>org.apache.poi</groupId& ...
- Java之Poi导出Excel文档
一.Poi简介 在后台管理系统中,我们经常要做的导出操作,通常导出为Excel文档的形式,而Poi则提供了这种需要的支持. 二.Workbook/HSSFWorkbook/XSSFWorkbook 1 ...
- spring boot 使用POI导出数据到Excel表格
在spring boot 的项目经常碰到将数据导出到Excel表格的需求,而POI技术则对于java操作Excel表格提供了API,POI中对于多种类型的文档都提供了操作的接口,但是其对于Excel表 ...
- 从数据库导出数据到excel之POI操作
项目说明: 1:数据库中有两张表,主键关联 2:根据条件查询数据 3:处理为需要的数据封装类型,然后传到导出excel的方法中 <--框架部署就不详谈了,用的spring框架--> 补充: ...
随机推荐
- 清北学堂提高组突破营考试T1
题目如下: (想要作弊的后几届神仙们我劝你们还是别黈了,这个题如果你们不会只能证明你们上错班了). 好,题目看完了,发现是一道大模拟(%你)题,于是我们按照题目说的做: #include<ios ...
- 微擎后台进行GET提交
微擎form表单进行GET提交时,要传递 name 分别为 c , a , m , do 的值 例如: <form action="{php echo $this->create ...
- Linux perf命令详解及常用参数解析
perf 相关命令:暂无相关命令 perf是Linux下的一款性能分析工具,能够进行函数级与指令级的热点查找. Perf List利用perf剖析程序性能时,需要指定当前测试的性能时间.性能事件是指在 ...
- HihoCoder1336 Matrix Sum(二维树状数组求和)
时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 You are given an N × N matrix. At the beginning every element ...
- spring-data-mongodb两种实现方式对比
spring-data-mongodb两种实现方式对比 参考链接:https://blog.csdn.net/feinifi/article/details/83752862
- 【GDOI2018模拟7.9】期末考试
题目 分析 如果我们确定最后的成绩公布日期t,那么就可以贪心来求出最小的不愉快度: 首先,那些希望的日期小于t的同学,会产生不愉快度,这个用前缀和可以来处理, 对于课程,我们要将大于t的课程全部拖到t ...
- mvc api 关于 post 跟get 请求的一些想法[FromUri] 跟[FromBody] 同一个控制器如何实现共存
wep api 在设置接收请求参数的时候,会自动根据模型进行解析. [FromUrl] 跟[FromBody] 不可以同时使用. 要拆分开: [HttpGet] public object GetP ...
- C语言 - strcpy和strncpy的编程实现及总结
一.字符串的strcpy与strncpy函数 1.编程实现strcpy函数(笔试很容易考到) 要求: 原型:char *stpcpy(char *strDest,char *strSrc); 头文件: ...
- TTTTTTTTTTTTTTTTT CF #182 div1 B floyd
题意: 有 n(3≤n≤100) 个站点,当第一次到达站点 u 的时候会增加寿命 au(1≤au≤103),题目给了 n 个站点的二位空间坐标,每两个站点之间的距离为曼哈顿距离(dis(i, j)=| ...
- HGOI 20190519 题解
脑补了一下今天的比赛难度和之前zju-lzw出的题目画风迥异. 难度完全不是一个水平的好伐. Probem A palindrome 给出一个$n$个元素的数组,可以任意指定一个数字$m$让所有$a_ ...