第一种方法,先生成文件,再下载下来
在用poi在EXECL报表设计的时候,遇到单元格合并问题,用到一个重要的函数:
CellRangeAddress(int, int, int, int)
参数:起始行号,终止行号, 起始列号,终止列号
网上老多地方说是(//参数1:行号 参数2:起始列号 参数3:行号 参数4:终止列号)误导,经过仔细测试,应该是(起始行号,终止行号, 起始列号,终止列号),
package com.jwy.excel;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFCellStyle;
import org.apache.poi.hssf.usermodel.HSSFFont;
import org.apache.poi.hssf.usermodel.HSSFRichTextString;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.hssf.util.CellRangeAddress;
import com.sun.corba.se.spi.servicecontext.UEInfoServiceContext;
/**
* 合并单元格
*
* @author Jingweiyu
*/
public class unionExcel {
public static void main(String[] args) throws Exception {
HSSFWorkbook workBook = new HSSFWorkbook(); // 创建 一个excel文档对象
HSSFSheet sheet = workBook.createSheet(); // 创建一个工作薄对象
// 设置样式
HSSFCellStyle titleStyle = workBook.createCellStyle();// 创建样式对象
titleStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER_SELECTION);// 水平居中
titleStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);// 垂直居中
// 设置字体
HSSFFont titleFont = workBook.createFont(); // 创建字体对象
titleFont.setFontHeightInPoints((short) 15); // 设置字体大小
titleFont.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);// 设置粗体
titleFont.setFontName("黑体"); // 设置为黑体字
titleStyle.setFont(titleFont);
// 合并单元格操作
sheet.addMergedRegion(new CellRangeAddress(0, 1, 0, 7));
sheet.addMergedRegion(new CellRangeAddress(2, 2, 5, 7));
// sheet.addMergedRegion(new CellRangeAddress(3, 3, 1, 3));
HSSFRow row = null;
HSSFCell cell = null;
row = sheet.createRow(0);
cell = row.createCell(0);
cell.setCellStyle(titleStyle);
cell.setCellValue(new HSSFRichTextString("明日公司员工详细信息"));
// 设置表文样式
HSSFCellStyle tableStyle = workBook.createCellStyle();
// 设置表文字体
HSSFFont tableFont = workBook.createFont();
tableFont.setFontHeightInPoints((short) 12); // 设置字体大小
tableFont.setFontName("宋体"); // 设置为黑体字
tableStyle.setFont(tableFont);
String[] row1 = { "姓名:", "李**", "性别:", "女", "出生日期:", "1985年5月27" };
//
//
// Users us = new Users();
// us.setEmail("11");
//
// Users us2 = new Users();
// us2.setEmail("2222");
//
// List<Users> list = new ArrayList();
// list.add(us);
// list.add(us2);
//
// for (Users usObj : list) {
// System.out.println(usObj.getEmail());
// }
// for (int j = 0; j < list.size(); j++) {
// Users usObj = (Users) list.get(j);
//
// System.out.println(usObj.getEmail());
// }
row = sheet.createRow(2);
for (int i = 0; i < row1.length; i++) {
cell = row.createCell(i);
cell.setCellStyle(tableStyle);
cell.setCellValue(new HSSFRichTextString(row1[i]));
}
for (int i = 0; i < 10; i++) {
String row2[] = { "家庭住址:", "吉林省长春市朝阳区*****", "111", "111", "邮编:",
"130021", "家庭电话:", "8562****" };
export(row2, cell, tableStyle, workBook, sheet, i, row);
}
}
public static void export(String[] row2, HSSFCell cell,
HSSFCellStyle tableStyle, HSSFWorkbook workBook, HSSFSheet sheet,
int j, HSSFRow row) throws IOException {
row = sheet.createRow(j + 3);
for (int k = 0; k < row2.length; k++) {
cell = row.createCell(k);
cell.setCellStyle(tableStyle);
cell.setCellValue(new HSSFRichTextString(row2[k]));
}
// 文件输出流
FileOutputStream os = new FileOutputStream("E:\\unionExcel.xls");
workBook.write(os); // 将文档对象写入文件输出流
os.close(); // 关闭文件输出流
}
}
第二种方法 直接输出流下载
/**
* 导出报表数据
*
* @param type
* @throws FileNotFoundException
*/
public void export(String year, String month, String type,
HttpServletResponse response, String exportName) throws Exception {
OutputStream out = null;
log.info("response---------------" + response);
out = response.getOutputStream();// 获取输出流
WritableWorkbook wbook = null;
try {
wbook = Workbook.createWorkbook(out);
} catch (IOException e1) {
e1.printStackTrace();
} // 建立excel文件
WritableSheet wsheet = wbook.createSheet(exportName, 0); // 工作表名称
// 设置Excel字体
// 设置Excel居中
jxl.write.NumberFormat nfOne = new jxl.write.NumberFormat("#.0");
jxl.write.NumberFormat nf = new jxl.write.NumberFormat("#");
jxl.write.NumberFormat nfTwo = new jxl.write.NumberFormat("#.00");
WritableCellFormat formatLeft = new WritableCellFormat();
WritableCellFormat formatCenter = new WritableCellFormat();
WritableCellFormat formatRight = new WritableCellFormat(nf);
WritableCellFormat formatRightOne = new WritableCellFormat(nfOne);
WritableCellFormat formatRightTwo = new WritableCellFormat(nfTwo);
formatCenter.setAlignment(jxl.format.Alignment.CENTRE);
formatRight.setAlignment(jxl.format.Alignment.RIGHT);
formatLeft.setAlignment(jxl.format.Alignment.LEFT);
formatRightOne.setAlignment(jxl.format.Alignment.RIGHT);
String[] title = { "指标名称", "计算单位", "1-12月累计", "累计增长%" };
// 设置Excel表头
for (int i = 0; i < title.length; i++) {
Label excelTitle = new Label(i, 0, title[i], formatCenter);
wsheet.addCell(excelTitle);
}
String hql = "from StatisiticsQuota s where s.sqCode ='" + type + "'"
+ " and s.sqYear='" + year + "' and s.sqMonth='"
+ month + "'" + " order by s.sqId asc";
// 需要导出的数据
List<StatisiticsQuota> list = baseDAO.selectValueObjectsByHQL(hql);
log.info("--------list大小--" + list.size());
int c = 1; // 用于循环时Excel的行号
Iterator it = list.iterator();
while (it.hasNext()) {
StatisiticsQuota crdto = (StatisiticsQuota) it.next();
String sqquotaName = crdto.getSqquotaName()==null?"":crdto.getSqquotaName();
String units = crdto.getSqUnits()==null?"":crdto.getSqUnits();
Double sqAddup = crdto.getSqAddup()==null?0.0:crdto.getSqAddup();
Double sqTrowthRate = crdto.getSqTrowthRate()==null?0.0:crdto.getSqTrowthRate();
Label label1 = new Label(0,c,sqquotaName,formatLeft);
Label label2 = new Label(1,c,units,formatCenter);
if(sqAddup!=0.0){
jxl.write.Number number3 = new jxl.write.Number(2,c,sqAddup,formatRightTwo);
wsheet.addCell(number3);
}
if(sqTrowthRate!=0.0){
jxl.write.Number number4 = new jxl.write.Number(3,c,sqTrowthRate,formatRightTwo);
wsheet.addCell(number4);
}
try {
wsheet.addCell(label1);
wsheet.addCell(label2);
} catch (RowsExceededException e) {
e.printStackTrace();
} catch (WriteException e) {
e.printStackTrace();
}
c++;
}
// 设置导出中文名称(解决中文乱码问题)
response.setHeader("Content-Disposition", "attachment;filename="
+ java.net.URLEncoder.encode(exportName + ".xls", "UTF-8"));
wbook.write();
wbook.close();
out.flush();
out.close();
// 文件输出流
}
分享到:
相关推荐
Kettle提供了使用Excel模板导出数据的功能,这使得输出的数据格式更加规范和易于阅读。 首先,我们需要理解Kettle中的Transform(转换)。Transform是Kettle工作流程中的基本单元,用于处理数据流。在这个场景中,...
"Excel导出数据(根据Excel模板定义)"这个主题涉及到的核心技术是如何根据预设的Excel模板生成和导出数据,通常用于批量生成报表或者进行复杂的数据呈现。下面将详细解释这一过程及其相关知识点。 1. **Excel模板...
在这个主题中,我们将深入探讨如何使用Java进行Excel数据处理与导出。 首先,你需要一个库来处理Excel文件。Apache POI是一个流行的开源Java API,专门用于读写Microsoft Office格式的文件,包括Excel。通过Apache ...
在处理数据导出任务时,ABAP程序员有时需要将系统内的数据导出到Excel格式,以便用户进行进一步的数据分析或处理。在本场景中,我们将探讨如何通过OLE(Object Linking and Embedding)技术在ABAP中实现Excel数据...
本文将深入探讨“Excel导出数据到数据库”这一主题,讲解如何高效地将Excel中的数据导入到数据库系统,以实现数据的统一管理和分析。 一、Excel的数据整理与预处理 在导出数据之前,首先需要对Excel中的数据进行...
为了解决这个问题,我们可以使用 DBGridEh 控件来快速导出数据到 Excel 中。 使用 DBGridEh 控件可以快速导出大量数据到 Excel 中,而不需要使用 OLE 自动化来一个一个地将数据写入到 Excel 中。 DBGridEh 控件提供...
在javaWeb开发中,会经常遇到导出业务数据的业务需求,导出Excel最常用的技术就是poi,对于简单的业务,我们可以动态的生成一个Excel文件,但对于复杂的业务,我们可以通过使用读取Excel模板的,然后往里面填充数据...
本话题将深入探讨如何使用C#编程语言来解决“Excel导出百万级数据”的问题。 首先,我们需要理解Excel的性能瓶颈。Excel本身对打开和操作大量数据有一定限制,特别是2003版本之前的XLS格式,最大行数为65536行,而...
1. **SQL*Plus导出数据为CSV格式** - 创建SQL查询:首先,你需要编写一个SQL查询来选择你想导出的数据。例如,如果你想从名为"employees"的表中导出所有员工信息,查询可能如下: ``` SELECT * FROM employees; ...
在本示例中,我们将深入探讨如何使用Aspose库在.NET环境中根据模板导出Excel电子表格。这个过程涉及到多个步骤和技术,包括理解Aspose的API、模板设计以及数据注入。 首先,Aspose库提供了强大的Excel操作功能,...
本教程将深入探讨如何将Excel数据导出并导入到Oracle数据库中,这对于数据分析、报表制作以及数据迁移等场景非常有用。以下是对这个主题的详细阐述: 一、Excel与Oracle数据库简介 Excel是一款由Microsoft开发的...
Easy POI允许开发者使用预定义的Excel模板来导出数据。在模板中,你可以设定好单元格的格式、样式和公式,然后用Easy POI将动态数据填入模板。通过`WorkbookFactory.create()`创建一个工作簿对象,接着使用`...
### PL/SQL 导出数据至 Excel 的三种方法详解 #### 方法一:直接导出(适用于少量数据) 此方法较为直观简单,适用于导出数量不多的数据。具体步骤如下: 1. **查询数据**:首先,在PL/SQL Developer的SQL Window...
在IT行业中,Excel导出是一项常见的功能,尤其在企业级应用中,用于数据报表的生成与分享。"Excel导出支持前台和后台导出"这一技术主题涉及到如何在Web应用程序中实现用户请求的数据导出到Excel文件,既可以选择在...
这篇博文的源码提供了一个使用EasyPOI导出包含图片的Excel模板数据的示例,这在报表生成、数据分析和报告制作等场景中非常实用。 首先,我们来看看`ExcelTemplateExportUtil.java`,这个类是导出工具的核心,它实现...
在Java编程中,导出复杂的Excel模板是一...熟练掌握Apache POI或其他相关库的用法,结合业务需求,能有效提高工作效率并提供高质量的Excel导出功能。在实际开发中,不断优化代码和策略,可以更好地满足性能和功能需求。
在这个场景中,"新版excel导出控件.rar_donec1p_pb_pb excel_pb 导出_pb导出excel" 的标题和描述提到了一个关键的开发需求:在PB应用中导出数据到Excel文件。 传统的PowerBuilder(PB)自身虽然提供了数据窗口...
# 导出数据到多个Excel文件 data = ... # 数据 for i, chunk in enumerate(pd.groupby(data, group_keys=False, chunksize=10000)): chunk.to_excel(f'chunk_{i}.xlsx', index=False) # 压缩文件 with ...
java导出复杂Excel内容数据动态循环
总结,使用Freemarker实现Excel导出功能,主要是通过模板语言定义Excel的结构,结合数据模型生成内容,再借助像Apache POI这样的库进行转换。这种方式既灵活又高效,尤其适合处理大量结构化数据的导出需求。在实际...