Re:从0开始的Python学习生活(Ⅲ)——Excel的简单处理

教改坑爹啊!!!

当年天真的以为所谓以器官系统为主线只是为了招生宣传而吹的牛,结果是真的啊!!!我们还成了第一届教改的小白鼠啊!!!我勒个去…
没有教材就算了,怎么课表还每周都不一样呢?!淦哦,这也太反人类了。bks百医(x
为了快速排版课表,把公选课灵活的批量写入,俺又把Python拾起来了!
(其实暑假写了几个easygui相关的程序没整理,先咕着x

基础读写

import xlrd
import xlwt
#ExcelRead ExcelWrite
from xlutils.copy import copy
#虽然不知道为啥但这么写就对了,自己写xlutils.copy报错

cla = xlrd.open_workbook("课表.xlsx")
#打开表格读入
print (cla.nsheets)
print (cla.sheet_names())

#据说不能直接修改,tmp存一下
tmp = copy(cla)
s = tmp.get_sheet(0)
#奇怪的读取

for i in range(0, 6):
    for j in range(0, 2):
        s.write(13 + j * 12, 2 + i * 5, "聆听与歌唱(302)")
for i in range(0, 6):
    s.write(13, 4 + i * 5, "ps(816)")
for i in range(0, 6):
    s.write(37, 4 + i * 5, "py(812)")
for i in range(0, 6):
    if 4 + i * 5 < 16:
        s.write(25, 4 + i * 5, "ps(816)")
    else:
        s.write(25, 4 + i * 5, "py(812)")
for i in range(0, 3):
    s.write(13, 5 + i * 5, "英语(3教)")
s.write(37, 15, "英语(3教)")
s.write(25, 15, "物理实验(402/414)")
#批量写入
#s.write(行, 列, "内容")

tmp.save("NewOne.xls")
#保存

几个点注意一下(咕咕咕):
from … import …结构,百度了还有点晕,不太明白
xlrd纯的读入,不能修改的
修改要用xlwt,而且要把表格get出来
xlwt只能存xls,要是存xlsx会报错

高端排版

import xlrd
import xlwt
import xlutils
from xlutils.copy import copy

####预处理####
cla = xlrd.open_workbook("NewOne.xls")
Origin = xlrd.open_workbook("课表.xlsx")
tmp = copy(cla)
s = tmp.get_sheet(0)
sheet = cla.sheet_by_name('19级临床2班')
Merge = Origin.sheet_by_name('19级临床2班').merged_cells
#print(Merge)

####列宽####
for i in range(2, 32):
    s.col(i).width = 3000
s.col(0).width = 1500
s.col(1).width = 1550

####行高####
tall_style = xlwt.easyxf("font: height 720")
tall_style_title = xlwt.easyxf("font: height 360")
tall_style_mayuan = xlwt.easyxf("font: height 1440")
tall_style_renxuan = xlwt.easyxf("font: height 2160")

delta = 12

for j in range(0, 4):
    for i in range(5 + delta * j, 13 + delta * j):
        s.row(i).set_style(tall_style)

for i in range(0, 2):
    s.row(i).set_style(tall_style_title)
for j in range(0, 4):
    for i in range(2 + delta * j, 5 + delta * j):
        s.row(i).set_style(tall_style_title)
'''
for i in range(0, 4):
    s.row(12 + i * delta).set_style(tall_style_mayuan)
'''
for i in range(0, 3):
    s.row(13 + i * delta).set_style(tall_style_renxuan)


####合并单元格并设置字体格式####
'''
for i in range(0, 4):
    for j in range(0, 6):
        cell_value = sheet.cell_value(2 + i * delta, 2 + j * 5)
        s.write_merge(2 + i * delta, 2 + i * delta, 2 + j * 5, 6 + j * 5, cell_value)


for (row_up, row_down, col_left, col_right) in Merge:
    cell_value = Origin.sheet_by_name('19级临床2班').cell_value(row_up, col_left)
    s.write_merge(row_up, row_down - 1, col_left, col_right - 1, cell_value)
    #print(cell_value)
##这是单纯的合并操作##
'''
font = xlwt.Font()
font.name = "黑体"
font.height = 11 * 20
font.bold = True

alignment = xlwt.Alignment()
alignment.horz = 0x02
alignment.vert = 0x01
alignment.wrap = True
#'''
borders = xlwt.Borders()
borders.left = xlwt.Borders.THIN
borders.right = xlwt.Borders.THIN
borders.bottom = xlwt.Borders.THIN
borders.top = xlwt.Borders.THIN
borders.left_colour = 0
borders.right_colour = 0
borders.top_colour = 0
borders.bottom_colour = 0
#'''
style = xlwt.XFStyle()
style.font = font
style.alignment = alignment
style.borders = borders

for (row_up, row_down, col_left, col_right) in Merge:
    cell_value = Origin.sheet_by_name('19级临床2班').cell_value(row_up, col_left)
    #print(cell_value)
    s.write_merge(row_up, row_down - 1, col_left, col_right - 1, cell_value, style)

for i in range(0, 3):
    for j in range(0, 32):
        cell_value = sheet.cell_value(13 + i * delta, j)
        s.write(13 + i * delta, j, cell_value, style)

for i in range(0, 4):
    for j in range(5, 14):
        cell_value = sheet.cell_value(j + i * delta, 1)
        s.write(j + i * delta, 1, cell_value, style)

####一些(赫鲁晓夫的)小修小补####
s.write_merge(9, 12, 3, 3, "实验导论", style)
s.write_merge(9, 12, 4, 4, "实验导论", style)
for i in range(0, 3):
    s.write(12 + i * delta, 1, '8', style)
    for j in range(0, 6):
        if i != 0 or j != 5:
            s.write_merge(11 + i * delta, 12 + i * delta, 2 + j * 5, 2 + j * 5, "马原(408)(上至第9节课)", style)
s.write(17, 22, "基础综合(702)", style)
##添加了实验导论课,并修改了马原的课程描述##

font_day = xlwt.Font()
font_day.name = "楷体"
font_day.height = 10 * 20
font_day.bold = True

style_day = xlwt.XFStyle()
style_day.font = font_day
style_day.alignment = alignment
style_day.borders = borders

for i in range(0, 4):
    for j in range(2, 32):
        cell_value = sheet.cell_value(3 + i * delta, j)
        s.write(3 + i * delta, j, cell_value, style_day)
        cell_value = sheet.cell_value(4 + i * delta, j)
        s.write(4 + i * delta, j, cell_value, style_day)
##调整了日期与星期的字体,并添加边框##

'''
####添加底色####
pMon = xlwt.Pattern()
pTue = xlwt.Pattern()
pWed = xlwt.Pattern()
pThu = xlwt.Pattern()
pFri = xlwt.Pattern()

pMon.pattern = xlwt.Pattern.SOLID_PATTERN
pTue.pattern = xlwt.Pattern.SOLID_PATTERN
pWed.pattern = xlwt.Pattern.SOLID_PATTERN
pThu.pattern = xlwt.Pattern.SOLID_PATTERN
pFri.pattern = xlwt.Pattern.SOLID_PATTERN

pMon.pattern_fore_colour = 7
pTue.pattern_fore_colour = 5
pWed.pattern_fore_colour = 4
pThu.pattern_fore_colour = 3
pFri.pattern_fore_colour = 2

sMon = xlwt.XFStyle()
sTue = xlwt.XFStyle()
sWed = xlwt.XFStyle()
sThu = xlwt.XFStyle()
sFri = xlwt.XFStyle()

sMon = style
sTue = style
sWed = style
sThu = style
sFri = style

sMon.pattern = pMon
sTue.pattern = pTue
sWed.pattern = pWed
sThu.pattern = pThu
sFri.pattern = pFri

for (row_up, row_down, col_left, col_right) in Merge:
    cell_value = Origin.sheet_by_name('19级临床2班').cell_value(row_up, col_left)
    if col_left + 1 == col_right:
        Weekday = col_left % 5
        if Weekday == 2:
            s.write_merge(row_up, row_down - 1, col_left, col_right - 1, cell_value, sMon)
        elif Weekday == 3:
            s.write_merge(row_up, row_down - 1, col_left, col_right - 1, cell_value, sTue)
        elif Weekday == 4:
            s.write_merge(row_up, row_down - 1, col_left, col_right - 1, cell_value, sWed)
        elif Weekday == 0:
            s.write_merge(row_up, row_down - 1, col_left, col_right - 1, cell_value, sThu)
        elif Weekday == 1:
            s.write_merge(row_up, row_down - 1, col_left, col_right - 1, cell_value, sFri)
'''

####保存####
tmp.save("NewTwo.xls")

行高和列宽的处理有些不同,留意一下
style里的颜色代码格式代码啥的很多,懒得整理,请直接去百度“xlwt调节字体”啥的,哦对了,write是可覆盖的
添加底色写废了,咕~

这玩意基本就是照着葫芦画瓢,我也是一边百度一边连改带抄写的,如果大二下学期还是反人类课表而这个模板又看不懂了,请滚去百度

p.s.最后放两个小标程吧,示范的

'''
-----------------------------
Part One
-----------------------------
'''

import xlwt
# 创建 xls 文件对象
wb = xlwt.Workbook()
# 新增一个表单
sh = wb.add_sheet('A Test Sheet')
# 按位置添加数据
sh.write(0, 0, 1234.56)
sh.write(1, 0, 8888)
sh.write(2, 0, 'hello')
sh.write(2, 1, 'world')
# 保存文件
wb.save('example.xls')

'''
-----------------------------------
Part Two
-----------------------------------
'''

import xlwt
workbook = xlwt.Workbook()
worksheet = workbook.add_sheet('My Sheet')
worksheet.write(0, 0,'My Cell Contents')
# 设置单元格宽度
worksheet.col(0).width = 33333
workbook.save('cell_width.xls')

# Please note: While I was able to find these constants within the source code, on my system (using LibreOffice,) I was only presented with a solid line, varying from thin to thick; no dotted or dashed lines.

workbook = xlwt.Workbook()
worksheet = workbook.add_sheet('My Sheet')
borders = xlwt.Borders() # Create Borders
borders.left = xlwt.Borders.DASHED
  #DASHED虚线
  #NO_LINE没有
  #THIN实线
# May be: NO_LINE, THIN, MEDIUM, DASHED, DOTTED, THICK, DOUBLE, HAIR, MEDIUM_DASHED, THIN_DASH_DOTTED, MEDIUM_DASH_DOTTED, THIN_DASH_DOT_DOTTED, MEDIUM_DASH_DOT_DOTTED, SLANTED_MEDIUM_DASH_DOTTED, or 0x00 through 0x0D.
borders.right = xlwt.Borders.DASHED
borders.top = xlwt.Borders.DASHED
borders.bottom = xlwt.Borders.DASHED
borders.left_colour = 0x40
borders.right_colour = 0x40
borders.top_colour = 0x40
borders.bottom_colour = 0x40
style = xlwt.XFStyle() # Create Style
style.borders = borders # Add Borders to Style
worksheet.write(0, 0, 'Cell Contents', style)
workbook.save('Excel_Workbook.xls')


以上です。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值