Excelutil 工具类

1.说明:ExcelUtil主要用于获得单元格的数据和对对指定单元格中写入数据用!

相关代码如下:

  1 package main.java;
  2
  3 import java.io.File;
  4 import java.io.FileInputStream;
  5 import java.io.FileOutputStream;
  6 import java.util.ArrayList;
  7 import java.util.List;
  8
  9 import org.apache.poi.hssf.usermodel.HSSFWorkbook;
 10 import org.apache.poi.ss.usermodel.Row;
 11 import org.apache.poi.ss.usermodel.Sheet;
 12 import org.apache.poi.ss.usermodel.Workbook;
 13 import org.apache.poi.xssf.usermodel.XSSFCell;
 14 import org.apache.poi.xssf.usermodel.XSSFRow;
 15 import org.apache.poi.xssf.usermodel.XSSFSheet;
 16 import org.apache.poi.xssf.usermodel.XSSFWorkbook;
 17
 18
 19 public class ExcleUtil {
 20     private static XSSFSheet ExcelWSheet;
 21     private static XSSFWorkbook ExcelWBook;
 22     private static XSSFCell Cell;
 23     private static XSSFRow Row;
 24     private static String ExcelFilePath="C:\\TEST.xlsx";
 25
 26     // 设定要设置的Excel的文件路径和Excel 中Sheet名;
 27     // 在读/写Excel 的时候先要调用此方法
 28     public static void setExcleFile(String FilePath, String sheetName) throws Exception {
 29         FileInputStream ExcleFile;
 30         try {
 31             // 实例化Excle文件的FileInputStream 对象;
 32             ExcleFile = new FileInputStream(FilePath);
 33             // 实例化Excle文件的XSSFWorkbook 对象;
 34             ExcelWBook = new XSSFWorkbook(ExcleFile);
 35             /*
 36              * 实例化XSSFSheet 对象,指定ExcelFile中的sheet名称,用于后续对sheet中行和列的操作;
 37              *
 38              */
 39             ExcelWSheet = ExcelWBook.getSheet(sheetName);
 40
 41         } catch (Exception e) {
 42             e.getStackTrace();
 43         }
 44
 45     }
 46     /*
 47      * 读取excle文件指定单元格的函数 ;
 48      *
 49      */
 50
 51     public static String getCell(int row, int col) throws Exception {
 52
 53         try {
 54             // 通过函数参数指定单元格的行号和列,获取指定单元格的对象;
 55             Cell = ExcelWSheet.getRow(row).getCell(col);
 56             /*
 57              * 1.如果单元格的类型为字符串类型,使用getStringCellValue();来获取单元格的内容;
 58              * 2.如果单元格的类型为数字类型,使用getNumberricCellValue();来获取单元格的内容;
 59              * 注意:getNumberricCellValue();返回的值为double类型,转为为字符串类型,必须在
 60              * getNumberricCellValue();前面加上(" ")双引号,用于强制转换为String类型,不加双引号
 61              * 则会抛错;double类型无法转换为String类型的异常;
 62              *
 63              */
 64             String CellData = Cell.getCellType() == XSSFCell.CELL_TYPE_STRING ? Cell.getStringCellValue() + ""
 65                     : String.valueOf(Math.round(Cell.getNumericCellValue()));
 66             return CellData;
 67         } catch (Exception e) {
 68             e.getStackTrace();
 69             return "";
 70         }
 71
 72     }
 73     /*
 74      * 在Excle中执行单元格写入数据;
 75      *
 76      *
 77      */
 78
 79     public static void setCellData(int rownum, int colnum, String Result) throws Exception {
 80
 81         try {
 82             // 获取excle文件的中行对象;
 83             Row = ExcelWSheet.getRow(rownum);
 84             // 如果单元格为空则返回null;
 85             Cell = Row.getCell(colnum, Row.RETURN_BLANK_AS_NULL);
 86             if (Cell == null) {
 87                 // 当单元格为空是则创建单元格
 88                 // 如果单元格为空无法调用单元格对象的setCellValue方法设定单元格的值 ;
 89                 Cell = Row.createCell(colnum);
 90                 // 创建单元格和后可以通过调用单元格对象的setCellValue方法设置单元格的值了;
 91                 Cell.setCellValue(Result);
 92             } else {
 93                 // 单元格中有内容,则可以直接调用单元格对象的 setCellValue 方法来设置单元格的值;
 94                 Cell.setCellValue(Result);
 95             }
 96             FileOutputStream fileout = new FileOutputStream(ExcelFilePath);
 97             // 将内容写到Excel文件中 ;
 98             ExcelWBook.write(fileout);
 99             // j调用flush方法强制刷新写入文件;
100             fileout.flush();
101             fileout.close();
102             System.out.println("-----写入成功!------");
103         } catch (Exception e) {
104             System.out.println(e.getMessage() + e.getStackTrace());
105             throw (e);
106         }
107
108     }
109
110     public static void TangsetCellData(int RowNum, int ColNum, String Result) {
111         try {
112             // 获取行对象
113             Row = ExcelWSheet.getRow(RowNum);
114             // 如果单元格为空,则返回null
115             Cell = Row.getCell(ColNum, Row.RETURN_BLANK_AS_NULL);
116             if (Cell == null) {
117                 // 当单元格对象是Null时,则创建单元格
118                 // 如果单元格为空,无法直接调用单元格的setCellValue方法设定单元格的值
119                 Cell = Row.createCell(RowNum);
120                 // 调用setCellValue方法设定单元格的值
121                 Cell.setCellValue(Result);
122             } else {
123                 // 单元格中有内容,则可以直接调用seCellValue方法设定单元格的值
124                 Cell.setCellValue(Result);
125             }
126             // 实例化写入Excel文件的文件输出流对象
127             FileOutputStream fileOut = new FileOutputStream(ExcelFilePath);
128             // 将内容写入Excel中
129             ExcelWBook.write(fileOut);
130             fileOut.flush();
131             fileOut.close();
132         } catch (Exception e) {
133             // TODO: handle exception
134             e.printStackTrace();
135         }
136     }
137
138     // 从excel 文件中获取测试数据的静态方法;
139     public static Object[][] getTestData(String excelFilePath, String sheetName) throws Exception {
140         // 根据参数传入的数据文件路径和文件名称,组合出Excel 数据文件的绝对路径
141         // 声明一个文件;
142         File file = new File(excelFilePath);
143         // 创建FileInputStream 来读取Excel文件内容;
144         FileInputStream inputStream = new FileInputStream(file);
145         // 声明Workbook 对象;
146         Workbook workbook = null;
147         // 获取文件名参数的扩展名,判断是“.xlsx” 还是 “.xls” ;
148         String fileExtensionName = excelFilePath.substring(excelFilePath.indexOf(‘.‘));
149         if (fileExtensionName.equals(".xlsx")) {
150             workbook = new XSSFWorkbook(inputStream);
151
152         } else if (fileExtensionName.equals(".xls")) {
153             workbook = new HSSFWorkbook(inputStream);
154
155         }
156         Sheet sheet = workbook.getSheet(sheetName);
157         // 获取Excel 数据文件Sheet1 中数据的行数,getLastRowNum 方法获取数据的最后一行的行号,
158         // getFistRowNum 获取第一行 最后一行减去第一行就是总行数了
159         // 注意excle 的行和列都是从0开始的;
160         int rowCount = sheet.getLastRowNum() - sheet.getFirstRowNum();
161         // 创建名为records 的List对象来存储从Excel文件中读取的数据;
162         List<Object[]> records = new ArrayList<Object[]>();
163         // 使用for循环遍历Excel 数据文件的所有数据(除了第一行,第一行为标题行),所以i从1开始而不是从0开始;
164
165         for (int i = 1; i < rowCount + 1; i++) {
166             // 使用getRow来获取行对象;
167             Row row = sheet.getRow(i);
168             /*
169              * 声明一个数据,用来存储Excel数据文件每行中的测试用例和数据,数据的大小用getLastCellNum-2
170              * 来进行动态声明,实现测试数据个数和数组大小一致,
171              * 因为Excel数据文件中的测试数据行的最后一个单元格是测试执行结果,倒数第二个单元格为此测试数据行是否运行的状态位,
172              * 所以最后俩列的单元格数据并
173              * 不需要传入测试方法中,所以是用getLastCellNum-2的方式去掉每行中的最后俩个单元格数据,计算出需要存储的测试数据个数,
174              * 并作为测试数据数组的初始化大小
175              *
176              */
177             String fields[] = new String[row.getLastCellNum() - 2];
178
179             /*
180              * 判断数据行是否要参与测试的执行,Excel 文件的倒数第二列为数据行的状态位, 标记为“y”
181              * 表示此数据行要被测试脚本执行,标记为非“y”的数据行均被认为不会参数测试脚本执行,会被跳过;
182              */
183
184             if (row.getCell(row.getLastCellNum() - 2).getStringCellValue().equals("y")) {
185                 for (int j = 0; j < row.getLastCellNum() - 2; j++) {
186                     /*
187                      * 判断Excel 单元格的内容是数字还是字符, 字符格式调用:
188                      * row.getCell(j).getStringCellValue();
189                      * 数字格式调用:row.getCell(j).getNumericCellValue();
190                      */
191                     fields[j] = (String) (row.getCell(j).getCellType() == XSSFCell.CELL_TYPE_STRING
192                             ? row.getCell(j).getStringCellValue() : "" + row.getCell(j).getNumericCellValue());
193
194                 }
195                 // fields 存储到数组当中;
196                 records.add(fields);
197
198             }
199         }
200
201         /*
202          * 定义函数的返回值,即Object[] [] 将存储测试数据的list 转换为一个Object 的二维数组;
203          */
204         Object[][] results = new Object[records.size()][];
205         for (int i = 0; i < records.size(); i++) {
206             results[i] = records.get(i);
207         }
208
209         return results;
210
211     }
212
213     public static int getLastColumnNum() {
214
215         return ExcelWSheet.getRow(0).getLastCellNum() - 1;
216     }
217
218
219
220
221 }
时间: 2024-10-10 23:23:40

