好好填一张图看看效果:
哇的天,太棒了吧
【其实,这是用Python写脚本弄得,不是一格一格填的】
&开始分析
调整格子长宽 | openpyxl库可以 |
---|---|
格子填色 | openpyxl库可以 |
读取图片并获取像素 | pillow库可以(PIL) |
例:
1. 更改行高,列宽
ws.column_dimensions['A'].width = 10 # 更改第A列列宽为10
ws.row_dimensions[1].height = 13.5 # 更改第1行行高为 13.5
------ps:ws为一个可操作的表格对象
2. 填充颜色
wk = openpyxl.load_workbook(r"E:\lala.xlsx")
wk_name = wk.sheetnames
wk_sheet = wk[wk_name[0]]
fille = PatternFill('solid',fgColor='FFBB00') #设置填充颜色【16进制
wk_sheet['C2'].fill = fille # 应用填充样式在C2单元格
3. 获取图片坐标为x,y处的rgb值
rgb = img.getpixel((x, y))
&发现了两个问题
def rgb_to_hex(rgb):
rb = list(rgb)
st = ''
for cl in rb:
st += hex(cl)[2:].rjust(2, '0')# 去掉16进制开头的0x,并保证转换后位数为2
if st.count('0')==6: # 不知为何,发现不识别16进制颜色 000000,所以换成000001 影响不大
st = st[:-1] + '1'
return st
这个转换,可以把表格横坐标理解为一种“字符26进制”,具体解释参考这篇文章【点击这里】
具体解释看那篇文章,这里直接上代码
【实现了把十进制数转换为对应的Excel列坐标A,B,C,D…AA,AB…】
def ch26(x):
chr26 = [chr(65 + i) for i in range(26)]
zh = ''
while x!=-1:
zh = chr26[x%26] + zh
x = x//26-1
return zh
& 解决了主要的技术问题,那么只需要遍历读图获取像素,转换像素,遍历填图并设置格子长宽。
from PIL import Image
from openpyxl.styles import PatternFill
from openpyxl import Workbook
img_path = r'c:\lala\hello.png'
out_path = r'c:\lala\hello.xlsx'
img = Image.open(img_path)
wb = Workbook()
sheet = wb.worksheets[0]#获取初始工作表
for y in range(img.size[1]):
for x in range(img.size[0]):
if not y:# 如果是第一行,修改每一格列宽
sheet.column_dimensions[ch26(x)].width = 2.6
rgb = img.getpixel((x, y))
c_hex = rgb_to_hex(rgb)
fills = PatternFill('solid', fgColor=c_hex)
sheet[f'{ch26(x)}{y}'].fill = fills
print('\r Get {}-[{}]//{}-[{}]'.format(x+1, img.size[0], y+1, img.size[1]+1), end='')
wb.save(out_path)
wb.close()
这几步骤有不明白的片段,可以翻一翻前面的分析看。![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/c8381491623468f879d57bd2dc268f6e.gif)
至此,就完成了,那么稍微加点UI,然后打个包,岂不是更方便食用。肝!肝!肝!![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/090d1c3a0f4758eefb23454ea4112d83.gif)
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/f3b75d2761adb6df0a5b97fec2d948cf.png)
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/d5e5c7f1acd4867651343823dedeb1a1.png)
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/0d6c4df41053c1e0573ffa9e4db0e487.png)
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/a0e0565d58a3f6c60feeee1c0a21c864.png)
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/fb6189d1a57075a6ecf4b38513d48f63.png)
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/bc58150f39a1d12af87a0706f85918d6.png)
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/7515a36b95d0988c2416eacba65e6d4e.png)
成功
【要 打包资源的评论区留言,或者自己写一下UI再打包也可 】
shawn-pu.lanzouw.com/icdzxoh
密码:wuhu