Excel表格是微软开发的格式,在Linux上操作比较复杂
python操作xlsx文件常用的包有三个:
-
xlrd
:xlsx reader,只能读数据 -
xlwt
::xlsx writer,只能从前往后按顺序写数据 -
xlsxWriter
:可以写数据和样式
此外还有结合了xlrd
和xlwt
的xlutils
包
这里记录xlsxWriter
包
官方文档
新建项目
导入时注意全小写:
import xlsxwriter
打开和关闭:xlwt在最后调用.save(fp)
方法时传入保存路径,而xlsxWriter在新建项目(Workbook)时就指明输出文件路径,最后使用.close()
关闭:
wb = xlsxwriter.Workbook(fp)
...
wb.close()
新建工作表(Worksheet):
ws = wb.add_worksheet('工作表的名字')
常用操作
设置单元格样式
先定义好表格样式,进行整体布局
使用 format0 = wb.add_format({...})
添加样式
字体大小、颜色、加粗
'font_size': 15 # 注意单位是磅
'color': 'red' # 字体颜色
'bold': True # 是否加粗
水平、垂直方向文本对齐
'align': 'center' # 水平方向居中,默认左对齐
'valign': 'vcenter' # 垂直方向居中
列宽和行高
一列/一行所有单元格的列宽/行高是相同的,因此列宽/行高应该以列/行为单位进行设置
列设置
ws.set_column(self, firstcol, lastcol, width=None, cell_format=None, options={}) # 这里列宽单位我还没弄明白??
行设置
ws.set_row(self, row, height=None, cell_format=None, options={}) # 这里的单位是磅
往单元格里写值
写入普通字符串:write_string(self, row, col, string, cell_format=None)
写入日期:write_datetime(self, row, col, date, cell_format=None)
date
是一个datetime.datetime
对象
-
datetime.datetime
对象可以通过datetime.datetime(int_year, int_month, int_day)
创建 -
xlrd.xldate_as_tuple(float_number)
可以将浮点数解析成y元组(Y, M, D, h, m, s)
cell_format
应该指出日期的字符串显示,毕竟datetime.datetime
对象不可能被打印在屏幕上~
cell_format = wb.add_format({ELSE_FORMAT, 'num_format': 'yyyy-mm-dd'})
写入其他类型
write_number(self, row, col, number, cell_format=None)
write_blank(self, row, col, blank, cell_format=None) # `blank`不管赋什么值都会被忽略
write_formula(self, row, col, formula, cell_format=None, value=0)
write_array_formula(self, first_row, first_col, last_row, last_col, formula, cell_format=None, value=0)
write_boolean(self, row, col, boolean, cell_format=None)
write_url(self, row, col, url, cell_format=None, string=None, tip=None)
合并单元格
merge_range(self, first_row, first_col, last_row, last_col, data, cell_format=None)
其他
数据有效性
列表验证
ws.data_validation(self, first_row, first_col, last_row, last_col, {'validate': 'list', 'source': LIST_SELECT})
合并字典奇淫
c = dict(a, **b)