java端导出Excel表格。
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java端导出Excel表格。相关的知识,希望对你有一定的参考价值。
想要从JAVA端导出Excel表格,并且所导出的表格中,有的列需要设置为下拉框形式,想请问各位前辈大神,改如何编写代码。急。
可以使用poi来实现导出execl表格或者通过io流实现导出execl表格,但是poi相对来说更方便实例如下:
try
HSSFWorkbook workbook = new HSSFWorkbook(); // 创建工作簿对象
HSSFSheet sheet = workbook.createSheet(title); // 创建工作表
// 产生表格标题行
HSSFRow rowm = sheet.createRow(0);
HSSFCell cellTiltle = rowm.createCell(0);
//sheet样式定义【getColumnTopStyle()/getStyle()均为自定义方法 - 在下面 - 可扩展】
HSSFCellStyle columnTopStyle = this.getColumnTopStyle(workbook);//获取列头样式对象
HSSFCellStyle style = this.getStyle(workbook); //单元格样式对象
sheet.addMergedRegion(new CellRangeAddress(0, 1, 0, (rowName.length-1)));
cellTiltle.setCellStyle(columnTopStyle);
cellTiltle.setCellValue(title);
// 定义所需列数
int columnNum = rowName.length;
HSSFRow rowRowName = sheet.createRow(2); // 在索引2的位置创建行(最顶端的行开始的第二行)
// 将列头设置到sheet的单元格中
for(int n=0;n<columnNum;n++)
HSSFCell cellRowName = rowRowName.createCell(n); //创建列头对应个数的单元格
cellRowName.setCellType(HSSFCell.CELL_TYPE_STRING); //设置列头单元格的数据类型
HSSFRichTextString text = new HSSFRichTextString(rowName[n]);
cellRowName.setCellValue(text); //设置列头单元格的值
cellRowName.setCellStyle(columnTopStyle); //设置列头单元格样式
//将查询出的数据设置到sheet对应的单元格中
for(int i=0;i<dataList.size();i++)
Object[] obj = dataList.get(i);//遍历每个对象
HSSFRow row = sheet.createRow(i+3);//创建所需的行数
for(int j=0; j<obj.length; j++)
HSSFCell cell = null; //设置单元格的数据类型
if(j == 0)
cell = row.createCell(j,HSSFCell.CELL_TYPE_NUMERIC);
cell.setCellValue(i+1);
else
cell = row.createCell(j,HSSFCell.CELL_TYPE_STRING);
if(!"".equals(obj[j]) && obj[j] != null)
cell.setCellValue(obj[j].toString()); //设置单元格的值
cell.setCellStyle(style); //设置单元格样式
//让列宽随着导出的列长自动适应
for (int colNum = 0; colNum < columnNum; colNum++)
int columnWidth = sheet.getColumnWidth(colNum) / 256;
for (int rowNum = 0; rowNum < sheet.getLastRowNum(); rowNum++)
HSSFRow currentRow;
//当前行未被使用过
if (sheet.getRow(rowNum) == null)
currentRow = sheet.createRow(rowNum);
else
currentRow = sheet.getRow(rowNum);
if (currentRow.getCell(colNum) != null)
HSSFCell currentCell = currentRow.getCell(colNum);
if (currentCell.getCellType() == HSSFCell.CELL_TYPE_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 = "Excel-" + String.valueOf(System.currentTimeMillis()).substring(4, 13) + ".xls";
String headStr = "attachment; filename=\"" + fileName + "\"";
response = getResponse();
response.setContentType("APPLICATION/OCTET-STREAM");
response.setHeader("Content-Disposition", headStr);
OutputStream out = response.getOutputStream();
workbook.write(out);
catch (IOException e)
e.printStackTrace();
catch(Exception e)
e.printStackTrace();
参考技术A 这个我只能给你导出Excel的实例,但是设置下拉框的我也不知道。你再看看吧。
/**
* 导出excel
* @return
*/
public String exportExcel()
List<SysOperationLogs> list = null;
if (optLogs != null && optLogs.getOptEndTime() != null)
optLogs.setOptEndTime(DateUtils.getSearchDate(optLogs.getOptEndTime()));
list =optService.getLogsList(optLogs);
response.reset();// 清空输出流
response.setHeader("Content-disposition","attachment; filename=logs_list.xls");// 设定输出文件头
response.setContentType("application/msexcel");// 定义输出类型
HSSFWorkbook wbook = new HSSFWorkbook();
try
OutputStream os = response.getOutputStream();// 从响应里获取输出流
HSSFSheet sheet = wbook.createSheet("日志列表");// 创建工作表
sheet.setDefaultColumnWidth(20);// 设置表格默认宽度
HSSFCellStyle style = wbook.createCellStyle();// 创建表格样式
style.setVerticalAlignment(CellStyle.ALIGN_CENTER);// 设置文本居中
style.setFillBackgroundColor(HSSFColor.RED.index);
HSSFRow row = sheet.createRow(0);// 表格标题行
HSSFCell cell = null;
String[] headers = new String[]"操作类型","操作人","操作内容","操作时间","操作对象","操作状态","失败原因";
for (int i = 0; i < headers.length; i++)
cell = row.createCell(i);// 给这一行添加一个表格
cell.setCellStyle(style);
cell.setCellValue(headers[i]);// 设置表格内容
//为表格添加内容
for (int i = 0; i < list.size(); i++)
int j = 0;
row = sheet.createRow(i + 1);
String type = "";
if(list.get(i).getOptType()==0)
type="登录";
else if(list.get(i).getOptType()==1)
type="新增";
else if(list.get(i).getOptType()==2)
type="修改";
else if(list.get(i).getOptType()==3)
type="删除";
else
type="导出";
cell = row.createCell(j++);
cell.setCellValue(type);
SysWorker wkr = wkrService.findWorkerById(list.get(i).getOptWkrId());
if(wkr!=null)
list.get(i).setOptWkrNick(wkr.getWkrNick());
cell = row.createCell(j++);
cell.setCellValue(list.get(i).getOptWkrNick());
cell = row.createCell(j++);
cell.setCellValue(list.get(i).getOptContent());
cell = row.createCell(j++);
cell.setCellValue(DateUtils.getStringTime(list.get(i).getOptTime()));
cell = row.createCell(j++);
cell.setCellValue(list.get(i).getOptObjKey());
String status="";
if(list.get(i).getOptStatus()==1)
status="成功";
else
status="失败";
cell = row.createCell(j++);
cell.setCellValue(status);
cell = row.createCell(j++);
cell.setCellValue(list.get(i).getOptReason());
wbook.write(os);// 写入到流中
os.flush();
os.close();
catch (IOException e)
super.actionLogger.error("导出后台日志异常",e);
e.printStackTrace();
return null;
参考技术B 这个你得用插件了,百度一下有很多
以上是关于java端导出Excel表格。的主要内容,如果未能解决你的问题,请参考以下文章
请问下,我想用java实现下载excel表格,思路是先在临时文件里生成临时excel文件,但是不知