java poi 在服务器生成excel文件
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java poi 在服务器生成excel文件相关的知识,希望对你有一定的参考价值。
是这样的,一般来说都是利用poi导出excel,可我需要在导出excel的同时在服务器端生成一个相同的备份文件,现在我有一个写好内容的wookbook,要怎么在需要的目录下生成excel文件呢~~
我在网上查了一些方法能够生成excel,但是这个excel无法打开,说格式错误。求大神告知怎么回事,下面贴上生成excel的代码
File file=new File("E://月工数报表/"+st_id_query+"/"+type_lyj+"/"+year_query+month_query1+".xls");
if (!file.exists())
file.createNewFile();
System.err.println(file + "已创建!");
if (!file.exists())
try
HSSFWorkbook ws = new HSSFWorkbook();//建立新HSSFWorkbook对象
ws=workbook;
FileOutputStream fileOut = new FileOutputStream("文件路径");//创建文件流
ws.write(fileOut);//把Workbook对象输出到路径path中
fileOut.close();
catch (IOException e)
e.printStackTrace();
正确的做法是:
1, HSSFWorkbook ws = new HSSFWorkbook();//建立新HSSFWorkbook对象
2, Sheet sheet = workbook.createSheet(0); //建立一个新的sheet
3,Row row = sheet.createRow(1); //建立一个新的row对象
4, Cell cell = row.createCell(0); //在row上创建方格即列,
cell.setCellValue(cellValue); //设置这个行中列的值
cell.setCellStyle(cellStyle); //设置样式 参考技术A 1、ws=workbook做什么的,是否有必要加
2、在ws上添加sheet
HSSFSHeep sheet = ws.createSheet();
3、HSSFRow row = sheet.createRow(0)
你可以先添加2,试试本回答被提问者采纳 参考技术B 很明显ws=workbook;这个有问题。
你给出的代码没有组织excel表格的代码。
你的这个workbook不知道是哪儿来的。
java poi 导出excel
很多时候,一个软件应用程序需要生成Microsoft Excel文件格式的报告。有时,一个应用程序甚至希望将Excel文件作为输入数据。例如,一个公司开发的应用程序将财务部门需要所有输出生成自己的Excel。
任何Java程序员愿意将MS Office文件的输出,可以使用预定义和只读API来做到。
什么是Apache POI?
Apache POI是一种流行的API,它允许程序员使用Java程序创建,修改和显示MS Office文件。这由Apache软件基金会开发使用Java分布式设计或修改Microsoft Office文件的开源库。它包含类和方法对用户输入数据或文件到MS Office文档进行解码。
Apache POI组件
Apache POI包含类和方法,来将MS Office所有OLE 2文档复合。此API组件的列表如下。
-
POIFS (较差混淆技术实现文件系统) : 此组件是所有其他POI元件的基本因素。它被用来明确地读取不同的文件。
-
HSSF (可怕的电子表格格式) : 它被用来读取和写入MS-Excel文件的xls格式。
-
XSSF (XML格式) : 它是用于MS-Excel中XLSX文件格式。
-
HPSF (可怕的属性设置格式) : 它用来提取MS-Office文件属性设置。
-
HWPF (可怕的字处理器格式) : 它是用来读取和写入MS-Word的文档扩展名的文件。
-
XWPF (XML字处理器格式) : 它是用来读取和写入MS-Word的docx扩展名的文件。
-
HSLF (可怕的幻灯片版式格式) : 它是用于读取,创建和编辑PowerPoint演示文稿。
-
HDGF (可怕的图表格式) : 它包含类和方法为MS-Visio的二进制文件。
-
HPBF (可怕的出版商格式) : 它被用来读取和写入MS-Publisher文件。
本人做的事使用java poi导出excel文件。因此,仅限于HSSF组件。
ExportUtil工具类:
package net.dagongsoft.framework.util.poi; import java.text.SimpleDateFormat; import java.util.Date; import org.apache.commons.lang.StringUtils; import org.apache.poi.hssf.usermodel.HSSFCell; import org.apache.poi.hssf.usermodel.HSSFCellStyle; import org.apache.poi.hssf.usermodel.HSSFRow; import org.apache.poi.hssf.usermodel.HSSFSheet; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; /** * @description 利用Java poi导出excel公用类 * @author ldp * @time 2017年6月8日 下午2:17:08 * */ public class ExportUtil { /** * 导出Excel 97(.xls)格式 ,少量数据 * * @param title * sheet名 * @param headString * 列名 * @param jsonArray * 数据集 */ public static HSSFWorkbook exportExcel(String title, String headString, JSONArray jsonArray) { // 声明一个工作薄 HSSFWorkbook workbook = new HSSFWorkbook(); // 表头样式 // HSSFCellStyle titleStyle = workbook.createCellStyle(); // titleStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER); // HSSFFont titleFont = workbook.createFont(); // titleFont.setFontHeightInPoints((short) 20); // titleFont.setBoldweight((short) 700); // titleStyle.setFont(titleFont); // 列头样式 HSSFCellStyle headerStyle = workbook.createCellStyle(); // headerStyle.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND); // headerStyle.setBorderBottom(HSSFCellStyle.BORDER_THIN); // headerStyle.setBorderLeft(HSSFCellStyle.BORDER_THIN); // headerStyle.setBorderRight(HSSFCellStyle.BORDER_THIN); // headerStyle.setBorderTop(HSSFCellStyle.BORDER_THIN); // headerStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER); // HSSFFont headerFont = workbook.createFont(); // headerFont.setFontHeightInPoints((short) 12); // headerFont.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD); // headerStyle.setFont(headerFont); // 单元格样式 HSSFCellStyle cellStyle = workbook.createCellStyle(); // cellStyle.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND); // cellStyle.setBorderBottom(HSSFCellStyle.BORDER_THIN); // cellStyle.setBorderLeft(HSSFCellStyle.BORDER_THIN); // cellStyle.setBorderRight(HSSFCellStyle.BORDER_THIN); // cellStyle.setBorderTop(HSSFCellStyle.BORDER_THIN); // cellStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER); // cellStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER); // HSSFFont cellFont = workbook.createFont(); // cellFont.setBoldweight(HSSFFont.BOLDWEIGHT_NORMAL); // cellStyle.setFont(cellFont); // 生成一个表格 HSSFSheet sheet = null; if (StringUtils.isNotBlank(title)) { sheet = workbook.createSheet(title); } else { sheet = workbook.createSheet(); } String[] headers = headString.split(","); // 遍历集合数据,产生数据行 int rowIndex = 0; int count = 0; if (jsonArray != null) { for (int n = 0; n < jsonArray.size(); n++) { if (rowIndex == 65535 || rowIndex == 0) { if (rowIndex != 0) { count++; // 如果数据超过了,则在第二页显示 if (StringUtils.isNotBlank(title)) { sheet = workbook.createSheet(title + count); } else { sheet = workbook.createSheet(); } } HSSFRow headerRow = sheet.createRow(0); // 列头 rowIndex =0 for (int i = 0; i < headers.length; i++) { headerRow.createCell(i).setCellValue(headers[i]); headerRow.getCell(i).setCellStyle(headerStyle); } rowIndex = 1;// 数据内容从 rowIndex=1开始 } JSONObject jo = jsonArray.getJSONObject(n); HSSFRow dataRow = sheet.createRow(rowIndex); for (int i = 0; i < headers.length; i++) { HSSFCell newCell = dataRow.createCell(i); Object o = jo.get(headers[i]); String cellValue = ""; if (o == null) { cellValue = ""; } else if (o instanceof Date) { cellValue = new SimpleDateFormat("yyyy/MM/dd 00:00:00").format(o); } else { cellValue = o.toString(); } newCell.setCellValue(cellValue); newCell.setCellStyle(cellStyle); } rowIndex++; } } // 自动调整宽度 for (int i = 0; i < headers.length; i++) { sheet.autoSizeColumn(i); } return workbook; } }
控制类:
package net.dagongsoft.platform.poi.controller; import java.io.OutputStream; import java.util.ArrayList; import java.util.List; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import com.alibaba.fastjson.JSONArray; import net.dagongsoft.platform.poi.entity.Student; import net.dagongsoft.platform.poi.service.StudentExportService; import net.dagongsoft.platform.poi.util.ExportUtilTest; @Controller @RequestMapping("/studentExportController") public class StudentExportController { @Autowired private StudentExportService studentExportService; @RequestMapping("/export.form") public void exportExcel(HttpServletRequest request, HttpServletResponse response) throws Exception { List<Student> list = new ArrayList<Student>(); list.add(new Student(1000, "zhangsan", "20")); list.add(new Student(1001, "lisi", "23")); list.add(new Student(1002, "wangwu", "25")); HSSFWorkbook wb = studentExportService.export(list); response.setContentType("application/vnd.ms-excel"); response.setHeader("Content-disposition", "attachment;filename=student.xls"); OutputStream ouputStream = response.getOutputStream(); wb.write(ouputStream); ouputStream.flush(); ouputStream.close(); } }
serivice接口声明:
package net.dagongsoft.platform.poi.service; import java.util.List; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import net.dagongsoft.platform.poi.entity.Student; public interface StudentExportService { HSSFWorkbook export(List<Student> list); }
service实现类:
package net.dagongsoft.platform.poi.service.impl; import java.util.List; import org.apache.poi.hssf.usermodel.HSSFCell; import org.apache.poi.hssf.usermodel.HSSFCellStyle; import org.apache.poi.hssf.usermodel.HSSFRow; import org.apache.poi.hssf.usermodel.HSSFSheet; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.springframework.stereotype.Service; import net.dagongsoft.platform.poi.entity.Student; import net.dagongsoft.platform.poi.service.StudentExportService; @Service public class StudentExportServiceImpl implements StudentExportService { String[] excelHeader = { "Id", "Name", "Age" }; @Override public HSSFWorkbook export(List<Student> list) { HSSFWorkbook wb = new HSSFWorkbook(); HSSFSheet sheet = wb.createSheet("Student"); HSSFRow row = sheet.createRow((int) 0); HSSFCellStyle style = wb.createCellStyle(); for (int i = 0; i < excelHeader.length; i++) { HSSFCell cell = row.createCell(i); cell.setCellValue(excelHeader[i]); cell.setCellStyle(style); sheet.autoSizeColumn(i); // sheet.SetColumnWidth(i, 100 * 256); } for (int i = 0; i < list.size(); i++) { row = sheet.createRow(i + 1); Student student = list.get(i); row.createCell(0).setCellValue(student.getId()); row.createCell(1).setCellValue(student.getName()); row.createCell(2).setCellValue(student.getAge()); } return wb; } }
以上是关于java poi 在服务器生成excel文件的主要内容,如果未能解决你的问题,请参考以下文章
java poi操作Excel文件 生成的Excel文件为里面的内容为只读,不可以修改其内容。求解答。
Java基础系列19:使用JXL或者POI生成和解析Excel文件