Python+SeaTable实现生成条形码图片并写入表格
作者:SeaTable开发者版 发布时间:2022-09-04 22:13:26
不管是录入信息时需要用扫码器扫码录入、核对信息时用于扫码识别,还是有别的生成条形码的需要,那我们如何把表格中的数字、文本列快速生成条形码图片呢?这在 SeaTable 表格中用 Python 脚本就可以轻松实现,即把表格中的某一个字段,如身份证号、电话号转换成相应的条形码,并存储到图片列中。例如,你有如下一张表格,里面有电话号码和条码图片两列,需要把每一行的电话号码转换成条码,并传到条码图片(BarcodeImage)列中去。怎么实现呢?
在 SeaTable 中用 Python 生成条形码
新建 Python 脚本
首先需要在表格中,点击“脚本”功能,新建一个 Python 脚本。
写入代码
然后在脚本中写入如下代码(如果需要线下运行,需要安装Python-barcode 依赖包)
import os
import time
import barcode
from barcode.writer import ImageWriter
from seatable_api import Base, context
api_token = context.api_token or "859ad340d9a2b11b067c11f43078992e14853af5"
server_url = context.server_url or "https://cloud.seatable.cn"
TEXT_COL = "PhoneNum" # 需要转换成条码的列
BARCODE_IMAGE_COL = "BarcodeImage" # 图片列, 存储条码
TABLE_NAME = 'Table1'
BARCODE_TYPE = 'code128'
CUSTOM_OPTIONS = {
"module_width": 0.2, # 单个条纹的最小宽度, mm
"module_height": 15.0, # 条纹带的高度, mm
"quiet_zone": 6.5, # 图片两边与首尾两条纹之间的距离, mm
"font_size": 10, # 条纹底部文本的大小,pt
"text_distance": 5.0, # 条纹底部与条纹之间的距离, mm
}
CODE = barcode.get_barcode_class(BARCODE_TYPE)
base = Base(api_token, server_url)
base.auth()
def get_time_stamp():
return str(int(time.time()*100000))
for row in base.list_rows(TABLE_NAME):
# 如果图片列中已有内容, 则跳过
if row.get(BARCODE_IMAGE_COL):
continue
# 如果电话号码列为空,则跳过
if not row.get(TEXT_COL):
continue
try:
row_id = row.get('_id')
msg = str(row.get(TEXT_COL))
# 生成条码对象
code_img = CODE(msg, writer=ImageWriter())
save_name = "%s_%s" % (row_id, get_time_stamp())
# 保存为图片并暂存
file_name = code_img.save("/tmp/%s" % save_name, options=CUSTOM_OPTIONS)
# 将图片上传至 Base 表格
info_dict = base.upload_local_file(file_name, name=None, file_type='image', replace=True)
img_url = info_dict.get('url')
row[BARCODE_IMAGE_COL] = [img_url]
base.update_row('Table1', row_id, row)
# 移除暂存文件
os.remove(file_name)
except Exception as error:
print("error occured during barcode generate", error)
continue
运行脚本
一键点击运行按钮,脚本运行完成后,表格中的电话号就会自动生成相应的条形码,并保存到条形码图片列。方便快捷。
设置条码参考
此外,如果你还需要设置条码、条纹的长度,以及文本的长度等,可以通过调节脚本中的 CUSTOM_OPTIONS中的参数来实现,以下是一些例子:
默认模式
module_width 1mm
module_height 5mm
quiet_zone 0.5mm
font_size 6pt
text_distance 2
应用场景
在前面完成了把文本列的值转换成条形码,例如,把一长串准考证号转换成条形码图片,下面来看如何应用。
打印条形码用于粘贴答题卡
当把每个学生的准考证号转换成条形码图片后,考务工作人员点击条形码图片列,可以下载全部并能使用 {列名} 引用字段内容给所有条形码自动命名,方便后续工作。
设计准考证页面用于识别信息
把学生姓名、照片、准考证条形码等信息设计成准考证页面,用于扫码读取、核对、录入信息等需要,是比较常见的考务工作和使用场景。这种数据的记录、处理、应用等工作在 SeaTable 表格上就可以快速完成。
在表格上添加页面设计插件,就可以自定义设计多个页面模板。页面可以拖入行记录中的文本、数字、图片等字段信息。设计完并保存后,可以一键打印当前行记录页面或打印所有页面,也可以设置使用 {字段名} 引用字段的内容,并一键下载为PDF。
来源:https://juejin.cn/post/7125331420850946055
猜你喜欢
- 前言设置mysql最大连接数的方法:首先打开mysql的控制台;然后输入语句【set GLOBAL max_connections=1000
- 除了使用 sys.exc_info() 方法获取更多的异常信息之外,还可以使用 traceback 模块,该模块可以用来查看异常的传播轨迹,
- 本文测试环境:CentOS 7 64-bit Minimal MySQL 5.7配置 yum 源在 https://dev.mysql.co
- 循环加载模块假设你有两个文件,a.py和b.py,在这两个文件中互相加载对方,例如:在a.py中:import bdef f():retur
- 一、数字类型。数字类型按照我的分类方法分为三类:整数类、小数类和数字类。 我所谓的“数字类”,就是指DECIMAL
- 纪念我的第一个爬虫程序,一共写了三个白天,其中有两个上午没有看,中途遇到了各种奇怪的问题,伴随着他们的解决,对于一些基本的操作也弄清楚了。果
- 我就废话不多说了,大家还是直接看代码吧~#zmail库:可以用几行代码帮我们收取一封邮件import zmail#输入账号和密码server
- 数据库--用户表CREATE TABLE `users` ( `id` int(11) NOT NULL AUTO_
- import os,pandas as pd,re#1.获取文件夹下要合并的文件名dirpath = '文件夹地址'#工作表
- 第1步:安装cross-envnpm i --save-dev cross-env 第2步:修改各环境下的参数在config/目录下添加te
- 本文实例为大家分享了python实现网络五子棋的具体代码,供大家参考,具体内容如下服务器端:import osimport socketim
- 1、最优化与线性规划最优化问题的三要素是决策变量、目标函数和约束条件。线性规划(Linear programming),是研究线性约束条件下
- babel-plugin-import 实现自动按需引入Vant 支持一次性导入所有组件,引入所有组件会增加代码包体积,因此不推荐这种做法b
- 前言本文主要给大家介绍了关于python子类调用父类函数的相关内容,Python中子类中的__init__()函数会覆盖父类的函数,一些情况
- 本文实例讲述了CI框架教程之优化验证码机制。分享给大家供大家参考,具体如下:验证码机制在CI框架中是通过一个辅助函数captcha()进行实
- 本文实例讲述了Python实现的远程登录windows系统功能。分享给大家供大家参考,具体如下:首先安装wmi 命令:pip install
- pyhook下载:http://sourceforge.net/projects/pyhook/files/pyhook/1.5.1/pyh
- 1. assert函数说明:Assert statements are a convenient way to insert debuggi
- 业务场景使用elasticsearch作为全文搜索引擎,对标题、内容等,实现智能搜索、输入提示、拼音搜索等elasticsearch索引与数
- 今天一个同事报告一个问题,表都不能使用了,检查了一下,发现问题 db2 => select * from testACTNO ACTK