完整代码,可直接复用!觉着可以记得留赞关注我!
需求:最近一直要提交很多sql工单数据给DB管理员执行,一个一个复制很麻烦,于是写下此方法!如有高见欢迎留言!
注意:记得引入poi包
如果你觉着不错,麻烦帮忙点个赞!分享下!谢谢!
复制代码
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
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214package com.example.util; import org.apache.commons.lang3.StringUtils; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.ss.usermodel.*; import org.apache.poi.xssf.usermodel.XSSFWorkbook; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.io.*; import java.util.ArrayList; import java.util.List; /** * 功能:读取excel数据,生成批量sql * @author kangzhuang * @date 20190822 * */ public class ExcelReadUtil { private static Logger logger = LoggerFactory.getLogger(ExcelReadUtil.class); private static Workbook workbook; private static Sheet sheet; /** * 初始化表格,判断文件格式是xls还是xlsx * @param excelPath */ private static void initExcel(String excelPath){ if (StringUtils.isEmpty(excelPath)){ logger.info("文件路径不能为空"); workbook = null; return; } try { InputStream is = new FileInputStream(excelPath); if (excelPath.endsWith(".xls")){//.xls格式 workbook = new HSSFWorkbook(is); }else if(excelPath.endsWith(".xlsx")){//.xlsx格式 workbook = new XSSFWorkbook(is); }else{ workbook = null; logger.info("无法转换的Excel文件格式(后缀名应为:.xls或.xlsx)"); } } catch (FileNotFoundException e) { logger.info("找不到指定文件"); } catch (IOException e) { logger.info("IO异常"); } } /** * 读取Excel文件并解析成json字符串后写入新的文件 * @param excelPath 要解析的Excel文件路径(具体文件) * @param fromRow 指定开始读取的行数,如从第2行开始则为2 * @param filePath 写入后的文件保存位置(文件路径) * @param sql sql 语句 *@param index 指定哪些位置是字符串,需要特殊处理,从0开始 */ private static void readExcelToJsonFile(String excelPath, int fromRow, String filePath,String sql,int[] index){ initExcel(excelPath); if(workbook == null){ logger.info("初始化工作簿失败"); return; } List<String> sqlList = new ArrayList<String>(); //遍历sheet for(int s=0; s<workbook.getNumberOfSheets(); s++){ sheet = workbook.getSheetAt(s); //首行,即json-key Row headerRow = getRow(sheet, 1); //总行数 int rowNum = sheet.getLastRowNum() + 1; //遍历行,从fromRow行开始遍历 for(int i=(fromRow-1); i<rowNum; i++){ // TODO sql是变化的 StringBuilder sqlContent= new StringBuilder(sql); Row row = sheet.getRow(i); if(row == null){ continue; } //总列数 int cellNum = row.getLastCellNum(); //遍历单元格 for(int j=0; j<cellNum; j++){ String key = getCellValue(headerRow.getCell(j)); String value = getCellValue(row.getCell(j)); if(!StringUtils.isEmpty(key) && !StringUtils.isEmpty(value)){ boolean flag =false; // TODO 注意如果有字段是字符串类型则需要加引号 for (int k = 0; k < index.length; k++) { if (j==index[k]){ flag =true; } } if (flag){ sqlContent.append("'"); } sqlContent.append(value); if (flag){ sqlContent.append("'"); } sqlContent.append(","); } } //一行正好是一条数据,结尾 sqlContent =new StringBuilder(sqlContent.substring(0,sqlContent.length()-1)).append(");").append("rn"); sqlList.add(sqlContent.toString()); } fileWrite(filePath,sqlList); } } /** * 获取指定行 * @param sheet * @param rowNum * @return */ private static Row getRow(Sheet sheet, int rowNum){ if(sheet == null){ return null; } return sheet.getRow(rowNum - 1); } /** * 获取单元格的值 * @param cell * @return 单元格值 */ private static String getCellValue(Cell cell){ String cellValue = ""; if(cell != null){ switch (cell.getCellType()){//单元格类型 case Cell.CELL_TYPE_BOOLEAN://布尔类型 cellValue = cell.getBooleanCellValue() + ""; break; case Cell.CELL_TYPE_NUMERIC://数字类型 if (DateUtil.isCellDateFormatted(cell)) {//格式化后的日期数值类型 cellValue = new DataFormatter().formatCellValue(cell); } else { //数值 double value = cell.getNumericCellValue(); int intValue = (int) value; cellValue = value - intValue == 0 ? String.valueOf(intValue) : String.valueOf(value); } break; case Cell.CELL_TYPE_FORMULA:{//公式 try{ cellValue = cell.getNumericCellValue() + ""; }catch(IllegalStateException e){ cellValue = String.valueOf(cell.getRichStringCellValue()); } } break; case Cell.CELL_TYPE_STRING://字符串 cellValue = cell.getStringCellValue(); break; case Cell.CELL_TYPE_BLANK://空值 cellValue = ""; break; case Cell.CELL_TYPE_ERROR://故障 cellValue = "非法字符"; break; default: cellValue = "未知类型"; break; } } return cellValue.trim(); } private static void fileWrite(String filePath, List<String> sqlList){ //创建一个文件 File file= new File(filePath); OutputStream out =null; try { //打开文件输出流 out=new FileOutputStream(file); for (int i = 0; i < sqlList.size(); i++) { //读取输出流中的字节 byte[] bytes= sqlList.get(i).getBytes(); //写入文件 out.write(bytes); } logger.info("写文件"+file.getAbsolutePath()+"成功!"); }catch(IOException e) { logger.error("写文件"+file.getAbsolutePath()+"失败!",e); } finally { if(out!=null) { try { //关闭输出文件流 out.close(); }catch(IOException e) { logger.error("写文件"+file.getAbsolutePath()+"失败!",e); } } } } // 只需传参数就可以了 public static void main(String[] args) { String test = "C:\Users\Administrator\Desktop\优质.xlsx"; String filePath = "C:\Users\Administrator\Desktop\优质sql.txt"; String sql = "insert into 表名(参数) value("; // 指定字符串位置 int[] index=new int[]{1,2,3,4,5,6}; readExcelToJsonFile(test,2, filePath,sql,index); } }
最后
以上就是糟糕大树最近收集整理的关于java读取excel文件并写入.txt文件中的全部内容,更多相关java读取excel文件并写入内容请搜索靠谱客的其他文章。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复