Excel转CSV格式 您所在的位置:网站首页 excel表格文件类型怎么改成xlsx Excel转CSV格式

Excel转CSV格式

2023-06-06 17:39| 来源: 网络整理| 查看: 265

Excel转CSV格式 原创

wx5e2da121398ee 2023-06-01 18:48:52 博主文章分类:EasyExcel ©著作权

文章标签 apache java 开发语言 CSV 文章分类 代码人生

©著作权归作者所有:来自51CTO博客作者wx5e2da121398ee的原创作品,请联系作者获取转载授权,否则将追究法律责任

注意: CSV文件导出来的 可以理解为 就是一个 普通的文件, 但至于使用什么样的软件打开就是另一马事了,比如Excel打开后 出来 “自动过滤了数字前面的0”,这玩意程序控制不到,那是Excel的事情。CSV不是Excel文件切记,只不过用表格软件打开CSV而已

import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.ss.usermodel.*; import org.apache.poi.xssf.usermodel.XSSFWorkbook; import java.io.*; import java.text.DecimalFormat; import java.util.ArrayList; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; public class ExclToCsv { public static void main(String[] args) throws Exception { excelToCsvBatch("C:\\tmp\\flowPool\\flowPool\\20211206150814"); } /** * 将指定目录下的 Excel 文件转 csv格式文件 * @param srcFilePath 目录地址 */ public static void excelToCsvBatch(String srcFilePath) { ArrayList listFiles = getListFiles(srcFilePath); for(File file : listFiles){ System.out.println(file.getParent()+file.getName().substring(0,file.getName().lastIndexOf("."))); ExclToCsv.excelToCsv(file.getPath(), file.getParent()+"\\"+file.getName().substring(0,file.getName().lastIndexOf("."))+".csv"); } } /** * 获取指定目录下的所有的文件(不包括文件夹),采用了递归 * @param obj 字符串路径 || File对象指向目录 * @return 目录中所有文件的File对象 */ private static ArrayList getListFiles(Object obj) { File directory = null; if (obj instanceof File) { directory = (File) obj; } else { directory = new File(obj.toString()); } ArrayList files = new ArrayList(); if (directory.isFile()) { files.add(directory); return files; } else if (directory.isDirectory()) { File[] fileArr = directory.listFiles(); for (int i = 0; i < fileArr.length; i++) { File fileOne = fileArr[i]; files.addAll(getListFiles(fileOne)); } } return files; } /** * 将excel表格转成csv格式 * * @param oldFilePath * @param newFilePath */ public static void excelToCsv(String oldFilePath, String newFilePath) { String buffer = ""; Workbook wb = null; Sheet sheet = null; Row row = null; Row rowHead = null; List list = null; String cellData = null; String filePath = oldFilePath; wb = readExcel(filePath); if (wb != null) { for (int i = 0; i < wb.getNumberOfSheets(); i++) { sheet = wb.getSheetAt(i); // 标题总列数 rowHead = sheet.getRow(i); if (rowHead == null) { continue; } //总列数colNum int colNum = rowHead.getPhysicalNumberOfCells(); String[] keyArray = new String[colNum]; Map map = new LinkedHashMap(); //用来存放表中数据 list = new ArrayList(); //获取第一个sheet sheet = wb.getSheetAt(i); //获取最大行数 int rownum = sheet.getPhysicalNumberOfRows(); //获取第一行 row = sheet.getRow(0); //获取最大列数 int colnum = row.getPhysicalNumberOfCells(); for (int n = 0; n < rownum; n++) { row = sheet.getRow(n); for (int m = 0; m < colnum; m++) { cellData = getCellFormatValue(row.getCell(m)).toString(); buffer += cellData; } buffer = buffer.substring(0, buffer.lastIndexOf(",")); buffer += "\n"; } String savePath = newFilePath; File saveCSV = new File(savePath); try { if (!saveCSV.exists()) { saveCSV.createNewFile(); } BufferedWriter writer = new BufferedWriter(new FileWriter(saveCSV)); writer.write(new String(new byte[] { (byte) 0xEF, (byte) 0xBB,(byte) 0xBF })); writer.write(buffer); writer.close(); } catch (IOException e) { e.printStackTrace(); } } } } //读取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类型 int cellType = cell.getCellType(); switch (cell.getCellType()) { case Cell.CELL_TYPE_NUMERIC: { String cellva = getValue(cell); cellValue = cellva.replaceAll("\n", " ") + ","; break; } case Cell.CELL_TYPE_FORMULA: { //判断cell是否为日期格式 if (DateUtil.isCellDateFormatted(cell)) { //转换为日期格式YYYY-mm-dd cellValue = String.valueOf(cell.getDateCellValue()).replaceAll("\n", " ") + ","; } else { //数字 cellValue = String.valueOf(cell.getNumericCellValue()).replaceAll("\n", " ") + ","; } break; } case Cell.CELL_TYPE_STRING: { cellValue = String.valueOf(cell.getRichStringCellValue()).replaceAll("\n", " ") + ","; break; } default: cellValue = "" + ","; } } else { cellValue = "" + ","; } return cellValue; } /** * 此方法为去掉转csv时数字等默认加上的小数点 * 如果不需要刻意不调用此方法 */ public static String getValue(Cell hssfCell) { if (hssfCell.getCellType() == Cell.CELL_TYPE_BOOLEAN) { // 返回布尔类型的值 return String.valueOf(hssfCell.getBooleanCellValue()); } else if (hssfCell.getCellType() == Cell.CELL_TYPE_NUMERIC) { // 返回数值类型的值 Object inputValue = null;// 单元格值 Long longVal = Math.round(hssfCell.getNumericCellValue()); Double doubleVal = hssfCell.getNumericCellValue(); if (Double.parseDouble(longVal + ".0") == doubleVal) { //判断是否含有小数位.0 inputValue = longVal; } else { inputValue = doubleVal; } DecimalFormat df = new DecimalFormat("#"); //在此处更改小数点及位数,按自己需求选择; return String.valueOf(df.format(inputValue)); //返回String类型 } else { // 返回字符串类型的值 return String.valueOf(hssfCell.getStringCellValue()); } } } 收藏 评论 分享 举报

上一篇:企业级springboot项目架构模板V4.0,开箱即用

下一篇:springBoot service 事务注解@Transactional不起作用的解决



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有