我是靠谱客的博主 糟糕大树,最近开发中收集的这篇文章主要介绍java读取excel文件并写入.txt文件中,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

完整代码,可直接复用!觉着可以记得留赞关注我!

需求:最近一直要提交很多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文件中所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(60)

评论列表共有 0 条评论

立即
投稿
返回
顶部