• 【转】java将excel文件转换成txt格式文件


           在实际应用中,我们难免会遇到解析excel文件入库事情,有时候为了方便,需要将excel文件转成txt格式文件。下面代码里面提供对xls、xlsx两种格式的excel文件解析,并写入到一个新的txt文件中,数据以分隔符逗号","隔开。

     excel文件如图所示: 

    转换后的txt文件:

    需要依赖4个jar包:

    package com.xuan.excel;
    import java.io.BufferedWriter;
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileNotFoundException;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.OutputStreamWriter;
    import java.util.ArrayList;
    import java.util.LinkedHashMap;
    import java.util.List;
    import java.util.Map;
    import java.util.Map.Entry;
     
    
    
    import org.apache.poi.hssf.usermodel.HSSFWorkbook;
    import org.apache.poi.ss.usermodel.Cell;
    import org.apache.poi.ss.usermodel.DateUtil;
    import org.apache.poi.ss.usermodel.Row;
    import org.apache.poi.ss.usermodel.Sheet;
    import org.apache.poi.ss.usermodel.Workbook;
    import org.apache.poi.xssf.usermodel.XSSFWorkbook;
     
    /** 
    * <p>版权所有:版权所有(C) 2014-2099</p>
    * ──────────────────────────────────
    * <p>作    者:青莲剑仙</p>
    * ──────────────────────────────────
    * <p>将excel转成TXT文本<p>
    **/
    public class ExcelToTxt {
     
        private static File [] getFiles(String path){
            File file = new File(path);
            // get the folder list
            File[] array = file.listFiles();
            return array;
        }
        
        public static void main(String[] args) throws IOException {
            File[] files=getFiles("D:\keyword");
            for(int i=0;i<files.length;i++){
                if (files[i].isFile()) {
                    System.out.println("f=="+files[i].getPath()+"  "+files[i].getName());
                    publishTxt(files[i].getPath());
                }
                if (files[i].isDirectory()) {
                    System.out.println("d=="+files[i].getPath()+"  "+files[i].getName());
                    File[] files2=getFiles(files[i].getPath());
                    for(int j=0;j<files2.length;j++){
                        publishTxt(files2[j].getPath());
                    }
                    
                }
            }
        }
        
        public static void publishTxt(String excelPath){
            String columns[] = { "交易时间", "记账日期", "银行流水号", "商户流水号", "订单号", "订单状态", "付款方账号/客户号", "付款方户名",
                    "订单金额", "交易金额", "手续费", "结算金额", "柜台代码", "发卡行/通道", "支付卡种", "交易类型", "期数", "授权号", "项目号",
                    "基本户", "备注一", "备注二" };
            Workbook wb = null;
            Sheet sheet = null;
            Row row = null;
            List<Map<String, String>> list = null;
            String cellData = null;
            String fileType=excelPath.substring(excelPath.indexOf('.') + 1);
    
            
            wb = readExcel(excelPath);
            if (wb != null) {
                // 用来存放表中数据
                list = new ArrayList<Map<String, String>>();
                // 获取第一个sheet
                sheet = wb.getSheetAt(0);
                // 获取最大行数
                int rownum = sheet.getPhysicalNumberOfRows();
                // 获取第二行
                row = sheet.getRow(1);
                // 获取最大列数
                int colnum = row.getPhysicalNumberOfCells();
                for (int i = 0; i < rownum; i++) {
                    Map<String, String> map = new LinkedHashMap<String, String>();
                    row = sheet.getRow(i);
                    if (row != null) {
                        for (int j = 0; j < colnum; j++) {
                            cellData = (String) getCellFormatValue(row.getCell(j));
                            map.put(columns[j], cellData);
                        }
                    } else {
                        break;
                    }
                    list.add(map);
                }
            }
            // 遍历解析出来的list
            StringBuffer sb = new StringBuffer();
            for (int i = 0; i < list.size(); i++) {
                for (Entry<String, String> entry : list.get(i).entrySet()) {
                    String value = entry.getValue();
                    sb.append(value+",");
                }
                sb.append("
    ");
            }
            try {
                WriteToFile(sb.toString(), excelPath.replace(".xlsx", ".txt"));
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            
            System.out.println("*************EXCEL转成TXT格式成功*************");
            
        }
     
        // 读取excel
        public static Workbook readExcel(String filePath) {
            Workbook wb = null;
            if (filePath == null) {
                return null;
            }
            String extString = filePath.substring(filePath.lastIndexOf("."));
            InputStream is = null;
            try {
                is = new FileInputStream(filePath);
                if (".xls".equals(extString)) {
                    return wb = new HSSFWorkbook(is);
                } else if (".xlsx".equals(extString)) {
                    return wb = new XSSFWorkbook(is);
                } else {
                    return wb = null;
                }
     
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }
            return wb;
        }
     
        public static Object getCellFormatValue(Cell cell) {
            Object cellValue = null;
            if (cell != null) {
                // 判断cell类型
                switch (cell.getCellType()) {
                case Cell.CELL_TYPE_NUMERIC: {
                    cellValue = String.valueOf(cell.getNumericCellValue());
                    break;
                }
                case Cell.CELL_TYPE_FORMULA: {
                    try{
                    // 判断cell是否为日期格式
                    if (DateUtil.isCellDateFormatted(cell)) {
                        // 转换为日期格式YYYY-mm-dd
                        cellValue = cell.getRichStringCellValue().getString();//cell.getDateCellValue();
                    } else {
                        // 数字
                        cellValue =cell.getRichStringCellValue().getString(); //String.valueOf(cell.getNumericCellValue());
                    }
                    }catch(Exception ex){}
                    break;
                }
                case Cell.CELL_TYPE_STRING: {
                    cellValue = cell.getRichStringCellValue().getString();
                    break;
                }
                default:
                    cellValue = "";
                }
            } else {
                cellValue = "";
            }
            return cellValue;
        }
     
        /**
         * 生成文件
         * @param str
         * @param filePath
         * @throws IOException 
         */
     
        public static void WriteToFile(String str, String filePath) throws IOException {
            BufferedWriter bw = null;
            try {
                FileOutputStream out = new FileOutputStream(filePath, true);// true,表示:文件追加内容,不重新生成,默认为false
                bw = new BufferedWriter(new OutputStreamWriter(out, "GBK"));
                bw.write(str += "
    ");// 换行
                bw.flush();
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                bw.close();
            }
        }
    }

    from:https://blog.csdn.net/usuallyuser/article/details/81217122

  • 相关阅读:
    05docker仓库---搭建本地仓库
    04docker容器操作
    03docker镜像
    02docker核心概念
    01docker基本概念
    find命令
    docker中ubuntu源更新慢加速 换为国内源 Debian10源
    计划任务 at & crond tbc
    mysql mysqladmin常用命令
    mariadb10安装
  • 原文地址:https://www.cnblogs.com/xuan52rock/p/9525874.html
Copyright © 2020-2023  润新知