java中文件导出Excel的公共方法-java读写文件

java中文件导出Excel的公共方法-java读写文件
  • 文件导出Excel 的时候,比较繁琐,如果有大量的文件导出,必然出现重复代码,这样我们就需要一个公共方法。

  • 下面写的一个工具类:

    package com.teamnavi.zstrade.common.util;

  • public class ImportExcleUtil {

  • public void ImportExcel(HttpServletResponse response,String name){}

  • //设置需要的各种字体。

  • /**

  • *

  • * @param size 字体大小

  • * @param bold 字体是否加粗 1 加粗 0 不加粗

  • * @param leftAndRight 1 居中 2 靠左 3 靠右

  • * @param border边框 1 all 2 left 3 right 4 top 5 botton 6 none

  • * @return

  • * @throws WriteException

  • */

  • public static WritableCellFormat getWritableCellFormat(int size,int bold, int leftAndRight,int border)

  • throws WriteException{

  • WritableFont wf=null;

  • if(1==bold){

  • wf = new WritableFont(WritableFont.createFont("微软雅黑"), size, WritableFont.BOLD, false);

  • }else

  • {

  • wf = new WritableFont(WritableFont.createFont("微软雅黑"), size, WritableFont.NO_BOLD, false);

  • }

  • WritableCellFormat wcfF = new WritableCellFormat(wf);

  • wcfF.setVerticalAlignment(VerticalAlignment.CENTRE);//设置上下对齐

  • //设置左右对齐方式。

  • if(1==leftAndRight){

  • wcfF.setAlignment(Alignment.CENTRE);

  • } if(2==leftAndRight){

  • wcfF.setAlignment(Alignment.LEFT);

  • } if(3==leftAndRight){

  • wcfF.setAlignment(Alignment.RIGHT);

  • }

  • //设置边框

  • if(1==border){

  • wcfF.setBorder(jxl.format.Border.ALL, jxl.format.BorderLineStyle.THIN);

  • }if(2==border){

  • wcfF.setBorder(jxl.format.Border.LEFT, jxl.format.BorderLineStyle.THIN);

  • }

  • if(3==border){

  • wcfF.setBorder(jxl.format.Border.RIGHT, jxl.format.BorderLineStyle.THIN);

  • }

  • if(4==border){

  • wcfF.setBorder(jxl.format.Border.TOP, jxl.format.BorderLineStyle.THIN);

  • }

  • if(5==border){

  • wcfF.setBorder(jxl.format.Border.BOTTOM, jxl.format.BorderLineStyle.THIN);

  • }

  • if(6==border){

  • wcfF.setBorder(jxl.format.Border.NONE, jxl.format.BorderLineStyle.THIN);

  • }

  • return wcfF;

  • }

  • /**

  • *

  • * @param heads 表头名字数组

  • * @param sheet

  • * @param wcfF12 字体

  • * @param line 列

  • * @param row 行

  • * @throws Exception

  • */

  • public static void getHeadForm(String[] heads,WritableSheet sheet,WritableCellFormat wcfF12,int line, int row ) throws Exception

  • {

  • if(null!=heads && heads.length>0){

  • for (int i = 0; i < heads.length; i++) {

  • sheet.addCell(new jxl.write.Label(line+i, row, heads[i], wcfF12));

  • }

  • }

  • }

  • /**

  • *

  • * @param response

  • * @param name 文件名称

  • * @return

  • */

  • public static List getExcleCharSet(HttpServletResponse response,String name){

  • response.reset();

  • response.setCharacterEncoding("UTF-8");// 设置字符集

  • WritableWorkbook book=null;

  • OutputStream os=null;

  • List<Object> list=new ArrayList<Object>();

  • // 设置带有字形formatting的对象标题字体

  • // 创建工作流

  • try {

  • // 设置弹出对话框

  • response.setContentType("application/DOWLOAD");

  • response.setCharacterEncoding("UTF-8");

  • // 设置生成的文件名字

  • response.addHeader("Content-Disposition", "inline; filename="

  • + new String(name.getBytes("GB2312"), "ISO8859_1")

  • + ".xls");

  • os = response.getOutputStream();

  • // 初始化工作表

  • book = Workbook.createWorkbook(os);

  • list.add(os);

  • list.add(book);

  • return list;

  • } catch (IOException e1) {

  • // logger.error("导出excel出现IO异常", e1);

  • throw new ServiceException("导出失败", e1);

  • }

  • }

  • }

然后再需要用的地方调用这三个class就可以了:

下面是service 层调用:

  • if (null != resultWrapper) {

  • Vector<User_order_ckUpDTO> resultUser_order_ckDTOList = (Vector<User_order_ckUpDTO>) resultWrapper

  • .getObject();

  • String name = "出库单";

  • response.reset();

  • response.setCharacterEncoding("UTF-8");// 设置字符集

  • // 设置带有字形formatting的对象标题字体

  • // WritableFont.BOLD, true);

  • // 创建工作流

  • List<Object> list= ImportExcleUtil.getExcleCharSet(response, name);

  • OutputStream os = (OutputStream) list.get(0) ;

  • WritableWorkbook book = (WritableWorkbook) list.get(1) ;

  • try {

  • // 设置日期格式

  • // SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd");//

  • // 日期格式1

  • // SimpleDateFormat sf2 = new

  • // SimpleDateFormat("yyyy-MM-dd HH:mm:ss");// 日期格式1

  • WritableSheet sheet = book.createSheet(name, 0);// 设置sheet名称

  • sheet.getSettings().setAutomaticFormulaCalculation(true);

  • // 设置默认列宽

  • sheet.getSettings().setDefaultColumnWidth(11);

  • // 设置默认行高

  • // 表字段名

  • // sheet.mergeCells(0, 0, 11, 0);// 1-k合并

  • // sheet.setRowView(0, 800); // 设置第1行行高

  • //

  • // // sheet.setc

  • // sheet.mergeCells(0, 1, 11, 1);// 2-l合并

  • // sheet.mergeCells(0, 2, 11, 2);// 2-l合并

  • String[] heads = { "单据编码", "单据类型", "单据状态", "仓库名称", "出库时间","作废状态"};

  • WritableCellFormat wcfF12 = ImportExcleUtil

  • .getWritableCellFormat(12, 1, 1, 1);

  • ImportExcleUtil.getHeadForm(heads, sheet, wcfF12, 0, 0);// 得到开头列表

  • WritableCellFormat wcfF11 = ImportExcleUtil

  • .getWritableCellFormat(10, 0, 1, 1);

  • // 将数据追加

  • if (resultUser_order_ckDTOList != null

  • && resultUser_order_ckDTOList.size() > 0) {

  • for (int i = 0; i < resultUser_order_ckDTOList.size(); i++) {

  • User_order_ckUpDTO p = resultUser_order_ckDTOList

  • .get(i);

  • sheet.addCell(new jxl.write.Label(0, 1 + i, p

  • .getOrder_number(), wcfF11));

  • sheet.addCell(new jxl.write.Label(1, 1 + i, p

  • .getOrder_type(), wcfF11));

  • sheet.addCell(new jxl.write.Label(2, 1 + i, p

  • .getOrder_status(), wcfF11));

  • sheet.addCell(new jxl.write.Label(3, 1 + i, p

  • .getStore_house_name(), wcfF11));

  • sheet.addCell(new jxl.write.Label(4, 1 + i, p

  • .getCk_date(), wcfF11));

  • sheet.addCell(new jxl.write.Label(5, 1 + i, p

  • .getIs_forbid(), wcfF11));

  • }

  • }

  • book.write();

  • book.close();

  • } catch (Exception e) {

  • throw new ServiceException("导出失败", e);

  • } finally {

  • if (null != os) {

  • try {

  • os.flush();

  • os.close();

  • } catch (IOException e) {

  • // logger.error("关流出现异常", e);

  • e.printStackTrace();

  • }

  • }

  • }

  • }

谢谢各位读者 评论 指正错误,谢谢。

推荐阅读

    excel怎么用乘法函数

    excel怎么用乘法函数,乘法,函数,哪个,excel乘法函数怎么用?1、首先用鼠标选中要计算的单元格。2、然后选中单元格后点击左上方工具栏的fx公

    鼠标不能拖动文件了

    鼠标不能拖动文件了,鼠标,拖动,本文目录鼠标不能拖动文件了电脑鼠标无法拖动软件图标了,怎么办鼠标不能滚动怎么调整电脑鼠标不能进行任何

    设置里程碑|设置里程碑的方法有哪些

    设置里程碑|设置里程碑的方法有哪些,,1. 设置里程碑的方法有哪些1、通过挑战风险,突破认知,从而突破自我。只有在某些特殊的时刻,比如想法和

    excel中乘法函数是什么?

    excel中乘法函数是什么?,乘法,函数,什么,打开表格,在C1单元格中输入“=A1*B1”乘法公式。以此类推到多个单元。1、A1*B1=C1的Excel乘法公式

    如何把老版本的excel更新换代?

    如何把老版本的excel更新换代?,更新换代,版本,如何,对于Excel来说,老版本的Excel更新换代要从软件工具更换、知识准备、应用环境配套3个角度

    标准差excel用什么函数?

    标准差excel用什么函数?,函数,标准,什么,在数据单元格的下方输入l标准差公式函数公式“=STDEVPA(C2:C6)”。按下回车,求出标准公差值。详细

    手机通讯录导出|手机通讯录导出不全

    手机通讯录导出|手机通讯录导出不全,,手机通讯录导出不全建议进行以下操作: 1.重新开关机 2.如果手机套有保护套,取下后测试 3.备份手机数据