java打印Excel表格
生活随笔
收集整理的這篇文章主要介紹了
java打印Excel表格
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
這里用servlet簡單介紹一下java打印報表
1.無合并行/列
package weaver.xhyy.servlet;import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.URLEncoder; import java.util.HashMap; import java.util.List; import java.util.Map;import javax.servlet.ServletException; import javax.servlet.ServletOutputStream; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse;import jxl.Workbook; import jxl.format.Border; import jxl.format.BorderLineStyle; import jxl.format.Colour; import jxl.write.Label; import jxl.write.WritableCellFormat; import jxl.write.WritableFont; import jxl.write.WritableSheet; import jxl.write.WritableWorkbook;import weaver.general.BaseBean; import weaver.general.Util; import weaver.hrm.HrmUserVarify; import weaver.hrm.User; import weaver.xhyy.sap.SearchYhdzxx;/*** 打印銀行對賬信息* * @author Yuk* */ public class GetYhdzxxExcelServlet extends HttpServlet {protected void service(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException {BaseBean log = new BaseBean();log.writeLog("開始導出院外來款查詢");User user = HrmUserVarify.getUser (request , response) ;String beginDate = Util.null2String(request.getSession().getAttribute("beginDate"));String endDate = Util.null2String(request.getSession().getAttribute("endDate"));Map<String, String> otherparams = new HashMap<String, String>();otherparams.put("beginDate", beginDate);otherparams.put("endDate", endDate);// 調用【獲取銀行對賬信息】SearchYhdzxx search = new SearchYhdzxx();List<Map<String, String>> list = search.getYhdzxx(user, otherparams, request, response);request.setCharacterEncoding("utf-8");response.setContentType("application/vnd.ms-excel;charset=utf-8");String context = "院外來款查詢";response.setHeader("Content-Disposition", "attachment; filename=\""+ URLEncoder.encode(context, "utf-8") + ".xls\"");// 新建EXCEL文件File downloadFile = new File(request.getSession().getServletContext().getRealPath("/"), URLEncoder.encode(context, "utf-8") + ".xls");if (downloadFile.exists()) {downloadFile.delete();}downloadFile.createNewFile();OutputStream os = new FileOutputStream(downloadFile);try {// 打開文件WritableWorkbook book = Workbook.createWorkbook(os);// 生成名為"第一頁"的工作表,參數0表示這是第一WritableSheet sheet = book.createSheet(context,0);/** sheet.setColumnView(1, 20);//設置列寬 sheet.setColumnView(2, 20);* sheet.setColumnView(3, 20); sheet.setColumnView(4, 15);*//*** 設置表格表頭樣式*/WritableFont font1 = new WritableFont(WritableFont.createFont("宋體"), 10, WritableFont.BOLD);font1.setColour(Colour.BLACK);// 表格字體顏色WritableCellFormat format1 = new WritableCellFormat(font1);format1.setBackground(Colour.GREEN);// 表格背景顏色format1.setBorder(Border.ALL, BorderLineStyle.THIN);// 表格線條加黑format1.setAlignment(jxl.format.Alignment.CENTRE);// 左右居中format1.setVerticalAlignment(jxl.format.VerticalAlignment.CENTRE);// 上下居中format1.setWrap(true);// 單元格的文字按照單元格的列寬來自動換行顯示/*** 設置表格內容樣式*/// 設置字體為宋體,16號字,加粗,顏色為黑色WritableFont font2 = new WritableFont(WritableFont.createFont("宋體"), 10, WritableFont.BOLD);font2.setColour(Colour.BLACK);// 表格字體顏色WritableCellFormat format2 = new WritableCellFormat(font2);format2.setBackground(Colour.GRAY_25);// 表格背景顏色format2.setBorder(Border.ALL, BorderLineStyle.THIN);// 表格線條加黑format2.setAlignment(jxl.format.Alignment.CENTRE);// 左右居中format2.setVerticalAlignment(jxl.format.VerticalAlignment.CENTRE);// 上下居中format2.setWrap(true);// 單元格的文字按照單元格的列寬來自動換行顯示/*** 步驟: 1.創建表格--建立標簽,參數依次為:列索引、行索引、內容、格式 Label labelA = new Label(0,* 0, "姓名", format1) 2.將定義好的單元格添加到工作表中 sheet.addCell(labelA); 3.把* 單元格(column, row)到單元格(column1,row1)進行合并,沒有合并可不用寫* 如將第一列的第一行與第第一列的第二行合并 sheet.mergeCells(0, 0, 0, 1);*//*** 添加表格表頭*/// 1.人員信息Label labelA = new Label(0, 0, "年度", format1);Label labelB = new Label(1, 0, "結算方式", format1);Label labelC = new Label(2, 0, "結算號", format1);Label labelD = new Label(3, 0, "金額", format1);Label labelE = new Label(4, 0, "類別", format1);Label labelF = new Label(5, 0, "附言", format1);Label labelG = new Label(6, 0, "交易日", format1); Label labelH = new Label(7, 0, "對方戶名", format1);sheet.addCell(labelA);sheet.addCell(labelB);sheet.addCell(labelC);sheet.addCell(labelD);sheet.addCell(labelE);sheet.addCell(labelF);sheet.addCell(labelG);sheet.addCell(labelH);sheet.setColumnView(3, 15);sheet.setColumnView(5, 15);sheet.setColumnView(6, 15);sheet.setColumnView(7, 40);/*** 添加表格內容*/for(int i=0;i<list.size();i++){Map<String, String> map = list.get(i);labelA = new Label(0, i+1, map.get("kjnd"), format2);labelB = new Label(1, i+1, map.get("jsfs"), format2);labelC = new Label(2, i+1, map.get("jysdh"), format2);labelD = new Label(3, i+1, map.get("jyje"), format2);labelE = new Label(4, i+1, map.get("bz"), format2);labelF = new Label(5, i+1, map.get("fy"), format2);labelG = new Label(6, i+1, map.get("jyrq"), format2); labelH = new Label(7, i+1, map.get("zy"), format2);sheet.addCell(labelA);sheet.addCell(labelB);sheet.addCell(labelC);sheet.addCell(labelD);sheet.addCell(labelE);sheet.addCell(labelF);sheet.addCell(labelG);sheet.addCell(labelH);}book.write();book.close();} catch (Exception e) {log.writeLog("導出院外來款查詢報錯:" + e.getMessage());}os.close();// 傳送文件流InputStream is = null;is = new FileInputStream(downloadFile);byte[] buf = new byte[4096];/* 創建輸出流 */ServletOutputStream servletOS = response.getOutputStream();int readLength;while (((readLength = is.read(buf)) != -1)) {servletOS.write(buf, 0, readLength);}is.close();servletOS.flush();servletOS.close();} }2.有合并行/列
package weaver.zbyh.servlet;import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.URLEncoder; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.List;import javax.servlet.ServletException; import javax.servlet.ServletOutputStream; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse;import jxl.Workbook; import jxl.format.Border; import jxl.format.BorderLineStyle; import jxl.format.Colour; import jxl.write.Label; import jxl.write.WritableCellFormat; import jxl.write.WritableFont; import jxl.write.WritableSheet; import jxl.write.WritableWorkbook;import weaver.conn.RecordSet; import weaver.general.BaseBean; import weaver.zbyh.entity.DayCheckEntity;/*** 日考勤報表導出* * @author Yuk* */ public class DownLoadDayCheckServlet extends HttpServlet {protected void service(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException {RecordSet rs = new RecordSet();BaseBean log = new BaseBean();log.writeLog("開始--導出日考勤報表");request.setCharacterEncoding("utf-8");response.setContentType("application/vnd.ms-excel;charset=utf-8");Calendar current = (Calendar) request.getSession().getAttribute("current");int day = current.get(Calendar.DAY_OF_MONTH);// 今天是幾號SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");current.set(Calendar.DATE, 1);String firstDay = sdf.format(current.getTime());// 本月1號的日期current.set(Calendar.DAY_OF_MONTH, day);String presentDay = sdf.format(current.getTime());// 系統當前日期String context = "每日統計表-統計日期" + firstDay + "至" + presentDay;response.setHeader("Content-Disposition", "attachment; filename=\""+ URLEncoder.encode(context, "utf-8") + ".xls\"");// 新建EXCEL文件File downloadFile = new File(request.getSession().getServletContext().getRealPath("/"), URLEncoder.encode(context, "utf-8") + ".xls");if (downloadFile.exists()) {downloadFile.delete();}downloadFile.createNewFile();OutputStream os = new FileOutputStream(downloadFile);try {// 打開文件WritableWorkbook book = Workbook.createWorkbook(os);// 生成名為"第一頁"的工作表,參數0表示這是第一WritableSheet sheet = book.createSheet(firstDay + "-" + presentDay,0);/** sheet.setColumnView(1, 20);//設置列寬 sheet.setColumnView(2, 20);* sheet.setColumnView(3, 20); sheet.setColumnView(4, 15);*//*** 設置表格表頭樣式*/WritableFont font1 = new WritableFont(WritableFont.createFont("宋體"), 10, WritableFont.BOLD);font1.setColour(Colour.BLACK);// 表格字體顏色WritableCellFormat format1 = new WritableCellFormat(font1);format1.setBackground(Colour.GREEN);// 表格背景顏色format1.setBorder(Border.ALL, BorderLineStyle.THIN);// 表格線條加黑format1.setAlignment(jxl.format.Alignment.CENTRE);// 左右居中format1.setVerticalAlignment(jxl.format.VerticalAlignment.CENTRE);// 上下居中format1.setWrap(true);// 單元格的文字按照單元格的列寬來自動換行顯示/*** 設置表格內容樣式*/// 設置字體為宋體,16號字,加粗,顏色為黑色WritableFont font2 = new WritableFont(WritableFont.createFont("宋體"), 10, WritableFont.BOLD);font2.setColour(Colour.BLACK);// 表格字體顏色WritableCellFormat format2 = new WritableCellFormat(font2);format2.setBackground(Colour.GRAY_25);// 表格背景顏色format2.setBorder(Border.ALL, BorderLineStyle.THIN);// 表格線條加黑format2.setAlignment(jxl.format.Alignment.CENTRE);// 左右居中format2.setVerticalAlignment(jxl.format.VerticalAlignment.CENTRE);// 上下居中format2.setWrap(true);// 單元格的文字按照單元格的列寬來自動換行顯示/*** 步驟: 1.創建表格--建立標簽,參數依次為:列索引、行索引、內容、格式 Label labelA = new Label(0,* 0, "姓名", format1) 2.將定義好的單元格添加到工作表中 sheet.addCell(labelA); 3.把* 單元格(column, row)到單元格(column1,row1)進行合并,沒有合并可不用寫* 如將第一列的第一行與第第一列的第二行合并 sheet.mergeCells(0, 0, 0, 1);*//*** 添加表格表頭*/// 1.人員信息Label labelA = new Label(0, 0, "姓名", format1);Label labelB = new Label(1, 0, "部門", format1);Label labelC = new Label(2, 0, "工號", format1);Label labelD = new Label(3, 0, "日期", format1);Label labelE = new Label(4, 0, "上班打卡時間", format1);Label labelF = new Label(5, 0, "下班打卡時間", format1);sheet.addCell(labelA);sheet.mergeCells(0, 0, 0, 1);sheet.addCell(labelB);sheet.mergeCells(1, 0, 1, 1);sheet.addCell(labelC);sheet.mergeCells(2, 0, 2, 1);sheet.addCell(labelD);sheet.mergeCells(3, 0, 3, 1);sheet.addCell(labelE);sheet.mergeCells(4, 0, 4, 1);sheet.addCell(labelF);sheet.mergeCells(5, 0, 5, 1);// 2.請假(天)Label labelG = new Label(6, 0, "請假(天)", format1);sheet.addCell(labelG);sheet.mergeCells(6, 0, 19, 0);// 3.流程信息String[] leaveArr = { "遲到", "早退", "年休假", "事假", "病假", "婚假", "喪假","產假", "護理假", "哺乳假", "出差", "外出", "補打卡", "曠工" };for (int i = 0; i < leaveArr.length; i++) {Label label = new Label(i + 6, 1, leaveArr[i], format1);sheet.addCell(label);}/*** 獲取考勤信息,作為表格內容*/// 獲取session中的考勤對象List<DayCheckEntity> dce = (List<DayCheckEntity>) request.getSession().getAttribute("DayCheckList");/*** 添加表格內容*/for (int i = 0; i < dce.size(); i++) {DayCheckEntity obj = dce.get(i);String[] ObjectArr = { obj.getXm(), obj.getBm(), obj.getGh(),obj.getRq() + "", obj.getSbdksj() + "",obj.getXbdksj() + "", obj.getCd() + "",obj.getZt() + "", obj.getNxj() + "", obj.getSj() + "",obj.getBj() + "", obj.getHj() + "", obj.getSj2() + "",obj.getCj() + "", obj.getHlj() + "", obj.getBrj() + "",obj.getCc() + "", obj.getWc() + "", +obj.getBdk() + "",obj.getKg()+ "" };// 循環添加人員、請假與其他流程的信息(固定列)for (int j = 0; j < ObjectArr.length; j++) {if(j<=7){// 文本類型單元格Label label = new Label(j, 2 + i, ObjectArr[j], format2);sheet.addCell(label);}else{// 數字類型單元格jxl.write.Number label = new jxl.write.Number(j, 2 + i,Double.valueOf(ObjectArr[j]), format2);sheet.addCell(label);}}}book.write();book.close();} catch (Exception e) {log.writeLog("導出日考勤報表報錯:" + e.getMessage());}os.close();// 傳送文件流InputStream is = null;is = new FileInputStream(downloadFile);byte[] buf = new byte[4096];/* 創建輸出流 */ServletOutputStream servletOS = response.getOutputStream();int readLength;while (((readLength = is.read(buf)) != -1)) {servletOS.write(buf, 0, readLength);}is.close();servletOS.flush();servletOS.close();} }總結
以上是生活随笔為你收集整理的java打印Excel表格的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 去水印软件一键去除图片中的水印
- 下一篇: 线性代数1