xiao.77
写入还是很简单的。
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类的常见用法。 1. 概述 string是C++标准库的一个重要的部分,主要用于字符串处理。可以使用输入输出流
近期很多博友找我咨询问题,我将更新的代码写在最后,由于精力有限只更新单线程版 首先声明,本博文为我原创,但是我在看了 崔庆才 博主
在本次学习中主要爬取的内容如下就简单粗暴直接献上代码吧import requests import time import json from bs4 import BeautifulS
Mysql中FROM_UNIXTIME()和UNIX_TIMESTAMP()函数
我们经常会面临要从数据库里判断时间,取出特定日期的查询。但是数据库里储存的都是unix时间戳,处理起来并不是特别友好。幸而MYSQL
节能行业中科宇杰在留学生招聘会上成了“香饽饽”记者从2019留学归国人员专场招聘会现场了,看见排起长龙关注国内知名节