精华内容
下载资源
问答
  • 开发过程中处理Excel导入功能,使用的POI工具类,在导入时把日期转换为指定格式的时候报异常,使用debug查看发现导入excel日期格式竟然转成成了数值格式,不是通常的时间戳,是带小数点的数值。 需要通过以下代码...

    开发过程中处理Excel导入功能,使用的POI工具类,在导入时把日期转换为指定格式的时候报异常,使用debug查看发现导入excel的日期格式竟然转成成了数值格式,不是通常的时间戳,是带小数点的数值。
    在这里插入图片描述
    需要通过以下代码解决,把数值转换成Java的时间类型,HSSFDateUtil是POI包下的一个类,使用getJavaDate方法把Double类型转换成Java日期类型

    Date date = HSSFDateUtil.getJavaDate(Double.parseDouble(excelDate));
    
    展开全文
  • 问题提出 在使用 js 做 Excel 文件读取时,我们发现对于日期的处理很棘手。主要存在以下几种情况: ... * 处理从 Excel 单元格中读取到的日期格式的字段并转换为指定格式的日期字符串 * * @param {str

    问题提出

    在使用 js 做 Excel 文件读取时,我们发现对于日期的处理很棘手。主要存在以下几种情况:

    • 所有的日期单元格读取到的是一个类似 44211.7533 的数字的问题
    • 格式不规范问题,如 2021-1-1 0:0:00
    • 按指定格式格式化的问题

    带着这几个问题,我在网上找了几篇文章,但是都不能很好地解决,所以自己动手解决,并整理分享出来,希望对大家有所帮助

    解决方案

    /**
     * 处理从 Excel 单元格中读取到的日期格式的字段并转换为指定格式的日期字符串
     * 
     * @param {string|number} date 从 Excel 单元格中读取到的日期格式
     * @param {string} fmt 要转换为的格式,默认 yyy-MM-dd HH:mm:ss
     */
    function handleDate(date, fmt) {
      if (!date) {
        return date;
      }
      date = date.trim ? date.trim() : date;
      if (/^[\d.]+$/.test(date)) {
        let dateNum = parseFloat(date);
        // 大于 1000 万说明是一个毫秒数,直接解析并转换为指定格式即可
        if (dateNum > 10000000) {
          return formatDate(dateNum, fmt);
        }
        // 否则认为这个是一个 Excel 格式的日期
        date = formatExcelDate(dateNum, fmt);
        console.log(date, typeof (date), dateNum)
      } else {
        // 处理中文冒号,和 yyyy/MM/dd 格式的问题
        date = date.replace(/:/g, ":").replace(/\//g, "-");
      }
      // 将不规则的格式,例如 "2020-1-1     1:3:3" 转换成 yyyy-MM-dd HH:mm:ss
      // 再转为 Date 对象进行指定的格式化
      console.log(date);
      let dtPars = date.split(/\s+/g)
      let dPars = dtPars[0].split("-");
      dPars[1] = padding2(dPars[1])
      dPars[2] = padding2(dPars[2])
      dtPars[0] = dPars.join("-");
      if (!dtPars[1]) {
        dtPars[1] = '00:00:00';
      } else {
        let tPars = dtPars[1].split(':');
        tPars[0] = padding2(tPars[0]);
        // 支持分缺失
        tPars[1] = padding2(tPars[1] || '00');
        // 支持秒缺失
        tPars[2] = padding2(tPars[2] || '00');
        dtPars[1] = tPars.join(':');
      }
      return formatDate(new Date(dtPars.join(" ")), fmt);
    }
    
    /**
     * 缺位补0
     */
    function padding2(part) {
      if (part.length === 1) {
        return "0" + part
      } else {
        return part;
      }
    }
    
    /**
     * 解析Excel表达的日期数字,并转换为指定格式的日期字符串
     * 
     * @param {number} numb Excel解析出的数字形式的日期
     * @param {string} format 要转换为的格式,默认 yyy-MM-dd HH:mm:ss
     */
    function formatExcelDate(numb, format) {
      const time = new Date((numb - 2) * 24 * 3600000 + 1);
      time.setYear(time.getFullYear() - 70);
      time.setHours(time.getHours() - 8);
      return formatDate(time, format);
    }
    
    /**
     * 日期格式转换
     * 
     * @param {date|number} date 日期
     * @param {string} fmt 要转换为的格式,默认 yyy-MM-dd HH:mm:ss
     */
    function formatDate(date, fmt) {
      date = date == undefined ? new Date() : date;
      date = typeof date == 'number' ? new Date(date) : date;
      fmt = fmt || 'yyyy-MM-dd HH:mm:ss';
      let obj =
      {
        'y': date.getFullYear(), // 年份,注意必须用getFullYear
        'M': date.getMonth() + 1, // 月份,注意是从0-11
        'd': date.getDate(), // 日期
        'q': Math.floor((date.getMonth() + 3) / 3), // 季度
        'w': date.getDay(), // 星期,注意是0-6
        'H': date.getHours(), // 24小时制
        'h': date.getHours() % 12 == 0 ? 12 : date.getHours() % 12, // 12小时制
        'm': date.getMinutes(), // 分钟
        's': date.getSeconds(), // 秒
        'S': date.getMilliseconds() // 毫秒
      };
      let week = ['天', '一', '二', '三', '四', '五', '六'];
      for (let i in obj) {
        fmt = fmt.replace(new RegExp(i + '+', 'g'), function (m) {
          let val = obj[i] + '';
          if (i == 'w') return (m.length > 2 ? '星期' : '周') + week[val];
          for (let j = 0, len = val.length; j < m.length - len; j++) val = '0' + val;
          return m.length == 1 ? val : val.substring(val.length - m.length);
        });
      }
      return fmt;
    }
    

    使用示例

    假设我们有这样一张 Excel 表:

    id 姓名 签到时间 签退时间
    1 张三 2021/1/1 8:00:00 2021/1/1 18:00:00
    2 李四 2021/1/1 9:30:00 2021/1/1 19:15:00

    我们使用 node-xlsx 读取:

    const nodeXlsx = require('node-xlsx')	//引用node-xlsx模块
    var fs = require('fs');
    // 读取excel表格
    const ex1 = nodeXlsx.parse(filePath)
    
    //取出excel文件中的第一个工作表中的全部数据
    let excel_content = ex1[0].data
    
    // 删掉表头
    excel_content.splice(0, 1);
    let records = excel_content.map(row => {
      return {
        id: row[0],
        name: row[1],
        startTime: handleDate(row[2], 'yyyy-MM-dd HH:mm:ss'),
        endTime: handleDate(row[3], 'yyyy-MM-dd HH:mm:ss')
      }
    });
    console.log(JSON.stringify(records))
    

    这时我们将得到正确的日期格式结果:

    [{"id": 1, "name": "张三", "startTime": "2021-01-01 08:00:00", "endTime": "2021-01-01 18:00:00"},
    {"id": 2, "name": "李四", "startTime": "2021-01-01 09:30:00", "endTime": "2021-01-01 19:15:00"}]
    
    展开全文
  • 知道什么原因,原有Excel中的数字内容,从某天开始打开之后,都自动变成了日期格式调整起来很烦,而且调整后保存关闭,再打开,又自动变为日期格式从网上找了找方法,试了一下,问题解决!1. 打开Excel,任意选中...

    不知道什么原因,原有Excel中的数字内容,从某天开始打开之后,都自动变成了日期格式

    调整起来很烦,而且调整后保存关闭,再打开,又自动变为日期格式


    从网上找了找方法,试了一下,问题解决!

    1. 打开Excel,任意选中一单元格,单击鼠标右键,选择设置单元格格式。
    2. 在数字自定义类型中,找到前缀为[$-F400]的类型格式(或者类似的比如[$-F800]),点击删除。
    3. 保存,大功告成!

    展开全文
  • 用写html的方法导出excel时,excel会自动把一些格式转换一下,有时达预期的效果,此时可以通过样式进行调整下数据格式就可以了。常用的几种:mso-number-format:\@文本mso-number-format:"0\.000"数字mso-number-...

    用写html的方法导出excel时,excel会自动把一些格式转换一下,有时达不预期的效果,此时可以通过样式进行调整下数据格式就可以了。

    常用的几种:

    mso-number-format:\@

    文本

    mso-number-format:"0\.000"

    数字

    mso-number-format:"mm\/dd\/yy"

    日期

    mso-number-format:"d\\-mmm\\-yyyy"

    日期

    mso-number-format:Percent

    百分比

    定义样式

    复制代码 代码如下:

    td.accountnum

    {mso-number-format:\@}

    使用样式

    复制代码 代码如下:

    01070000

    还可以进行特殊的操作,比如合计 过滤等等

    复制代码 代码如下:

    ProductID Product Name Sales Person Date Closed Sale Amount

    计算:

    复制代码 代码如下:

    这样便实现了大部分的功能,.html导出到excel还是很方便的。

    比如结合gridview,几行代码便可搞定,比操作api要快得多,当然本方法仅适用于不复杂的报表需求。

    展开全文
  • 知道什么原因,原有Excel中的数字内容,从某天开始打开之后,都自动变成了日期格式 调整起来很烦,而且调整后保存关闭,再打开,又自动变为日期格式 从网上找了找方法,试了一下,问题解决! 1. 打开Excel...
  • 原Rxlsx支持日期格式,读取日期单元格的数据会变成数字,本人将excel日期格式整理出来,并在读取的时候重新将数字转换回格式,进一步完善了类库的功能。该类库的用法非常简单,只需加载完成excel文件后执行: ...
  • 原来XP下用的好好的Excel工具到了win7下能用了,原因是日期的格式有问题(ORA-01830: 日期格式图片在转换整个输入字符串之前结束)。可是编辑框中日期也很正常,只是原来的短杠“-”变成了斜杠“/”,但这不是关键,...
  •  首先,如何导入日期,因为PHPExcel中日期格式在获取时得到的是数字,并是日期字符串,于是,网上就有许多代码,用于将Excel中获取的数字转换成PHP使用的Unix Time,其实不必这么麻烦。PHPExce
  • 首先,如何导入日期,因为PHPExcel中日期格式在获取时得到的是数字,并是日期字符串,于是,网上就有许多代码,用于将Excel中获取的数字转换成PHP使用的Unix Time,其实不必这么麻烦。PHPExc...
  • 如果你发现像单元格J929这样明明有公式,但是不会转为对应的公式的时候(I929是日期格式),是因为Excel不知道I929是TEXT,可以使用text to be column转换 选择 I 整列 选择Text to be columns: Fixed ...
  • 首先将固定单元格的数字:41278.3819444444,使用VB函数Format(41278.3819444444,“yyyy/mm/dd hh:mm:ss”),可以转换成2013/1/4 9:10:00,但是我现在知道用VB的什么函数可以再将日期格式转换回数字格式,求高手...
  • 我在使用concatenate()函数的时候,如果引用了日期格式的单元格,那么结果会将日期转换为数字,我们并喜欢看到数字,而是让其保持为日期格式的样式。 日期的本质就是数字,所以出现上面的结果。 我们可以利用...
  • 在Excel中如果单元格的公式是日期格式,那么引用后的数值是错误的[不是日期格式而被转换成...",")参考:案例呈现excel日期变成数字的原因和解决方法在Excel 里如何把各种非标准日期格式转换标准日期格式microsoft...
  • 按道理说只要把Excel设置成文本格式就好了,但是知道为什么长度在11位的时候就不行 方法一:把Excel设置成文本格式 日期也可以这样做,同样有效。 第二种:获取到数据之后再转成相对应的数据 System.out....
  • Excel输出部分日期字段长度正确,用Excel的len()函数发现多了两位长度,主要是因为字段转换时字符串和日期转换的误差。长度一致会导致很多Excel函数在此字段无法使用。  修改RTF模板对应字段, 首先RTF模板...
  • PHPExcel导入日期格式

    千次阅读 2018-01-12 09:30:43
    最近,在做一个导入... 首先,如何导入日期,因为PHPExcel中日期格式在获取时得到的是数字,并是日期字符串,于是,网上就有许多代码,用于将Excel中获取的数字转换成PHP使用的Unix Time,其实不必这么麻烦。PHPEx
  • 用写html的方法导出excel的时候excel会自动的把一些格式转换了一下,有时候达到我们想要的效果,我们可以通过样式调整数据格式 这是常用的几种: mso-number-format:\@ 文本 mso-number-format:"0\.000" 数字 mso-...
  • 还有一种就是日期的文本格式 发现没有黄色感叹号 这样的就是需要用到分列工具 选择要分列的列—数据----分列—完成 这样格式就修改过来了 还有一个就导出的数据没有导到表格,而是导到了文本。 需要把这些输入到...
  • <div><p> 在使用putCsv方法的时候,遇到了两个、个问题。原excel中的 2017/1/3 11:31 会变成 ...您看看能能在putCsv方法增加一个 做任何转换的 参数,或者对这种格式做一下处理 出问题的excel文件 ...
  • 最近,在做一个导入功能... 首先,如何导入日期,因为PHPExcel中日期格式在获取时得到的是数字,并是日期字符串,于是,网上就有许多代码,用于将Excel中获取的数字转换成PHP使用的Unix Time,其实不必这么麻烦。P...
  • #进行时间格式转换 #td=pd.to_datetime(airlinedata_selection['LOAD_TIME']) #在做到这里的时候发现了数据异常 airlinedata_selection.to_excel('D:/Python/code/tmp/airlinedata_selection.xls') #使用...
  • 2.由于我的原文件是.xlsx,能保留原始格式(formatting_info=True),所以要做.xlsx转.xls文件的步骤 可以看我以前写过的博客,这里就赘述了 Python-批处理.xlsx文件与.xls文件相互转换 3.代码如下: from ...
  • 如果直接用日期连接其他字符,日期会变成数字形式,这是因为在Excel中是按数字格式存储的,一旦遇到 & 它就会露出原形,解决方法是让日期转换成文本格式,就是今天为大家介绍的主角text函数,让日期在连接后正常显示...
  • 然后我以为在excel表格里面可以转为相应的年月日的,啊啊啊啊,崩溃了几次,都能一次性的用快捷键转换。后来由于着急,就先手动改了。 问题出现了,我以为不是sql语句的问题,所以就一直没往sql这边想。试了很多...
  • 代码写完自测的时候发现excel没导出,看了控制台输出,报日期格式错误的问题。把日期输出一看居然是“Fri Oct 7 10:08:00 UTC 0800 2016” 这样子的神一般的格式,惊了。 因为是在遗留的需求上做改进,对前端用的...
  • 由于导入Excel数据时, 用户有时会以文本格式输入日期字符串, 导致后台poi读取Excel时报错 但是用户输入的格式没办法提前判断, 所有动手用正则判断写了工具类 /** * 字符串转时间, 可识别常见类型 * @param str ...
  • Excel的小技巧

    2019-01-16 11:22:01
    日期格式转换 筛选后粘贴 1、复制隐藏行 如果直接复制,隐藏的行也会粘贴出来,这时你只需要在选取后按Alt+; 选中可见单元格,再复制粘贴后就不会有隐藏行了。 2、下拉菜单的制作方法 数据 - 有效性(验证)...
  • EasyExcel——读Excel

    2020-04-13 20:06:00
    目录读示例指定列的下标或者列名读多个sheet日期、数字或者自定义格式转换不创建对象的读web中的读 easyExcel是阿里巴巴开源的一个excel处理框架,以使用简单、节省内存著称。 64M内存1分钟内读取75M(46W行25列)的...

空空如也

空空如也

1 2 3 4 5 ... 14
收藏数 265
精华内容 106
关键字:

excel日期格式转换不了