如何通过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!!