必威体育Betway必威体育官网
当前位置:首页 > IT技术

python 在excel文件中写入date日期数据,以及读取excel日期数据,如何在python中正确显示date日期。

时间:2019-10-27 17:13:19来源:IT技术作者:seo实验室小编阅读:64次「手机版」
 

xiao.77

如何通过Python写入date数据了?

写入还是很简单的。

import xlwt3

import  datetime as dt

workbook = xlwt.Workbook()

worksheet = workbook.add_sheet('sheet1')

worksheet.write(0, 0, dt.date.today())

workbook.save('test.xls')

查看一下,确实写入了,但变成了一个数字。怎么回事了,原来excel保存日期采用的是float类型保存。

查看worksheet.write:

Help on method write in module xlwt3.worksheet:

write(self, r, c, label=b'', style=<xlwt3.style.XFStyle object>) method of xlwt3

.worksheet.Worksheet instance

太简单了,label是什么?

只能查看源码了:   

def write(self, r, c, label=b"", style=style.default_style):

   self.row(r).write(c, label, style)

继续挖掘:

   def write(self, col, label, style=style.default_style):

   self.__adjust_height(style)

   self.__adjust_bound_col_idx(col)

   style_index = self.__parent_wb.add_style(style)

   if isinstance(label, str):

   if len(label) > 0:

   self.insert_cell(col,

       StrCell(self.__idx, col, style_index, self.__parent_wb.add_str(label))

       )

   else:

   self.insert_cell(col, BlankCell(self.__idx, col, style_index))

   elif isinstance(label, bool): # bool is subclass of int; test bool first

   self.insert_cell(col, BooleanCell(self.__idx, col, style_index, label))

   elif isinstance(label, (float, int, Decimal)):

   self.insert_cell(col, NumberCell(self.__idx, col, style_index, label))

   elif isinstance(label, (dt.datetime, dt.date, dt.time)):

   date_number = self.__excel_date_dt(label)

   self.insert_cell(col, NumberCell(self.__idx, col, style_index, date_number))

   elif label is None:

   self.insert_cell(col, BlankCell(self.__idx, col, style_index))

   elif isinstance(label, formula.Formula):

   self.__parent_wb.add_sheet_reference(label)

   self.insert_cell(col, FormulaCell(self.__idx, col, style_index, label))

   else:

   raise Exception("unexpected data type %r" % type(label))

原来:

   elif isinstance(label, (dt.datetime, dt.date, dt.time)):

   date_number = self.__excel_date_dt(label)

   self.insert_cell(col, NumberCell(self.__idx, col, style_index, date_number))

label的数值,会先进行判断,然后进行处理。

这样,只需要设置一下style就可以了!

dateFormat = xlwt.XFStyle()

dateFormat.num_format_str = 'yyyy/mm/dd'

worksheet.write(0, 0, dt.date.today(),dateFormat)

workbook.save('test.xls')

搞定。

注意一下:

python的date 和excel的date是不一样的。

实验一下:

dt.date.today().toordinal()##2015/6/19

735768

读取一下excel的数值了?

import xlrd

worksheetRead = xlrd.open_workbook('test.xls')

sheetRead=Rd.sheet_by_index(0)

sheetRead.cell(0,0).value

42174

差别真不小!!

WHY?

原来:python是从公元1年1月1日开始的天数转换 的!

excel是从1899年12月 31号开始的。

做一个函数转换一下即可:

__s_date = dt.date (1899, 12, 31).toordinal() - 1

def getdate(date ):

   if isinstance(date , float ):

   date = int(date )

   d = dt.date .fromordinal(__s_date + date )

   return d

ok,over!!

文章最后发布于: 2015-06-19 17:03:45

相关阅读

C++中的string类用法简介

本文主要介绍C++中的string类的常见用法。 1. 概述 string是C++标准库的一个重要的部分,主要用于字符串处理。可以使用输入输出流

Python爬虫之——爬取妹子图片

近期很多博友找我咨询问题,我将更新的代码写在最后,由于精力有限只更新单线程版 首先声明,本博文为我原创,但是我在看了 崔庆才 博主

Python爬虫——爬取阳光高考网高校信息

在本次学习中主要爬取的内容如下就简单粗暴直接献上代码吧import requests import time import json from bs4 import BeautifulS

Mysql中FROM_UNIXTIME()和UNIX_TIMESTAMP()函数

我们经常会面临要从数据库里判断时间,取出特定日期的查询。但是数据库里储存的都是unix时间戳,处理起来并不是特别友好。幸而MYSQL

中科宇杰在2019年留学归国人员招聘会为何如此受到追捧

节能行业中科宇杰在留学生招聘会上成了&ldquo;香饽饽&rdquo;记者从2019留学归国人员专场招聘会现场了,看见排起长龙关注国内知名节

分享到:

栏目导航

推荐阅读

热门阅读