Python读取Excel,日期列读出来是数字的处理

Python读取Excel,里面如果是日期,直接读出来是float类型,无法直接使用。

通过判断读取表格的数据类型ctype,进一步处理。

返回的单元格内容的类型有5种:

ctype: 0 empty,1 string, 2 number, 3 date, 4 boolean, 5 error

ctype =sheet1.cell(iRow,iCol).ctype

参考示例如下:

1.准备一个Excel文件,文件名Book1.xlsx

从第2行的第1列开始向右,分别是2019年的7月的1、2、3、4日,2019-07-01、2019-07-02、2019-07-03、2019-07-04

A列单元格的类型:date

B列单元格的类型:Text

C列单元格的类型:Text

D列单元格的类型:Custom里的一种日期格式

2.Python文件,ReadExcelDemo.py,代码如下:

#! -*- coding utf-8 -*-
#! @Time  :2019/7/4 15:46
#! Author :Frank Zhang
#! @File  :ReadExcelDemo.py
#!SoftWare PyChart 5.0.3
#! Python Version 3.7
import xlrd
import os
import time
from datetime import datetime
from xlrd import xldate_as_tuple

def main():
    sPath = os.getcwd()
    sFile = "Book1.xlsx"
    wb = xlrd.open_workbook(filename=sPath + "\\" + sFile)
    sheet1 = wb.sheet_by_index(0)
    nrows = sheet1.nrows
    ncols = sheet1.ncols

    for iRow in range(1,nrows):
        for iCol in range(ncols):
            sCell = sheet1.cell_value(iRow,iCol)

            #Python读Excel,返回的单元格内容的类型有5种:
            #ctype: 0 empty,1 string, 2 number, 3 date, 4 boolean, 5 error
            ctype = sheet1.cell(iRow,iCol).ctype

            #ctype =3,为日期
            if ctype == 3:
               date = datetime(*xldate_as_tuple(sCell, 0))
               cell = date.strftime(‘%Y-%m-%d‘)              #(‘%Y/%m/%d %H:%M:%S‘)
               print(cell)
            #ctype =1,为字符串
            elif ctype == 1:
                if isVaildDate(sCell):
                    t1 = time.strptime(sCell, "%Y-%m-%d")
                    sDate = changeStrToDate(t1,"yyyy-mm-dd")
                    print(sDate)
            else:
                    pass

def formatDay(sDay,sFormat):
    sYear = str(sDay.year)
    sMonth = str(sDay.month)
    sDay = str(sDay.day)

    if sFormat == "yyyy-mm-dd":
        sFormatDay = sYear +"-" +sMonth.zfill(2)+"-" +sDay.zfill(2)
    elif sFormatStyle == "yyyy/mm/dd":
        sFormatDay = sYear +"/" +sMonth.zfill(2)+"/" +sDay.zfill(2)
    else:
        sFormatDay = sYear+"-" + sMonth + "-" + sDay

    return sFormatDay

"""
功能:判断是否为日期
"""
def isVaildDate(sDate):
    try:
        if ":" in sDate:
            time.strptime(sDate, "%Y-%m-%d %H:%M:%S")
        else:
            time.strptime(sDate, "%Y-%m-%d")
        return True
    except:
        return False

"""
   功能:把字符串格式的日期转换为格式化的日期,如把2019-7-1转换为2019-07-01
"""
def changeStrToDate(sDate,sFormat):
    sYear = str(sDate.tm_year)
    sMonth = str(sDate.tm_mon)
    sDay = str(sDate.tm_mday)

    if sFormat == "yyyy-mm-dd":
        sFormatDay = sYear +"-" +sMonth.zfill(2)+"-" +sDay.zfill(2)
    elif sFormatStyle == "yyyy/mm/dd":
        sFormatDay = sYear +"/" +sMonth.zfill(2)+"/" +sDay.zfill(2)
    else:
        sFormatDay = sYear+"-" + sMonth + "-" + sDay

    return sFormatDay

if __name__ == "__main__":
    main()

3.执行结果:

原文地址:https://www.cnblogs.com/SH170706/p/11133525.html

时间: 2024-10-10 02:27:26

Python读取Excel,日期列读出来是数字的处理的相关文章

[Python]xlrd 读取excel 日期类型2种方式

有个excle表格需要做一些过滤然后写入数据库中,但是日期类型的cell取出来是个数字,于是查询了下解决的办法. 基本的代码结构 data = xlrd.open_workbook(EXCEL_PATH) table = data.sheet_by_index(0) lines = table.nrows cols = table.ncols print u'The total line is %s, cols is %s'%(lines, cols) 读取某个单元格: table.cell(x

C# 读取Excel日期格式

读取Excel日期数据,一种方式是在EXCEL中把你的日期列的格式设置一下,设成"文本"型. 如果单元格格式设置为date,则在后台读出的数值是一个数值,如2008-08-08读出来是39688,怎样才能读出来是日期格式?方法如下: 要做一个判断,如果该单元格是一个double值,那么就要用 DateTime.FromOADate(double.Parse(range.Value2.ToString()));方法获得时间:如果就是一个时间,那么就直接DateTime.Parse(ran

python读取excel文件(xrld模块)

Python读取excel文件 一.python  xlrd模块 安装 mac 下安装python  xlrd模块 http://www.crifan.com/python_read_excel_xls_file_xlrd/comment-page-1/ python setup.py install 在mac 下出现的错误是 http://stackoverflow.com/questions/18199853/error-could-not-create-library-python-2-7

利用xlrd模块实现Python读取Excel文档

# -*- coding: cp936 -*- #python读取excel import xlrd def main(): xls=xlrd.open_workbook("d:\\11.xls") try: mysheet=xls.sheet_by_name("Sheet1")#找到名为Sheet1的工作表.区分大小写 except: print("没有此工作表") return print("共有 %d 行, %d 列."

Python 读取 excel 文件

现在大部分数据都是存储在excel中或直接调取数据库,作为刚刚自学Python的小白来说怎么读取文件还是比较懵的,现在对Python读取excel文件进行了一些整理: #coding=utf-8 #cmd中进行安装xlrd库 pip install xlrd import xlrd #文件路径,要用/而不是\ file_path = r'C:/Users/mingli.zhao/Desktop/七天.xlsx' #中文转码 #file_path = file_path.decode('utf-8

Python:读取Excel表格时出现的u'\u51c6’ 无法正确显示汉字

读取Excel后,想显示其中一行的元素,结果读出来是这样[u'\u51c6\u8003\u8bc1\u53f7', u'\u8003\u751f\u59d3\u540d'],始终不显示正常的汉字 依照网上的方法直接print()即可输出,试验后发现确实可以,不过一次只能输出一个元素,多余一个元素则依旧 后查找得知解决方法:需要用到json库 1 import json 2 #……文件的读取略去 3 #json.dumps(A).decode("unicode-escape") 4 #这

JXL读取Excel日期时间不准确

XL读取Excel日期时间多出了8个小时. Cell c = rs.getCell(j, i);                     if (c.getType() == CellType.DATE) {//手动填写模板文件时为 date 类型,其他情况有可能不是date类型                         DateCell dc = (DateCell) c;                         Date date = dc.getDate();       

python读取excel表格生成sql语句 第一版

由于单位设计数据库表·,都用sql.不知道什么原因不用 powerdesign或者ermaster工具,建表很痛苦  作为程序猿当然要想办法解决,用Python写一个程序解决 需要用到 xlrd linux下 sudo pip install xlrd 主要是适用于db2数据库 excel 表结构 其中 number是不正确的字段类型 不知道同事为啥这么设置.这里程序里有纠错,这个程序就是将sql语句拼好. __author__ = 'c3t' # coding:utf-8 import xlr

Python读取excel中的图片

Python读取excel中的图片文件,并转成base64 import sys import os import xlrd import zipfile import base64 class ExcelImgRead(object): def change_file_name(self, file_path, old_name, new_type = '.zip'): """ 修改指定目录下的文件类型名 :param file_path: :param old: :par