java程序转换excel中科学记数法的数据为date类型

时间:2023-03-10 02:14:23
java程序转换excel中科学记数法的数据为date类型
今天出于某些原因从mongodb数据库中导出了一些数据,为了更直观的发送给其他人查阅,便使用mongoVUE的导出为excel功能。
但是导出后出现了一个问题,里边有一列存储时间的,存储的是long型毫秒数,在导出后就自动变成了科学记数法。
且不说从科学记数法中辨别出实际时间,即便是原本的毫秒值也是不易于辨别的,但是这些long值不能直接在excel中转换成date类型,因此我便想到使用poi来把这些毫秒值转换成date再写入原文件中。
从mongodb中导出的excel的科学记数法如下图:
java程序转换excel中科学记数法的数据为date类型
java程序转换excel中科学记数法的数据为date类型
java程序如下:
  1. package excelDemo1;
  2. import java.io.BufferedInputStream;
  3. import java.io.File;
  4. import java.io.FileInputStream;
  5. import java.io.FileOutputStream;
  6. import java.io.OutputStream;
  7. import java.text.DecimalFormat;
  8. import java.util.Date;
  9. import org.apache.poi.hssf.usermodel.HSSFCell;
  10. import org.apache.poi.hssf.usermodel.HSSFRow;
  11. import org.apache.poi.hssf.usermodel.HSSFSheet;
  12. import org.apache.poi.hssf.usermodel.HSSFWorkbook;
  13. import org.apache.poi.poifs.filesystem.POIFSFileSystem;
  14. /**
  15. * java读取excel文件及内容
  16. *
  17. * @author tuzongxun123
  18. *
  19. */
  20. public class ExcelDemo1 {
  21. public static void main(String[] args) {
  22. try {
  23. // 获取文件在磁盘的存储路径
  24. File file = new File("C:" + File.separator + "Users"
  25. + File.separator + "tuzongxun123" + File.separator
  26. + "Desktop" + File.separator + "log.xls");
  27. // 读文件输入流
  28. FileInputStream fileInputStream = new FileInputStream(file);
  29. BufferedInputStream bufferedInputStream = new BufferedInputStream(
  30. fileInputStream);
  31. POIFSFileSystem excelfile = new POIFSFileSystem(bufferedInputStream);
  32. HSSFWorkbook workbook = new HSSFWorkbook(excelfile);
  33. // 根据名称获取excel工作薄
  34. HSSFSheet sheet = workbook.getSheet("Sheet0");
  35. // 遍历去除工作薄中的行和列
  36. for (int i = 1;; i++) {
  37. HSSFRow row = sheet.getRow(i);
  38. if (row != null) {
  39. // 获取科学记数法这一列的单元格
  40. HSSFCell cell = row.getCell(6);
  41. // 格式化科学计数法的数据格式
  42. DecimalFormat df = new DecimalFormat("0");
  43. String value = df.format(cell.getNumericCellValue());
  44. // 时间转换
  45. long long1 = Long.parseLong(value);
  46. Date date = new Date(long1);
  47. // 创建新的单元格存储转换后的数据
  48. HSSFCell cell2 = row.createCell(9);
  49. cell2.setCellValue(date);
  50. } else {
  51. break;
  52. }
  53. }
  54. // 把转换后的数据写入到文件中
  55. OutputStream outputStream = new FileOutputStream(file);
  56. workbook.write(outputStream);
  57. outputStream.close();
  58. } catch (Exception e) {
  59. e.printStackTrace();
  60. }
  61. }
  62. }
运行程序后excel中新增一列的数据如下图:
 
java程序转换excel中科学记数法的数据为date类型
java程序转换excel中科学记数法的数据为date类型
在excel中把 这一列单元格的格式设置为时间类型后,就会看到数据变成了正确的时间格式,如下图:
 
java程序转换excel中科学记数法的数据为date类型