java 用 jxl poi 进行excel 解析 *** 最爱那水货
1 /**2 * 解析excel文件 ,并把数据放入数组中 格式 xlsx xls
3 * @param path 从ftp上下载到本地的文件的路径
4 * @return 数据数组集合
5 */
6 public List<String[]> readExcelPublic(String path){
7 List<String[]> list = new ArrayList<String[]>();
8 log.info("开始解析"+path.substring(path.lastIndexOf("\\")+1)+"文件");
9
10 try {
11 FileInputStream is = new FileInputStream(path); //文件流
12 Workbook workbook = WorkbookFactory.create(is); //这种方式 Excel 2003/2007/2010 都是可以处理的
13 Sheet sheet = workbook.getSheetAt(0);//得到excel第一页的内容
14 for (int i = 0; i < sheet.getPhysicalNumberOfRows(); i++) {
15 //循环行数
16 Row row = sheet.getRow(i);
17 //获取当前行的列长度
18 int cols_length = row.getPhysicalNumberOfCells();
19 //设置当前数组长度 5
20 String[] str = new String[cols_length];
21 for (int j = 0; j < row.getPhysicalNumberOfCells(); j++) {
22 Cell cell = row.getCell(j);
23 str[j] = this.getValue(cell);
24 }
25 list.add(str);
26 }
27 log.info("文件"+path.substring(path.lastIndexOf("\\")+1)+"解析完毕!");
28 } catch (FileNotFoundException e) {
29 log.error("!!!!!!! 未找到文件!文件为: 【"+path+"】");
30 e.printStackTrace();
31 } catch (InvalidFormatException e) {
32 log.error("!!!!!!! 解析文件出错!文件为: 【"+path+"】");
33 e.printStackTrace();
34 } catch (IOException e) {
35 log.error("!!!!!!! 解析文件出错!文件为: 【"+path+"】");
36 e.printStackTrace();
37 }
38 return list;
39 }
40
41
42 /**
43 * 解析excel 文件<br>
44 * 格式为:xls
45 * @param path 文件的路径
46 * @return List<String[]>
47 */
48 public List<String[]> xlsReadExcel(String path){
49 List<String[]> list = new ArrayList<String[]>();
50 log.info("开始解析"+path.substring(path.lastIndexOf("\\")+1)+"文件");
51 try {
52 FileInputStream is = new FileInputStream(path); //文件流
53 HSSFWorkbook workbook = new HSSFWorkbook(is);
54 HSSFSheet sheet = workbook.getSheetAt(0);//得到excel第一页的内容
55 for (int i = 0; i < sheet.getLastRowNum(); i++) {
56 //循环行数
57 HSSFRow row = sheet.getRow(i);
58 //获取当前行的列长度
59 int cols_length = row.getLastCellNum();
60 //设置当前数组长度 5
61 String[] str = new String[cols_length];
62 for (int j = 0; j < row.getLastCellNum(); j++) {
63 HSSFCell cell = row.getCell(j);
64 str[j] = this.getValue(cell);
65 }
66 list.add(str);
67 log.info("文件"+path.substring(path.lastIndexOf("\\")+1)+"解析完毕!");
68 }
69 } catch (FileNotFoundException e) {
70 log.error("!!!!!!! 未找到文件!文件为: 【"+path+"】");
71 e.printStackTrace();
72 } catch (IOException e) {
73 log.error("!!!!!!! 解析文件出错!文件为: 【"+path+"】");
74 e.printStackTrace();
75 }
76 return list;
77 }
78
79
80
81
82 /**
83 * 解析excel 文件<br>
84 * 格式为:xlsx
85 * @param path 文件的路径
86 * @return List<String[]>
87 */
88 public List<String[]> xlsxAnalysisExcexl(String path){
89 List<String[]> list = new ArrayList<String[]>();
90 log.info("开始解析"+path.substring(path.lastIndexOf("\\")+1)+"文件");
91 try {
92 FileInputStream is = new FileInputStream(path); //文件流
93 XSSFWorkbook workbook = new XSSFWorkbook( is);
94 XSSFSheet sheet = workbook.getSheetAt(0);//得到excel第一页的内容
95 for (int i = 0; i < sheet.getLastRowNum(); i++) {
96 //循环行数
97 XSSFRow row = sheet.getRow(i);
98 //获取当前行的列长度
99 int cols_length = row.getLastCellNum();
100 //设置当前数组长度 5
101 String[] str = new String[cols_length];
102 for (int j = 0; j < row.getLastCellNum(); j++) {
103 XSSFCell cell = row.getCell(j);
104 str[j] = this.getValue(cell);
105 }
106 list.add(str);
107 log.info("文件"+path.substring(path.lastIndexOf("\\")+1)+"解析完毕!");
108 }
109 } catch (FileNotFoundException e) {
110 log.error("!!!!!!! 未找到文件!文件为: 【"+path+"】");
111 e.printStackTrace();
112 } catch (IOException e) {
113 log.error("!!!!!!! 解析文件出错!文件为: 【"+path+"】");
114 e.printStackTrace();
115 }
116 return list;
117 }
118
119
120
121 /**
122 * JXL 解析excel 【只适用于 xls格式 的文件解析】 <br>
123 * JXL 不支持 xlsx 文件的解析
124 * @param path 文件的路径
125 * @return
126 */
127 public List<String[]> jxlReadExcel(String path){
128 List<String[]> list = new ArrayList<String[]>();
129 try {
130 InputStream is = new FileInputStream(path);
131 jxl.Workbook rwb = jxl.Workbook.getWorkbook(is);
132 jxl.Sheet sheet = rwb.getSheet(0);
133 for (int i = 0; i < sheet.getRows(); i++) {
134 jxl.Cell[] cell = sheet.getRow(i);
135 String[] strs = new String[cell.length];
136 for (int j = 0; j < cell.length; j++) {
137 strs[j] = cell[j].getContents();
138 }
139 list.add(strs);
140 }
141 } catch (FileNotFoundException e) {
142 e.printStackTrace();
143 } catch (BiffException e) {
144 e.printStackTrace();
145 } catch (IndexOutOfBoundsException e) {
146 e.printStackTrace();
147 } catch (IOException e) {
148 e.printStackTrace();
149 }
150 return list;
151 }
152
153
154
155
156 /**
157 * 根据不同的cell格式数据 来转换为string的数据
158 * @param cell 单元格内容
159 * @return
160 */
161 private String getValue(Cell cell) {
162 int cellType = cell.getCellType();
163 String cellValue = null;
164 switch(cellType) {
165 case Cell.CELL_TYPE_STRING: //文本
166 cellValue = cell.getStringCellValue();
167 break;
168 case Cell.CELL_TYPE_NUMERIC: //数字、日期
169 if(DateUtil.isCellDateFormatted(cell)) {
170 cellValue = new SimpleDateFormat("yyyyMMdd").format(cell.getDateCellValue()); //日期型
171 }
172 else {
173 String num = String.valueOf(cell.getNumericCellValue()); //数字
174 if(num.contains("E")){
175 cellValue = num.substring(0,num.indexOf("E")).replaceAll("\\.", "");
176 }else if(num.endsWith(".0")){
177 cellValue = num.split("\\.")[0];
178 }else{
179 cellValue = num;
180 }
181 }
182 break;
183 case Cell.CELL_TYPE_BOOLEAN: //布尔型
184 cellValue = String.valueOf(cell.getBooleanCellValue());
185 break;
186 case Cell.CELL_TYPE_BLANK: //空白
187 cellValue = cell.getStringCellValue();
188 break;
189 case Cell.CELL_TYPE_ERROR: //错误
190 cellValue = "";
191 break;
192 case Cell.CELL_TYPE_FORMULA: //公式
193 cellValue = "";
194 break;
195 default:
196 cellValue = "";
197
198 }
199 return cellValue;
200 }
201
202
203 /**
204 * 转换类型 <br>
205 * 支持xls 格式的excel文件
206 * @param hssfCell
207 * @return
208 */
209 @SuppressWarnings("static-access")
210 private String getValue(HSSFCell hssfCell){
211 if(hssfCell.getCellType() == hssfCell.CELL_TYPE_BOOLEAN){
212 return String.valueOf( hssfCell.getBooleanCellValue());
213 }else if(hssfCell.getCellType() == hssfCell.CELL_TYPE_NUMERIC){
214 String num = String.valueOf( hssfCell.getNumericCellValue());
215 if(num.contains("E")){//科学计数法 去掉. 和E及E后面的
216 return num.substring(0,num.indexOf("E")).replaceAll("\\.", "");
217 }else if(num.endsWith(".0")){// 自动转成 .0的,去掉.0
218 return num.split("\\.")[0];
219 }else{
220 return num;
221 }
222 }else{
223 return String.valueOf( hssfCell.getStringCellValue());
224 }
225 }
226
227
228 /**
229 * 转换类型 <br>
230 * 支持 xlsx 格式的excel文件
231 * @param xssfCell
232 * @return
233 */
234 @SuppressWarnings("static-access")
235 private String getValue(XSSFCell xssfCell){
236 if(xssfCell.getCellType() == xssfCell.CELL_TYPE_BOOLEAN){
237 return String.valueOf( xssfCell.getBooleanCellValue());
238 }else if(xssfCell.getCellType() == xssfCell.CELL_TYPE_NUMERIC){
239 String num = String.valueOf( xssfCell.getNumericCellValue());
240 if(num.contains("E")){//科学计数法 去掉. 和E及E后面的
241 return num.substring(0,num.indexOf("E")).replaceAll("\\.", "");
242 }else if(num.endsWith(".0")){// 自动转成 .0的,去掉.0
243 return num.split("\\.")[0];
244 }else{
245 return num;
246 }
247 }else{
248 return String.valueOf( xssfCell.getStringCellValue());
249 }
250 }
251
以上是 java 用 jxl poi 进行excel 解析 *** 最爱那水货 的全部内容, 来源链接: utcz.com/z/390964.html