分享免费的编程资源和教程

网站首页 > 技术教程 正文

python 模块xlwt 写入.xls文件_python中xlwt模块

goqiw 2025-02-19 11:59:40 技术教程 41 ℃ 0 评论

Python操作Excel的模块有很多,并且各有优劣,不同模块支持的操作和文件类型也有不同。下面是各个模块的支持情况:

  1. xlrd:xlrd 读取.xls文件
  2. openpyxl:openpyxl 读取写入.xlsx文件

模块

.xls

.xlsx

读取

写入

修改

保存

样式

图片

xlrd

支持

不支持

支持

不支持

不支持

不支持

不支持

不支持

xlwt

支持

不支持

不支持

支持

不支持

支持

支持

支持

xlutils

支持

不支持

不支持

支持

支持

支持

不支持

不支持

xlwings

支持

支持

支持

支持

支持

支持

支持

支持

openpyxl

不支持

支持

支持

支持

支持

支持

支持

支持

pandas

支持

支持

支持

支持

不支持

支持

不支持

不支持

一、安装

pip install xlwt

二、向xls文件中写入内容

import xlwt
#创建一个workbook对象,就相当于创建了一个Excel文件
workbook = xlwt.Workbook(encoding='utf-8',style_compression=0) #encoding:设置编码,可写中文;style_compression:是否压缩
# 创建一个sheet对象,相当于创建一个sheet页
worksheet = workbook.add_sheet('这是sheet1',cell_overwrite_ok=True) # cell_overwrite_ok:是否可以覆盖单元格,默认为False
# 向sheet页中添加数据:worksheet.write(行,列,值)
style = xlwt.XFStyle()# 初始化样式
worksheet.write(0,0,'我要发财啦',style)  # 第1行第1列写入数据,style:样式
# 将以上内容保存到指定的文件中
workbook.save('测试文件.xls')

三、设置样式

style = xlwt.XFStyle()# 初始化样式
font = xlwt.Font()# 设置字体样式(font)
pattern = xlwt.Pattern() #背景颜色设置
  1. 字体样式
font.name = '宋'   # 指定字体
font.height = 300   # 和excel字体大小比例是1:20
font.bold = True    # 字体是否加粗
font.underline = True   # 字体是否下划线
font.struck_out = True  # 字体是否有横线
font.italic = True  # 是否斜体字

#0x01
#0x02
#0x03
#0x04
#0x05
font.family=0x01

#xlwt.Font.CHARSET_ANSI_LATIN = 0x00C
#xlwt.Font.HARSET_SYS_DEFAULT= 0x01C
#xlwt.Font.HARSET_SYMBOL= 0x02
#xlwt.Font.CHARSET_APPLE_ROMAN= 0x4D
#xlwt.Font.CHARSET_ANSI_JAP_SHIFT_JIS= 0x80C
#xlwt.Font.HARSET_ANSI_KOR_HANGUL= 0x81
#xlwt.Font.CHARSET_ANSI_KOR_JOHAB= 0x82
#xlwt.Font.CHARSET_ANSI_CHINESE_GBK= 0x86
#xlwt.Font.CHARSET_ANSI_CHINESE_BIG5= 0x88
#xlwt.Font.CHARSET_ANSI_GREEK= 0xA1
#xlwt.Font.CHARSET_ANSI_TURKISH= 0xA2
#xlwt.Font.CHARSET_ANSI_VIETNAMESE= 0xA3
#xlwt.Font.CHARSET_ANSI_HEBREW= 0xB1
#xlwt.Font.CHARSET_ANSI_ARABIC= 0xB2
#xlwt.Font.CHARSET_ANSI_BALTIC= 0xBA
#xlwt.Font.CHARSET_ANSI_CYRILLIC= 0xCC
#xlwt.Font.CHARSET_ANSI_THAI= 0xDE
#xlwt.Font.CHARSET_ANSI_LATIN_II= 0xEE
#xlwt.Font.CHARSET_OEM_LATIN_I= 0xFF
font.charset = 0x86 #设置字符集

#可参考中的数值xlwt.Style.colour_map,colour_map属性返回一个字典,里面有颜色对应的序号font.colour_index =xlwt.Style.colour_map['blue']
font.colour_index = 4   # 字体颜色

