当前位置:   article > 正文

Excel转CSV格式_easyexcel 生成csv文本为数字

easyexcel 生成csv文本为数字

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

  1. import org.apache.poi.hssf.usermodel.HSSFWorkbook;
  2. import org.apache.poi.ss.usermodel.*;
  3. import org.apache.poi.xssf.usermodel.XSSFWorkbook;
  4. import java.io.*;
  5. import java.text.DecimalFormat;
  6. import java.util.ArrayList;
  7. import java.util.LinkedHashMap;
  8. import java.util.List;
  9. import java.util.Map;
  10. public class ExclToCsv {
  11. public static void main(String[] args) throws Exception {
  12. excelToCsvBatch("C:\\tmp\\flowPool\\flowPool\\20211206150814");
  13. }
  14. /**
  15. * 将指定目录下的 Excel 文件转 csv格式文件
  16. * @param srcFilePath 目录地址
  17. */
  18. public static void excelToCsvBatch(String srcFilePath) {
  19. ArrayList<File> listFiles = getListFiles(srcFilePath);
  20. for(File file : listFiles){
  21. System.out.println(file.getParent()+file.getName().substring(0,file.getName().lastIndexOf(".")));
  22. ExclToCsv.excelToCsv(file.getPath(), file.getParent()+"\\"+file.getName().substring(0,file.getName().lastIndexOf("."))+".csv");
  23. }
  24. }
  25. /**
  26. * 获取指定目录下的所有的文件(不包括文件夹),采用了递归
  27. * @param obj 字符串路径 || File对象指向目录
  28. * @return 目录中所有文件的File对象
  29. */
  30. private static ArrayList<File> getListFiles(Object obj) {
  31. File directory = null;
  32. if (obj instanceof File) {
  33. directory = (File) obj;
  34. } else {
  35. directory = new File(obj.toString());
  36. }
  37. ArrayList<File> files = new ArrayList<File>();
  38. if (directory.isFile()) {
  39. files.add(directory);
  40. return files;
  41. } else if (directory.isDirectory()) {
  42. File[] fileArr = directory.listFiles();
  43. for (int i = 0; i < fileArr.length; i++) {
  44. File fileOne = fileArr[i];
  45. files.addAll(getListFiles(fileOne));
  46. }
  47. }
  48. return files;
  49. }
  50. /**
  51. * 将excel表格转成csv格式
  52. *
  53. * @param oldFilePath
  54. * @param newFilePath
  55. */
  56. public static void excelToCsv(String oldFilePath, String newFilePath) {
  57. String buffer = "";
  58. Workbook wb = null;
  59. Sheet sheet = null;
  60. Row row = null;
  61. Row rowHead = null;
  62. List<Map<String, String>> list = null;
  63. String cellData = null;
  64. String filePath = oldFilePath;
  65. wb = readExcel(filePath);
  66. if (wb != null) {
  67. for (int i = 0; i < wb.getNumberOfSheets(); i++) {
  68. sheet = wb.getSheetAt(i);
  69. // 标题总列数
  70. rowHead = sheet.getRow(i);
  71. if (rowHead == null) {
  72. continue;
  73. }
  74. //总列数colNum
  75. int colNum = rowHead.getPhysicalNumberOfCells();
  76. String[] keyArray = new String[colNum];
  77. Map<String, Object> map = new LinkedHashMap<>();
  78. //用来存放表中数据
  79. list = new ArrayList<Map<String, String>>();
  80. //获取第一个sheet
  81. sheet = wb.getSheetAt(i);
  82. //获取最大行数
  83. int rownum = sheet.getPhysicalNumberOfRows();
  84. //获取第一行
  85. row = sheet.getRow(0);
  86. //获取最大列数
  87. int colnum = row.getPhysicalNumberOfCells();
  88. for (int n = 0; n < rownum; n++) {
  89. row = sheet.getRow(n);
  90. for (int m = 0; m < colnum; m++) {
  91. cellData = getCellFormatValue(row.getCell(m)).toString();
  92. buffer += cellData;
  93. }
  94. buffer = buffer.substring(0, buffer.lastIndexOf(","));
  95. buffer += "\n";
  96. }
  97. String savePath = newFilePath;
  98. File saveCSV = new File(savePath);
  99. try {
  100. if (!saveCSV.exists()) {
  101. saveCSV.createNewFile();
  102. }
  103. BufferedWriter writer = new BufferedWriter(new FileWriter(saveCSV));
  104. writer.write(new String(new byte[] { (byte) 0xEF, (byte) 0xBB,(byte) 0xBF }));
  105. writer.write(buffer);
  106. writer.close();
  107. } catch (IOException e) {
  108. e.printStackTrace();
  109. }
  110. }
  111. }
  112. }
  113. //读取excel
  114. public static Workbook readExcel(String filePath) {
  115. Workbook wb = null;
  116. if (filePath == null) {
  117. return null;
  118. }
  119. String extString = filePath.substring(filePath.lastIndexOf("."));
  120. InputStream is = null;
  121. try {
  122. is = new FileInputStream(filePath);
  123. if (".xls".equals(extString)) {
  124. return wb = new HSSFWorkbook(is);
  125. } else if (".xlsx".equals(extString)) {
  126. return wb = new XSSFWorkbook(is);
  127. } else {
  128. return wb = null;
  129. }
  130. } catch (FileNotFoundException e) {
  131. e.printStackTrace();
  132. } catch (IOException e) {
  133. e.printStackTrace();
  134. }
  135. return wb;
  136. }
  137. public static Object getCellFormatValue(Cell cell) {
  138. Object cellValue = null;
  139. if (cell != null) {
  140. //判断cell类型
  141. int cellType = cell.getCellType();
  142. switch (cell.getCellType()) {
  143. case Cell.CELL_TYPE_NUMERIC: {
  144. String cellva = getValue(cell);
  145. cellValue = cellva.replaceAll("\n", " ") + ",";
  146. break;
  147. }
  148. case Cell.CELL_TYPE_FORMULA: {
  149. //判断cell是否为日期格式
  150. if (DateUtil.isCellDateFormatted(cell)) {
  151. //转换为日期格式YYYY-mm-dd
  152. cellValue = String.valueOf(cell.getDateCellValue()).replaceAll("\n", " ") + ",";
  153. } else {
  154. //数字
  155. cellValue = String.valueOf(cell.getNumericCellValue()).replaceAll("\n", " ") + ",";
  156. }
  157. break;
  158. }
  159. case Cell.CELL_TYPE_STRING: {
  160. cellValue = String.valueOf(cell.getRichStringCellValue()).replaceAll("\n", " ") + ",";
  161. break;
  162. }
  163. default:
  164. cellValue = "" + ",";
  165. }
  166. } else {
  167. cellValue = "" + ",";
  168. }
  169. return cellValue;
  170. }
  171. /**
  172. * 此方法为去掉转csv时数字等默认加上的小数点
  173. * 如果不需要刻意不调用此方法
  174. */
  175. public static String getValue(Cell hssfCell) {
  176. if (hssfCell.getCellType() == Cell.CELL_TYPE_BOOLEAN) {
  177. // 返回布尔类型的值
  178. return String.valueOf(hssfCell.getBooleanCellValue());
  179. } else if (hssfCell.getCellType() == Cell.CELL_TYPE_NUMERIC) {
  180. // 返回数值类型的值
  181. Object inputValue = null;// 单元格值
  182. Long longVal = Math.round(hssfCell.getNumericCellValue());
  183. Double doubleVal = hssfCell.getNumericCellValue();
  184. if (Double.parseDouble(longVal + ".0") == doubleVal) { //判断是否含有小数位.0
  185. inputValue = longVal;
  186. } else {
  187. inputValue = doubleVal;
  188. }
  189. DecimalFormat df = new DecimalFormat("#"); //在此处更改小数点及位数,按自己需求选择;
  190. return String.valueOf(df.format(inputValue)); //返回String类型
  191. } else {
  192. // 返回字符串类型的值
  193. return String.valueOf(hssfCell.getStringCellValue());
  194. }
  195. }
  196. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Gausst松鼠会/article/detail/469330
推荐阅读
相关标签
  

闽ICP备14008679号