码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2016-05-13 11:53:58      阅读:159      评论:0      收藏:0      [点我收藏+]

标签:

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


 
运行程序后excel中新增一列的数据如下图:
 
技术分享
技术分享
 
在excel中把 这一列单元格的格式设置为时间类型后,就会看到数据变成了正确的时间格式,如下图:
 
技术分享

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

标签:

原文地址:http://www.cnblogs.com/tuzongxun/p/5486732.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!