Excelutil 工具类的相关文章

java 常用工具类的使用&lt;四&gt;

一.连接数据库的综合类 1 package com.itjh.javaUtil; 2 3 import java.sql.Connection; 4 import java.sql.DriverManager; 5 import java.sql.PreparedStatement; 6 import java.sql.ResultSet; 7 import java.sql.ResultSetMetaData; 8 import java.sql.SQLException; 9 import

java中常用的工具类(三)

继续分享java中常用的一些工具类.前两篇的文章中有人评论使用Apache 的lang包和IO包,或者Google的Guava库.后续的我会加上的!谢谢支持IT江湖 一.连接数据库的综合类 Java 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53

导入导出Excel的Java工具类ExcelUtil

在编写ExcelUtil之前,在网上查了一些资料.java中用来处理Excel的第三方开源项目主要就是POI和JXL.poi功能强大,但是比较耗资源,对于大数据量的导入导出性能不是太好:jxl功能简单,但是性能比较好. 由于本项目的导入导出更多关注性能问题,而且jxl提供的功能基本也都够用了,于是选择了jxl作为支持. 实战 导出就是将List转化为Excel(listToExcel) 导入就是将Excel转化为List(excelToList) 导入导出中会出现各种各样的问题,比如:数据源为空

【原创】POI操作Excel导入导出工具类ExcelUtil