# xlwt.Font.ESCAPEMENT_SUBSCRIPT 设置字体悬空位于下方
# xlwt.Font.ESCAPEMENT_SUPERSCRIPT 设置字体悬空位于上方
# xlwt.Font.ESCAPEMENT_NONE 设置字体没有这个效果
font.escapement= =xlwt.Font.ESCAPEMENT_SUPERSCRIPT

font.num_format_str = '#,##0.00' # 设置文字模式

style.font = font   # 设定字体样式
  1. 背景颜色设置
pattern = xlwt.Pattern()  
# 创建模式对象

#xlwt.Pattern.SOLID_PATTERN= 0x01 设置模式为实型
#xlwt.Pattern.NO_PATTERN= 0x00 设置模式为无模式
pattern.pattern = xlwt.Pattern.SOLID_PATTERN  # 设置背景颜色模式

#可参考中的数值xlwt.Style.colour_map,colour_map属性返回一个字典,里面有颜色对应的序号pattern.pattern_fore_colour =xlwt.Style.colour_map['blue']
pattern.pattern_fore_colour = 3  # 前景色不会影响单元格的边框
pattern.pattern_back_colour = 0x41 # 后景会影响单元格的边框

style.pattern = pattern # 设定背景图案样式
# 设置背景色
xlwt.add_palette_colour("custom_colour", 0x21)
workbook.set_colour_RGB(0x21, 219, 229, 241)
  1. 边框设置
borders = xlwt.Borders()
borderinfo = borders._search_key() #可以设置的属性
prit(borderinfo)
# 设定边框属性
# xlwt.Borders.NO_LINE = 0x00 无边框
# xlwt.Borders.THIN= 0x01 细实线
# xlwt.Borders.MEDIUM= 0x02 中实线
# xlwt.Borders.DASHED = 0x03中细虚线
# xlwt.Borders.DOTTED= 0x04 细虚线
# xlwt.Borders.THICK= 0x05 粗实线
# xlwt.Borders.DOUBLE0x06 双底线
# xlwt.Borders.HAIR= 0x07 细点虚线·
# xlwt.Borders.MEDIUM_DASHED= 0x08 粗虚线 
# xlwt.Borders.THIN_DASH_DOTTED= 0x09 细点划线
# xlwt.Borders.MEDIUM_DASH_DOTTED= 0x0A  粗点划线
# xlwt.Borders.THIN_DASH_DOT_DOTTED= 0x0B 细双点划线
# xlwt.Borders.MEDIUM_DASH_DOT_DOTTED= 0x0C 粗双点划线
# xlwt.Borders.SLANTED_MEDIUM_DASH_DOTTED= 0x0D 斜点划线
borders.left = xlwt.Borders.THIN
borders.right = xlwt.Borders.THIN
borders.top = xlwt.Borders.THIN
borders.bottom = xlwt.Borders.THIN
#0x00到0x0D。
border.left_colour = 0x40
border.top_colour = 0x40
border.right_colour = 0x40
border.bottom_colour = 0x40

style.borders = borders
  1. 对齐方式设置(alignment)
alignment = xlwt.Alignment()
#xlwt.Alignment.VERT_TOP= 0x00 字体在单元格顶部
#xlwt.Alignment.VERT_CENTER= 0x01  字体垂直居中
#xlwt.Alignment.VERT_BOTTOM= 0x02  字体在单元格底部
#xlwt.Alignment.VERT_JUSTIFIED= 0x03 在合理的位置显示
#xlwt.Alignment.VERT_DISTRIBUTED= 0x04 有垂直居中的效果,如果字体超过单元格范围会垂直分布显示
alignment.vert = 0x01 #字体垂直位置

#xlwt.Alignment.HORZ_GENERAL = 0x00  正常显示
#xlwt.Alignment.HORZ_LEFT=0x01 左对齐
#xlwt.Alignment.HORZ_CENTER= 0x02 居中
#xlwt.Alignment.HORZ_RIGHT=0x03  右对齐
#xlwt.Alignment.HORZ_FILLED=0x04  填充单元格
#xlwt.Alignment.HORZ_JUSTIFIED=0x05  显示在合理的位置
#xlwt.Alignment.HORZ_CENTER_ACROSS_SEL=0x06 我觉得这个应该是显示在单元格的正当中
#xlwt.Alignment.HORZ_DISTRIBUTED=0x07 汉字时字体是水平 平均分布在表格中,如果是英文字母则是水平居中显示
alignment.horz = 0x03 #字体水平位置

