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

2018-01-12 11:15:16来源:oschina作者:xiaoxin人点击

分享

如何通过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=) 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 firstself.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!!

最新文章

123

最新摄影

闪念基因

微信扫一扫

第七城市微信公众平台