关于本类线程安全性的解释: 多数工具方法不涉及共享变量问题,至于添加合并单元格方法addMergeArea,使用ThreadLocal变量存储合并数据,ThreadLocal内部借用Thread.ThreadLocalMap以当前ThreadLocal为key进行存储,设置一次变量,则其他线程也会有上次数据的残留,因此在addMergeArea方法中进行清空的操作.为了保证原子性, 采用ReentrantLock确保一次只有一个线程可以进行添加合并数据的操作. 线程安全性从以上两个方面保证. 水

自己封装的poi操作Excel工具类

该工具类主要完成的功能是:读取Excel.汇总Excel的功能.在读取时,可以设定开始和结束读取的位置.设定是否读取多个sheet.设定读取那个或者那些sheet等.在汇总时,如设定是否覆盖目标文件.设定是否比较检查重复内容.设定检查重复的列索引等功能. package com.tgb.ccl.excel.util; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; impo

ExeclUtil 工具类(poi + jxl)

jxl 包: poi 包: 使用:List<List<List<String>>> dataList = ExcelUtil.readExcelByPoi(file);//解析文件 结构:sheet—列—行—String List<List<List<String>>> dataList = ExcelUtil.readExcelByPoi(file); import java.io.BufferedInputStream; impo

基于jdk1.7实现的excel导出工具类

工具类基于jdk1.7 反射特性实现 1.7反射重度依赖于hashmap package com.xx.common.utils; import java.io.*;import java.lang.reflect.Field;import java.text.SimpleDateFormat;import java.util.*;import org.apache.poi.hssf.usermodel.*;import org.slf4j.Logger;import org.slf4j.Log

JXL导出Excel工具类

将Excel中的数据读取到List<Map<String, Object>>集合中 package com.mvc.util; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream; import java.lang.reflect.Field;

使用回调方式写POI导入excel工具类

场景是这样的:为了做一个excel导入的功能,为了尽可能的写一个通用的工具类,将与poi有关的东西都封装起来,以便以其他人员只用关心自己的业务,不用和poi打交道. 写到最后,现在还是会有poi的东西暴漏出来一点,暴漏出来的这个应该是必须的. 为了模拟这个场景,先写两个service方法,用于和数据库交互,存入从模板中读取的数据.代码如下: 1.berthservice public class BerthService { public void update(){ System.out.pr