#xlwt.Alignment.DIRECTION_GENERAL= 0x00  # BIFF8X  正常显示
#xlwt.Alignment.DIRECTION_LR= 0x01
#xlwt.Alignment.DIRECTION_RL= 0x02
alignment.dire = 0x00  #字体方向

#xlwt.Alignment.ORIENTATION_NOT_ROTATED= 0x00
#xlwt.Alignment.ORIENTATION_STACKED= 0x01
#xlwt.Alignment.ORIENTATION_90_CC= 0x02
#xlwt.Alignment.ORIENTATION_90_CW = 0x03
alignment.orie= 0x00

#xlwt.Alignment.WRAP_AT_RIGHT = 0x01  # 自动换行
#xlwt.Alignment.NOT_WRAP_AT_RIGHT= 0x00  # 默认不自动换行
alignment.wrap = 0x01 # 自动换行

#xlwt.Alignment.SHRINK_TO_FIT = 0x01  # 将字体缩小到适合单元格大小
#xlwt.Alignment.NOT_SHRINK_TO_FIT = 0x00  # 默认正常显示
alignment.shri = 0x01 #自动缩进

#xlwt.Alignment.WRAP_AT_RIGHT = 0x01  # 自动换行
#xlwt.Alignment.NOT_WRAP_AT_RIGHT= 0x00  # 默认不自动换行
alignment.wrap = 0x01 #自动换行

alignment.rota = 2 #旋转方向,值为数字,表示旋转的角度
alignment.inde = 0
alignment.merg = 0

style.alignment = alignment
  1. 设置单元格宽度
worksheet.col(col_index).width = 256 * len(col_str) * 2  # 设置列宽,计算列宽度:256是单元格基数*用数据长度*2最终的结果单元格的宽度和数据正好填满。
  1. 设置行样式
tall_style = xlwt.easyxf('font:height 600')  # 设置行高
worksheet.row(row_index).set_style(tall_style)  # 给第一行设置tall_style样式,也就是行高
worksheet.row(row_index).height_mismatch = True
worksheet.row(row_index).height =20 * 30  #20是基数*30是行的高度

四、其他

  1. 将一个日期输入一个单元格
import datetime

#'general' # 默认是此选项,常规显示。
#'0'
#'0.00'
#'#,##0',
#'#,##0.00
#'"$"#,##0_);("$"#,##0)'
#'"$"#,##0_);[Red]("$"#,##0)'
#'"$"#,##0.00_);("$"#,##0.00)'
#'"$"#,##0.00_);[Red]("$"#,##0.00)'
#'0%'
#'0.00%'
#'0.00E+00'
#'# ?/?'
#'# ??/??'
#'M/D/YY'
#'D-MMM-YY'
#'D-MMM'
#'MMM-YY'
#'h:mm AM/PM'
#'h:mm:ss AM/PM'
#'h:mm'
#'h:mm:ss'
#'M/D/YY h:mm'
#'_(#,##0_);(#,##0)'
#'_(#,##0_);[Red](#,##0)'
#'_(#,##0.00_);(#,##0.00)'
#'_(#,##0.00_);[Red](#,##0.00)'
#'_("$"* #,##0_);_("$"* (#,##0);_("$"* "-"_);_(@_)'
#'_(* #,##0_);_(* (#,##0);_(* "-"_);_(@_)'
#'_("$"* #,##0.00_);_("$"* (#,##0.00);_("$"* "-"??_);_(@_)'
#'_(* #,##0.00_);_(* (#,##0.00);_(* "-"??_);_(@_)'
#'mm:ss'
#'[h]:mm:ss'
#'mm:ss.0'
#'##0.0E+0'
#'@'
style.num_format_str = 'M/D/YY'

worksheet.write(0, 0, datetime.date.today(), style)

#时间类型的转换,把excel中时间转成python 时间(两种方式)
xlrd.xldate_as_tuple(table.cell(2,2).value, 0)   #转化为元组形式
xlrd.xldate.xldate_as_datetime(table.cell(2,2).value, 1)   #直接转化为datetime对象
xlrd.xldate_as_tuple(d,0) #d 是从excel中读取出来的浮点数
  1. 添加一个公式
