概述
完整代码,可直接复用!觉着可以记得留赞关注我!
需求:最近一直要提交很多sql工单数据给DB管理员执行,一个一个复制很麻烦,于是写下此方法!如有高见欢迎留言!
注意:记得引入poi包
如果你觉着不错,麻烦帮忙点个赞!分享下!谢谢!
package 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文件并写入.txt文件中所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复