- 浏览: 53051 次
- 性别:
- 来自: 江西
最新评论
-
czb6788782:
楼主,源码能不能给我学习下~谢谢
Java实现一个压缩小软件 -
hpuyancy:
好像中文会乱码啊?
利用apache ant 包进行压缩、解压缩zip,归档tar,解档tar,压缩tar.gz解压tar.gz -
shutingwang:
不错
Apache POI SpreadSheet的一些简单应用(二) -
gaowei52306:
gaowei52306 写道为啥我下载后双击无法执行?
抱歉, ...
Java实现一个压缩小软件 -
gaowei52306:
为啥我下载后双击无法执行?
Java实现一个压缩小软件
我用的版本是 poi-3.5,您可以去官方上下载。希望对大家能有些帮助:
import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStream; import java.io.Serializable; import java.util.ArrayList; import java.util.List; import org.apache.poi.hssf.usermodel.HSSFCell; import org.apache.poi.hssf.usermodel.HSSFFormulaEvaluator; import org.apache.poi.hssf.usermodel.HSSFRow; import org.apache.poi.hssf.usermodel.HSSFSheet; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.hssf.util.CellReference; import org.apache.poi.poifs.filesystem.POIFSFileSystem; import org.apache.poi.ss.util.CellRangeAddress; public class XZou { /** * copy一个Excel中指定的sheet而后制作成另外一个Excel文件 * @param srcPath 源路径 * @param srcFileName 原文件名 * @param sheetNames 指定的sheet名称集合 * @return 新的文件对象 */ public static File copySpecialSheet(String srcPath,String srcFileName,String[] sheetNames,String targetPath){ srcPath += "/"; File src = new File(srcPath + srcFileName); try { HSSFWorkbook wb = new HSSFWorkbook(new POIFSFileSystem(new FileInputStream(src)));//load src excel int sheetCounts = wb.getNumberOfSheets();//总的sheet数量 List<Integer> xb = new ArrayList<Integer>();//下标值集合 int xiaBiao = 0; for(int i = 0; i<sheetCounts; i++){ String sName = wb.getSheetName(i); boolean boo = false; for(String name: sheetNames){ if(name.equals(sName)){ boo = true; break; } } if(boo){ xiaBiao++; }else{ xb.add(xiaBiao); } } for(int flag: xb){ wb.removeSheetAt(flag);//删除指定的sheet的下标 } OutputStream out = null; try{ File targetFile = new File(targetPath + "/" + System.currentTimeMillis() + ".xls");//在targetPath下生成新的excel文件。 out = new FileOutputStream(targetFile); /* sheetCounts = wb.getNumberOfSheets(); for(int i = 0; i<sheetCounts; i++){ //wb.setSheetHidden(i, true);// 把所有的sheet工作表都给隐藏掉 wb.setSheetHidden(i,2);//把所有的sheet工作表都给隐藏掉,0=显示 1=隐藏 2=非常隐秘(我在Excel中找不到。但是程序找得到~_~) } */ wb.write(out); return targetFile; }catch(Exception ex){ ex.printStackTrace(); throw new RuntimeException("生成新Excel文件失败:",ex); }finally{ try{ if(out!=null) out.close(); }catch(IOException ex){ ex.printStackTrace(); } } } catch (FileNotFoundException e) { throw new RuntimeException("文件不存在" ,e); } catch (IOException e) { throw new RuntimeException("加载XLS文件出现异常:",e); } } /** * 打印一个sheet中的每个合并单元格区的位置 * @param sheet */ public static void sysRange(HSSFSheet sheet){ int count = sheet.getNumMergedRegions();//找到当前sheet单元格中共有多少个合并区域 for(int i = 0; i<count; i++){ CellRangeAddress range = sheet.getMergedRegion(i);//一个合并单元格代表 CellRangeAddress System.out.println(range.formatAsString());//打印合并区域的字符串表示方法 如: B2:C4 System.out.println(range.getFirstRow() + "." + range.getLastRow() + ":" + range.getFirstColumn() + "." + range.getLastColumn() );//打印起始行、结束行、起始列、结束列 } } /** * 根据一行找出有效的起始列号 * @param row * @return */ public int getStartCell(HSSFRow row){ if(row==null){ throw new RuntimeException("无效行"); } int start = 0; for(int i = 0; i<row.getLastCellNum(); i++){ HSSFCell cell = row.getCell(i); if(cell!=null){ if(cell.getCellType()!=HSSFCell.CELL_TYPE_BLANK){ start = i; break; } } } return start; } /** * 根据一行找出有效的结尾列,空白列不算、但是在合并区域时算 * @param row * @return */ public int getLastCell(HSSFRow row){ if(row==null){ throw new RuntimeException("无效行"); } HSSFSheet sheet = row.getSheet(); int merged = sheet.getNumMergedRegions();//获取单元格区域数 int end = 0; for(int x = row.getLastCellNum() - 1; x>=0; x--){ HSSFCell cell = row.getCell(x);//获取列 if(cell==null) continue; if(cell.getCellType()==HSSFCell.CELL_TYPE_BLANK){//空白单元格 int rowNumber = cell.getRowIndex(); int cellNumber = cell.getColumnIndex(); boolean flag = false; for(int i = 0; i<merged; i++){ CellRangeAddress rane = sheet.getMergedRegion(i); if(rowNumber>=rane.getFirstRow()&&rowNumber<=rane.getLastRow()){//确立在行里面 if(cellNumber>=rane.getFirstColumn()&&cellNumber<=rane.getLastColumn()){//确立在列里面 flag = true; break; } } } if(flag){//说明当前单元格是空白单元格并且在合并区域中.可以认定为有效结束列 end = x; break; } }else{//不为空白单元格 end = x; break; } } return end; } /** * 判断一行是否为空行或指定的前几列 * @param row * @return */ public boolean checkRowIsNull(HSSFRow row,int ...cd){ boolean boo = true; if(row==null){ return boo; } int length = 0; int j = 0; if(cd.length==0){ j = 0; length = row.getLastCellNum(); }else{ j = 1; length = cd[0]; } for(; j<length; j++){ HSSFCell cell = row.getCell(j); if(cell!=null){ if(cell.getCellType()!=HSSFCell.CELL_TYPE_BLANK){ if(cell.getCellType()==HSSFCell.CELL_TYPE_STRING){ if(!cell.getRichStringCellValue().toString().trim().equals("")){ boo = false; break; } }else{ boo = false; } } } } return boo; } /** * 根据单元格坐标得出相应的值 如:B3 * @param cellRowCode :坐标 * @param sheet :工作表 * @return 返回值 */ public Serializable getValueByCellCode(String cellRowCode,HSSFSheet sheet){ String thisSheetName = sheet.getSheetName(); CellReference ref = new CellReference(cellRowCode); int xy[] = {ref.getRow(),ref.getCol()}; HSSFCell cell = sheet.getRow(xy[1]-1).getCell(xy[0]); switch (cell.getCellType()){ case HSSFCell.CELL_TYPE_BLANK: return ""; case HSSFCell.CELL_TYPE_NUMERIC: return (cell.getNumericCellValue()); case HSSFCell.CELL_TYPE_STRING: return cell.getRichStringCellValue().toString() ; case HSSFCell.CELL_TYPE_FORMULA: HSSFFormulaEvaluator evaluator = new HSSFFormulaEvaluator(sheet.getWorkbook()); try{ evaluator.evaluateFormulaCell(cell);//检测公式有效性 }catch(java.lang.IllegalArgumentException ex){ throw new RuntimeException("错误的单元格["+thisSheetName+"->"+cellRowCode+"]"); } if(evaluator.evaluateFormulaCell(cell)==HSSFCell.CELL_TYPE_ERROR){ throw new RuntimeException("错误的单元格["+thisSheetName+"->"+cellRowCode+"]"); } if(evaluator.evaluateFormulaCell(cell)==HSSFCell.CELL_TYPE_NUMERIC){ return cell.getNumericCellValue(); }else if(evaluator.evaluateFormulaCell(cell)==HSSFCell.CELL_TYPE_STRING){ return cell.getRichStringCellValue().toString(); } case HSSFCell.CELL_TYPE_BOOLEAN: return (cell.getBooleanCellValue()); default: System.out.print("*"); break; } return null; } public static void main(String[] args) throws Exception { //copySpecialSheet("c:/","test.xls",new String[]{"Sheet1","Sheet2"},"d:/");//把c盘下的test.xls文件中的Sheet1和Sheet2工作表拷贝出来然后生成一个新的Excel放到d盘下 HSSFWorkbook wb = new HSSFWorkbook(new POIFSFileSystem(new FileInputStream("c:/test.xls"))); HSSFSheet sheet = wb.getSheet("测试");//得到名字叫 测试 的一个工作表。 sysRange(sheet);// //..... } }
发表评论
-
上传下载的一个工具类
2010-05-29 14:15 2253自己做了一个上传(利用apache-fileupload组件) ... -
String.format一些用法例子、功能强、希望对您有帮组
2010-05-29 14:06 7480String.format是在JDK1.5中新 ... -
利用apache ant 包进行压缩、解压缩zip,归档tar,解档tar,压缩tar.gz解压tar.gz
2009-12-24 19:33 8673最近用到了利用java进行一序列压缩解压缩,jdk也自带了,这 ... -
根据SQL结果集构建动态二维列表展示在excel中
2009-12-08 21:39 2077近期在项目中用到根据SQL结果集构建动态二维列表展示在exce ... -
JDBC读取一些元数据的常用方法
2009-12-07 16:02 5215JDBC读取一些元数据的常用方法,网上有很多这样的DEMO,在 ... -
java中的精确商务计算
2009-12-06 21:58 966由于计算机在计算过程中的舍入关系,普通的计算和工程计算可能会出 ... -
经常使用的一些克隆实现
2009-12-04 20:54 1374在实践中往往需要使用到克隆,您可以使用java本身提供的克隆实 ... -
Apache dbcp 数据源
2009-12-03 16:59 1373使用直连数据库的话效率比较低,人们就想出另外一种概念:数据库连 ... -
Apache POI SpreadSheet的一些简单应用(一)
2009-12-03 16:35 1920我用的版本是 poi-3.5,您可以去官方上下载。 希望对大家 ... -
java.text包中的DateFormat,NumberFormat一些用法
2009-12-03 15:36 2550import java.text.DateForm ... -
java类中多个时间类型的转换处理
2009-12-03 15:06 1551public class XZou { ... -
List列表中删除指定的多个对象,利用下标来实现
2009-12-03 14:47 2200import java.util.ArrayLis ... -
Excel中列号对应数字或数字对应列号
2009-12-03 14:38 2613public class XZou { p ...
相关推荐
3. **兼容性与稳定性**:Apache POI广泛应用于各种项目,从简单的数据导入导出到复杂的数据分析,其稳定性和兼容性得到了充分验证。随着Microsoft Office文件格式的更新,Apache POI也会相应地进行升级,以支持最新...
尽管Apache POI最初是为Java桌面应用设计的,但经过适当的调整,也可以在Android平台上使用。这通常需要解决一些兼容性和资源管理问题,因为Android环境与标准Java环境有所不同。开发者可能需要使用特定的版本或者...
Apache POI 是一个开源项目...无论是进行数据分析、自动化办公任务,还是构建基于Office格式的数据交换应用,Apache POI都能提供必要的支持。通过不断更新和优化,3.17版本在易用性、性能和功能方面都达到了新的高度。
Apache POI 是一个开源项目,专门用于处理Microsoft Office格式的文件,如Excel、Word和PowerPoint。POI库提供了一套API,使得开发者能够在Java环境中读取、写入和修改这些文件。在本例中,我们关注的是"Apache POI ...
在"poi-3.9.jar"这个文件中,包含了Apache POI项目的主要类和接口,用于处理HSSF(Horizontally Stored Formatted Sheets)和XSSF(XML Spreadsheet Format)文件,分别对应老版的.BIFF8 Excel格式和OOXML的新版....
Apache POI 是一个广泛使用的库,它支持HSSF(Horizontally Stored Spreadsheet Format)和XSSF(XML Spreadsheet Format),分别用于处理老版本的Excel(.xls)和新版本的Excel(.xlsx)文件。此外,它还提供了一...
本篇将详细介绍Apache POI在Excel操作中的应用,包括基本概念、使用步骤、关键类和方法以及实际示例。 1. 基本概念 - HSSF (Horrible Spreadsheet Format):用于处理旧版的BIFF格式Excel文件(.xls)。 - XSSF ...
1. **Excel处理**:Apache POI 提供了HSSF(Horrible Spreadsheet Format)和XSSF(XML Spreadsheet Format)两个API,分别用于处理旧版的.xls格式和较新的.xlsx格式。它们支持创建工作簿、工作表、行、单元格等,并...
二、Apache POI的主要组件 1. HSSF(Horrible Spreadsheet Format):这是用于处理旧版的Excel文件(.xls格式)的API。 2. XSSF(eXtensible Spreadsheet Format):用于处理Excel 2007及以后版本的.xlsx文件,支持...
Apache POI API 包含多个关键组件,如HSSF(Horizontally Stored Format)用于处理旧版的.BIFF8格式Excel文件,而XSSF(XML Spreadsheet Format)则用于处理.xlsx格式的新版Excel文件。它们都提供了对工作簿...
Apache POI 是一个Java库,专门用于操作Microsoft Office文件,特别是Excel、Word和PowerPoint文档。这个库由Apache软件基金会开发,它提供了丰富的API,使Java程序员能够创建、修改和展示MS Office文件。Apache POI...
以下是一些关于如何使用Apache POI进行Excel读取的关键知识点: 1. **引入依赖**:首先,你需要将Apache POI的JAR包添加到你的项目类路径中。在给定的压缩包"apche poi.jars"中,可能包含了所有必需的Apache POI库...
首先,Apache POI 提供了HSSF(Horizontally Stored SpreadSheet Format)和XSSF(XML Spreadsheet Format)两个API,分别用于处理老版本的BIFF8格式(.xls)和新版本的OOXML格式(.xlsx)的Excel文件。在3.15版本中...
Apache POI的核心组件包括HSSF(Horrible Spreadsheet Format)和XSSF(XML Spreadsheet Format),分别用于处理老版本的Excel(.xls)和新版本的Excel(.xlsx)。此外,还有一组用于处理Word(HWPF和XWPF)和...
Apache POI 提供了多种API,包括HSSF(Horrible Spreadsheet Format)用于处理老版本的BIFF格式(Excel 97-2003),以及XSSF(eXtensible Spreadsheet Format)用于处理基于XML的新版本XLSX格式。通过这些API,你...
1. **文件格式支持**:Apache POI 支持HSSF(Horrible Spreadsheet Format)用于处理.xls文件,这是对旧版Microsoft Excel的支持。XSSF(eXtreme Spreadsheet Format)则用于处理.xlsx文件,符合Office Open XML标准...
Apache POI是一个开源项目,由Apache软件基金会维护,专门用于处理Microsoft Office格式的文件,如Word(.doc)、Excel(.xlsx/.xls)和PowerPoint(.pptx/.ppt)。这个教程将帮助你深入理解如何使用Apache POI库在...
`org.apache.poi.hssf.converter` 是Apache POI的一个子模块,它专注于处理老版本的Excel文件(.xls),也就是基于HSSF(Horizontally Stored Spreadsheet Format)的文件。 在这个标题为“org.apache.poi.hssf....
1. **HSSF (Horrible Spreadsheet Format)**:这是Apache POI的一个子项目,它提供了读取和写入旧版Microsoft Excel BIFF8格式(.xls)的能力。BIFF8是Excel 97-2003使用的文件格式。HSSF支持创建工作簿、工作表、...