worksheet.write(0,2,xlwt.Formula('A1 * B1'),style)# 求乘积
worksheet.write(0,2,xlwt.Formula('SUM(A1:A3)'),style)# 求和函数
worksheet.write(0,2, xlwt.Formula('AVERAGE(C1:C3)'),style)# 求平均数
  1. 单元格中添加超链接
worksheet.write(0, 0, xlwt.Formula('HYPERLINK("https://www.baidu.com";"百度")'),style))
  1. 合并列和行
worksheet.write_merge(8, 10, 2, 4, '合并单元格', style)
  1. 插入图片
worksheet.insert_bitmap("mm.bmp",0,0)
  1. 数据保护,设置单元格数据保护之后,数据只能查看不能修改和编辑
protection = xlwt.Protection()
protection.cell_locked = 1  # 设置单元格锁定
protection.formula_hidden = 1  # 设定隐藏单元格内公式
worksheet.set_protect(1)  # 只有在st表设置为保护时才有效
  1. 颜色映射
xlwt.Style.colour_map.aqua=0x31
xlwt.Style.colour_map.black=0x08
xlwt.Style.colour_map.blu=0x0C
xlwt.Style.colour_map.blue_gray=0x36
xlwt.Style.colour_map.bright_green=0x0B
xlwt.Style.colour_map.brow=0x3C
xlwt.Style.colour_map.coral=0x1D
xlwt.Style.colour_map.cyan_ega=0x0F
xlwt.Style.colour_map.dark_blue=0x12
xlwt.Style.colour_map.dark_blue_ega=0x12
xlwt.Style.colour_map.dark_green=0x3A
xlwt.Style.colour_map.dark_green_ega=0x11
xlwt.Style.colour_map.dark_purple=0x1C
xlwt.Style.colour_map.dark_red=0x10
xlwt.Style.colour_map.dark_red_ega=0x10
xlwt.Style.colour_map.dark_teal=0x38
xlwt.Style.colour_map.dark_yellow=0x13
xlwt.Style.colour_map.gold=0x33
xlwt.Style.colour_map.gray_ega=0x17
xlwt.Style.colour_map.gray25=0x16
xlwt.Style.colour_map.gray40=0x37
xlwt.Style.colour_map.gray50=0x17
xlwt.Style.colour_map.gray80=0x3F
xlwt.Style.colour_map.green=0x11
xlwt.Style.colour_map.ice_blue=0x1F
xlwt.Style.colour_map.indigo=0x3E
xlwt.Style.colour_map.ivory=0x1A
xlwt.Style.colour_map.lavender=0x2E
xlwt.Style.colour_map.light_blue=0x30
xlwt.Style.colour_map.light_green=0x2A
xlwt.Style.colour_map.light_orange=0x34
xlwt.Style.colour_map.light_turquoise=0x29
xlwt.Style.colour_map.light_yellow=0x2B
xlwt.Style.colour_map.lime=0x32
xlwt.Style.colour_map.magenta_ega=0x0E
xlwt.Style.colour_map.ocean_blue=0x1E
xlwt.Style.colour_map.olive_ega=0x13
xlwt.Style.colour_map.olive_green=0x3B
xlwt.Style.colour_map.orange=0x35
xlwt.Style.colour_map.pale_blue=0x2C
xlwt.Style.colour_map.periwinkle=0x18
xlwt.Style.colour_map.pink=0x0E
xlwt.Style.colour_map.plum=0x3D
xlwt.Style.colour_map.purple_ega=0x14
xlwt.Style.colour_map.red=0x0A
xlwt.Style.colour_map.rose=0x2D
xlwt.Style.colour_map.sea_green=0x39
xlwt.Style.colour_map.silver_ega=0x16
xlwt.Style.colour_map.sky_blue=0x28
xlwt.Style.colour_map.tan=0x2F
xlwt.Style.colour_map.teal=0x15
xlwt.Style.colour_map.teal_eg=0x15
xlwt.Style.colour_map.turquoise=0x0F
xlwt.Style.colour_map.violet=0x14
xlwt.Style.colour_map.white=0x09
xlwt.Style.colour_map.yellow=0x0D

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表