国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

poi基本用法(v3.15)

2019-11-08 02:13:57
字體:
供稿:網(wǎng)友

xlsx和xlsm區(qū)別:

xlsm中默認(rèn)啟動(dòng)宏,而xlsx則是雖然帶有宏,也不會(huì)被Excel執(zhí)行。

寫在前頭的經(jīng)驗(yàn)教訓(xùn):

1,POI-3.15的Sheet.getLastRowNum()是0-based;Row.getLastColNum()結(jié)果是1-based。

2,poi中getPhysicalNumberOfRows()和getLastRowNum()區(qū)別 :     舉例說明:修改xlsx文件后綴為rar,解壓之(xlsx是ooxml格式的文件)。找到xl/worksheets/sheet*.xml文件,打開,可以看到這是一個(gè)xml文件,這時(shí)候,如果我們?cè)谄渲械膕heetData元素中添加一個(gè)空的<row></row>標(biāo)簽。 getPhysicalNumberOfRows()計(jì)算的是所有的<row>標(biāo)簽的總數(shù)。 getLastRowNum()計(jì)算的是所有<row>標(biāo)簽中r屬性(行號(hào))的最大值。 所以我們?cè)诒闅vEXCEL的時(shí)候,應(yīng)該使用的遍歷行號(hào)上限(閉區(qū)間)是getLastRowNum().在這其中,可能會(huì)遇到Row==null的情況需要跳過。 另一方面,出于業(yè)務(wù)方向的考慮,我們一般要檢查row!=null的時(shí)候一行中是否全是“空白”符號(hào),如果全是空白符號(hào)的行一般不作為數(shù)據(jù)行分析。 3,有關(guān)格式,千萬不要試圖將那些線程不安全的對(duì)象作為靜態(tài)常量,之前在使用jxl框架的時(shí)候,企圖將格式對(duì)象作為全局靜態(tài)常量,最后居然在因?yàn)榫€程不安全居然出現(xiàn)了相當(dāng)摸不著頭腦的bug(第一次導(dǎo)出成功,之后的同一導(dǎo)出請(qǐng)求的返回?cái)?shù)據(jù)文件很可能會(huì)被損壞)。

讀:

輔助類:

/** * @author 80375068 * @version 1.0 * @date 2016/12/21 * @package demo */public class WorkbookFactory { /** * 讀取excel輸入流 * @param ips * @return */ public static Workbook createWorkBook(InputStream ips){ Workbook workbook=null; try{ workbook=getWorkBook(ips); }catch (Exception ex){ throw new AppInternalException("打開EXCEL文件流失敗!",ex); } return workbook; } /** * 根據(jù)excel輸入流創(chuàng)建WorkBook * @param ips * @return * @throws java.io.IOException */ PRivate static Workbook getWorkBook(InputStream ips) throws IOException { Workbook workbook=null; //輸入流必須支持mark/reset方法 if(!ips.markSupported()){ ips=new PushbackInputStream(ips,8); } //使用微軟Office文件系統(tǒng),Excel2003 if(POIFSFileSystem.haspOIFSHeader(ips)){ workbook=new HSSFWorkbook(ips); }else if(DocumentFactoryHelper.hasOOXMLHeader(ips)){ workbook=new XSSFWorkbook(ips); } return workbook; }}

基本的業(yè)務(wù)代碼

Workbook workbook = WorkbookFactory.createWorkBook(is);Sheet sheet = workbook.getSheetAt(0);for(Row row:sheet){ for(Cell cell:row){ new DataFormatter().formatCellValue(cell); }}

寫:

輔助類:

public class ExcelWriter implements Closeable{ private OutputStream ops; private Workbook workbook; public ExcelWriter(OutputStream ops, ExcelType excelType) { //使用緩沖輸出流 this.ops = new BufferedOutputStream(ops, 8192); //創(chuàng)建xls或者xlsx if (excelType.XLS.equals(excelType)) { this.workbook = new HSSFWorkbook(); } else { this.workbook = new XSSFWorkbook(); } } /** * 將WorkBook寫到輸出流中 * * @throws java.io.IOException */ public void write() throws IOException { workbook.write(ops); ops.close(); ops = null; } public Workbook getWorkbook() { return workbook; } @Override public void close() { if (ops != null) { try { ops.close(); } catch (IOException ex) { //靜默關(guān)閉 } } } public enum ExcelType { XLS("xls", "EXCEL_2003", false), XLSX("xlsx", "EXCEL_2007", false), XSLM("xlsm", "EXCEL_2007", true); //文件后綴名 private String suffix; //文件版本 private String vision; //是否啟用宏 private boolean macros; private ExcelType(String suffix, String vision, boolean macros) { this.suffix = suffix; this.vision = vision; this.macros = macros; } public boolean hasMacros() { return macros; } public String getSuffix() { return suffix; } public String getVision() { return vision; } }}

基本業(yè)務(wù)代碼(用于Servlet中)

private ExcelWriter createExcel(HttpServletResponse response,String fileName) throws IOException { response.setContentType("application/vnd.ms-excel"); response.setHeader("Content-disposition","attachment;filename=" + new String(fileName.getBytes(AppGlobal.getMessageEncoding()), "ISO_8859_1")); response.setHeader("filename", URLEncoder.encode(fileName, AppGlobal.getMessageEncoding())); // 獲取表頭 List<ColumnOut> columns = module.getColumnsInfo(chosenCols); ExcelWriter writer=new ExcelWriter(response.getOutputStream(), ExcelWriter.ExcelType.XLS); Workbook wb = writer.getWorkbook(); Sheet sheet = wb.createSheet(); // 格式 CellStyle headStyle=wb.createCellStyle(); Font headFont=wb.createFont(); headFont.setFontName("ARIAL"); headFont.setFontHeightInPoints((short) 10); headFont.setBold(true); headStyle.setFont(headFont); headStyle.setAlignment(HorizontalAlignment.CENTER); //行 Row row=sheet.creatRow(0);//第0行 //單元格 A1 Cell cell=row.creatCell(0); cell.setStyle(headStyle);//格式 cell.setValue("abc");//value
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 绍兴县| 永定县| 库尔勒市| 兴业县| 海南省| 攀枝花市| 西吉县| 麻城市| 塔城市| 阿鲁科尔沁旗| 张家界市| 潮安县| 南岸区| 文登市| 辽阳县| 青浦区| 上杭县| 盐山县| 蕲春县| 长治县| 宝鸡市| 建湖县| 天全县| 江口县| 阿城市| 廊坊市| 鄄城县| 嘉义市| 红桥区| 安泽县| 松江区| 高唐县| 三台县| 永康市| 昌吉市| 大邑县| 鄂托克前旗| 泽库县| 惠州市| 太白县| 德格县|