Java操作Excel文件之使用JXL 学习笔记
百科上对于JXL的说明:
通过java操作excel表格的工具类库
支持Excel 95-2000的所有版本
生成Excel 2000标准格式
支持字体、数字、日期操作
能够修饰单元格属性
支持图像和图表 应该说以上功能已经能够大致满足我们的需要。最关键的是这套API是纯Java的,并不依赖Windows系统,即使运行在Linux下,它同样能够正确的处理Excel文件。另外需要说明的是,这套API对图形和图表的支持很有限,而且仅仅识别PNG格式。 |
前几天学习了下,总结备忘下:贴个关于Excel操作类的代码:(需要加入jxl.jar包)
/** * * <pre> * MS Office Excel 文件操作对象 * 注:利用第三方包jxl.jar进行操作 * 注:暂不支持excel2007版本新格式xlsx后缀名 * 提供操作内容: * 1.创建Excel文件 * 2.读取Excel文件 * 3.导出(写入)Excel文件 * 4.判断是否为Excel文件 * </pre> * * @author 陈书挺 * @create 2010-6-12 * @version v1.0 * * <pre> * 修改时间 修改人 修改原因 * 2010-6-12 陈书挺 新建类 * 2010-6-13 陈书挺 修改createExcel(String)方法 | 增加createExcel(String, String...)方法 * </pre> * */ public class ExcelOperator { /* * Excel文件后缀名 */ private static final String EXCEL_POSTFIX = ".xls"; /** * 创建指定的文件路径的一个Excel文件<br> * 默认创建3个工作表分别为:Sheet1|Sheet2|Sheet3<br> * 注:只支持xls格式的文件 * @param filePath 文件路径 * @throws Exception */ public void createExcel(String filePath) throws Exception{ this.createExcel(filePath, "Sheet1" , "Sheet2" , "Sheet3"); } /** * 创建指定的文件路径的一个Excel文件,并指定工作表名<br> * 注:只支持xls格式的文件 * @param filePath 文件路径 * @param sheetNames 工作表名数组 * @throws Exception */ public void createExcel(String filePath , String...sheetNames) throws Exception{ if(!this.isExcel(filePath)){ throw new Exception("对不起,文件必须是Excel文件,必须是xls格式的文件"); } File file = new File(filePath); //工厂方法创建一个可写入的工作薄(WorkBook) WritableWorkbook workBook = Workbook.createWorkbook(file); //创建一个可写入的工作表(Sheet) 得到的对象为WritableSheet对象 //工作表名 工作表在工作簿中的位置 for (int i = 0; i < sheetNames.length; i++) { workBook.createSheet(sheetNames[i], i); } workBook.write(); workBook.close(); } /** * 读取指定文件路径的Excel文件,以集合方式返回<br> * 说明:读取所有工作表的内容 * @param filePath 文件路径 * @return List集合,List集合中的元素表示一个工作表 * List中存储String[][]数组,一个数组表示存储工作表的内容 * 返回文件中的所有内容 * @throws Exception */ public List<String [][]> readExcel(String filePath) throws Exception{ if(!this.isExcel(filePath)){ throw new Exception("对不起,文件必须是Excel文件,必须是xls格式的文件"); } List<String [][]> contents = new ArrayList<String[][]>(); File file = new File(filePath); //创建工作薄 Workbook workBook = Workbook.getWorkbook(file); //获取工作表 Sheet [] sheets = workBook.getSheets(); if(sheets!=null && sheets.length>0){ for (int i = 0; i < sheets.length; i++) { String[][] content = this.readExcel(filePath, i); contents.add(content); } } workBook.close(); return contents; } /** * 将指定内容写入指定的Excel文件,并指定相应的工作表名 * @param filePath 文件路径 * @param contents 数据内容 * @param sheetName 工作表名 * @throws Exception */ public void writeExcel(String filePath , String [][] contents ,String sheetName) throws Exception{ if(!this.isExcel(filePath)){ throw new Exception("对不起,文件必须是Excel文件,必须是xls格式的文件"); } File file = new File(filePath); //工厂方法创建一个可写入的工作薄(WorkBook) WritableWorkbook workBook = Workbook.createWorkbook(file); WritableSheet sheet = workBook.createSheet(sheetName, 0); for (int i = 0; i < contents.length; i++) { for (int j = 0; j < contents[i].length; j++) { sheet.addCell(new Label(j,i,contents[i][j])); } } workBook.write(); workBook.close(); } /** * 将指定内容写入指定的Excel文件,并指定相应的工作表名 * @param filePath 文件路径 * @param contents 数据内容 * @param sheetName 工作表名 * @throws Exception */ public void writeExcel(String filePath , Vector<Vector<String>> contents , String sheetName) throws Exception{ this.writeExcel(filePath, StringUtils.toStringArray(contents), sheetName); } /** * 读取指定文件路径、指定工作表索引的Excel文件 * * @param filePath Excel文件路径 * @param sheetIndex 工作表索引 从0开始 * @return 与Excel结构相似的二维数组,二维数组中存储的是表格中的内容 * @throws Exception */ public String [][] readExcel(String filePath , int sheetIndex) throws Exception{ if(!this.isExcel(filePath)){ throw new Exception("文件必须是Excel文件,必须是xls格式的文件"); } File file = new File(filePath); //创建工作薄 Workbook workBook = Workbook.getWorkbook(file); //获取工作表 Sheet [] sheets = workBook.getSheets(); if(sheetIndex>sheets.length-1){ throw new Exception("工作表索引["+sheetIndex+"]超出范围"); } //获取指定工作表 Sheet sheet = sheets[sheetIndex]; //获取当前工作薄的行数 int rows = sheet.getRows(); //获取当前工作薄的列数 int columns = sheet.getColumns(); //存储Excel中的数据 String [][] content = new String[rows][columns]; this.initArrays(content); for (int i = 0; i < rows; i++) { //得到当前行的所有单元格 Cell [] cells = sheet.getRow(i); if(cells!=null && cells.length>0){ for (int j= 0; j < cells.length; j++) { String cellContent = cells[j].getContents(); content[i][j]=cellContent; } } } workBook.close(); return content; } /** * 判断指定文件的路径是否是Excel文件 * @param filePath 文件的路径 * @return 是否是Excel文件 * true:是Excel文件 * false:不是Excel文件 */ public boolean isExcel(String filePath){ //获取文件后缀名 String postfix = FileUtils.getPostfix(filePath); if(!postfix.equals(ExcelOperator.EXCEL_POSTFIX)){ return false; } return true; } /* * 初始化二维数组内容为"" * @param arrays 要初始化二维数组 */ private void initArrays(String [][] arrays){ for (int i = 0; i < arrays.length; i++) { for (int j = 0; j < arrays[i].length; j++) { arrays[i][j]=""; } } } }