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

今天出于某些原因从mongodb数据库中导出了一些数据,为了更直观的发送给其他人查阅,便使用mongoVUE的导出为excel功能。

但是导出后出现了一个问题,里边有一列存储时间的,存储的是long型毫秒数,在导出后就自动变成了科学记数法。

且不说从科学记数法中辨别出实际时间,即便是原本的毫秒值也是不易于辨别的,但是这些long值不能直接在excel中转换成date类型,因此我便想到使用poi来把这些毫秒值转换成date再写入原文件中。

从mongodb中导出的excel的科学记数法如下图:

java程序如下:

package excelDemo1;

import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.OutputStream;
import java.text.DecimalFormat;
import java.util.Date;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.poifs.filesystem.POIFSFileSystem;

/**
 * java读取excel文件及内容
 *
 * @author tuzongxun123
 *
 */
public class ExcelDemo1 {
    public static void main(String[] args) {
        try {
            // 获取文件在磁盘的存储路径
            File file = new File("C:" + File.separator + "Users"
                    + File.separator + "tuzongxun123" + File.separator
                    + "Desktop" + File.separator + "log.xls");
            // 读文件输入流
            FileInputStream fileInputStream = new FileInputStream(file);
            BufferedInputStream bufferedInputStream = new BufferedInputStream(
                    fileInputStream);
            POIFSFileSystem excelfile = new POIFSFileSystem(bufferedInputStream);
            HSSFWorkbook workbook = new HSSFWorkbook(excelfile);
            // 根据名称获取excel工作薄
            HSSFSheet sheet = workbook.getSheet("Sheet0");
            // 遍历去除工作薄中的行和列
            for (int i = 1;; i++) {
                HSSFRow row = sheet.getRow(i);
                if (row != null) {
                    // 获取科学记数法这一列的单元格
                    HSSFCell cell = row.getCell(6);
                    // 格式化科学计数法的数据格式
                    DecimalFormat df = new DecimalFormat("0");
                    String value = df.format(cell.getNumericCellValue());
                    // 时间转换
                    long long1 = Long.parseLong(value);
                    Date date = new Date(long1);
                    // 创建新的单元格存储转换后的数据
                    HSSFCell cell2 = row.createCell(9);
                    cell2.setCellValue(date);
                } else {
                    break;
                }
            }
            // 把转换后的数据写入到文件中
            OutputStream outputStream = new FileOutputStream(file);
            workbook.write(outputStream);
            outputStream.close();
        } catch (Exception e) {
            e.printStackTrace();
        }

    }
}

运行程序后excel中新增一列的数据如下图:



在excel中把 这一列单元格的格式设置为时间类型后,就会看到数据变成了正确的时间格式,如下图:


时间: 2024-12-24 20:19:46

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

word-如何用java打印Excel或者Word?数据是从数据库中来的

问题描述 如何用java打印Excel或者Word?数据是从数据库中来的 急急急!!哪位大神知道怎么用java打印成Excel表格或者Word文档,数据都是 从数据库中来的,现在有很多都需要打印功能,但是我不知道有什么辅助工具或者插件什么的,求指点 解决方案 poi和jxl都可以 解决方案二: poi和jxl都可以 解决方案三: 百度一下 java toexcel 范例有很多 解决方案四: poi ,可以给你例子.. 解决方案五: java有POI工具来操作Excel的,可以用java纯后台程序

java 对excel中选中几列数据排序

问题描述 最近要用Java对excel中的数据进行处理,想对一个sheet进行全部排序,看了下jxl包里好像没有这个方法,没有用的数据库,所以排除用数据库排序的方法.谁有什么好方法,谢谢 问题补充:kxys422834 写道 解决方案 excel排序,和数据库扯上什么关系.相对来说java实现的排序比数据库快吧.你把数据提取出来,用算法实现排序,然后再把所得结果插入excel中不就可以了嘛?

Excel中导入网络数据动画教程

<Excel2003入门动画教程61.Excel中导入网络数据>. 演示动画 操作步骤 我们除了可以从本地机器上获取数据外,还可以从网络上导入数据到Excel中,并能同网络保持随时更新. 下面,我们将NBA的比赛排名数据导入到Excel中: 将电脑连接到网络上,打开Excel,执行"数据→导入外部数据→新建Web查询"命令,打开"新建Web查询"对话框,将相应的网址输入到"地址"栏上,按下"转到"按钮,同网络建立连

导出图片-java导出excel包含图片遇到数据量比如超过130条左右就会报错

问题描述 java导出excel包含图片遇到数据量比如超过130条左右就会报错 用HSSF导出excel包含图片遇到数据量比如超过130条左右就会报错(每条包含一张图片):会出现sql的异常: 无效的列索引 ,但是sql语句并没有问题.请教各位高手指点! 解决方案 我来晚了,这是POI缓存机制问题.不是130条,是100条,当你超过100条时,数据会丢失.解决方法是,使用构造函数增加缓存行数 SXSSFWorkbook wb = new SXSSFWorkbook(5000);

数据导入导出-如何通过winform客户端把excel中的百万数据高效导入到sqlserver中

问题描述 如何通过winform客户端把excel中的百万数据高效导入到sqlserver中 必须通过客户端代码操作导入数据库,我已经采用了bcp,但是有限制,本机上的数据导入到本机数据库还挺快,但是没办法把本地数据导入到数据库中,跪求可以高效把数据导入到sqlserver2012中的方法,最好有具体代码,谢谢大家 解决方案 你搜索下sqlbulkupdate

请问excel中导出的数据如何分为垂直的两排向下排列,不要一列排列,怎么实现?

问题描述 请问excel中导出的数据如何分为垂直的两排向下排列,不要一列排列,怎么实现? 请问excel中导出的数据如何分为垂直的两排向下排列,不要一列排列,怎么实现? 解决方案 http://jingyan.baidu.com/article/9faa72315d6bd5473c28cbe9.html

java 读取 Excel (20W条数据)并导入到 数据库解决方案

问题描述 现在做个项目,要把 Excel 通过 java web 导入到数据库,在 action 里 java 内存泄漏 (20 W 条数据).于是想到把文件上传到服务器,然后 java 直接连接 Excel 本身数据库读取数据 insert 到 SQLSERVER 数据库 不知可行不,有没有更好的建议 解决方案 转为CSV上传,可以用SuperCSV读或者用POI分段读取EXCEL解决方案二:1 增大jvm 2 任何读取大的数据都不应该一次性读取,而是需要分批次处理,也就是一次处理几千条数据条

关于java向excel中写数据的问题

问题描述 小弟现在做的项目中遇到了一个问题,找资料都不知道从何找起从数据库中检索到的数据写入到excel中,我的数据取出来了,是一个list里边套一个bean,excel模板也创建完了,现在只剩下把这些数据循环写到excel中了,但是具体写到excel中的哪个单元格是它是通过一个xml文件指定的,如何写这个xml文件就不会了,照猫画虎总是不是想要的形式,所以有没有资料或高手点拨几句,先谢谢了比如xml文件中大概是这样写的,可能写的不对<regionrow="0"col="

在Excel中标记重复数据的方法

  在Excel中,我们通常做的数据都密集着很多数字,要自己一个个的寻找重复的数据,肯定会懵掉的,那有什么比较好的方式可以找出Excel数据表中的重复数据吗?有的,来看看吧! 将下图的工作表的重复数据进行标记.如图所示: 数据表 1.首先打开excel2007工作表,用鼠标框选选中可能存在重复数据或记录的单元格区域.单击"开始"选项卡中的"条件格式"打开菜单,在"突出显示单元格规则"子菜单下选择"重复值",打开. 选择&quo