在我们进行资料录入的时候, 是不是有时为了节省工作时间,通常需要把一段信息如身份证号码,或者电话号码转换成一段条码,然后用扫描器一个接着一个读取然后录入。 而在此, 通过 SeaTable 与 python脚本相结合,可以非常轻松的把表格中的某一个字段转换成一段条形码,然后存储在表格的图片列当中。例如,您有如下一张表格,里面含有电话号码和条码图片两列, 需要把每一行的电话号码转换成条码,并传到条码图片(BarcodeImage)列中去。
怎么做呢? 首先您需要在表格中新建一个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 使用上的新大陆呢,但是条码的生成和转换还需要注意一个问题, 一维条码天生是不支持汉子转换的, 只支持基本的数字, 字母和一些字符的转换。不过这个对于日常的业务需要已经基本足够了。 通过这个例子表明, 只要多动脑,多思考, SeaTable 结合 python 脚本通常能帮助我们实现一些意想不到的效果, 也会有很多意外的惊艳收获,而这些通常会化作宝贵的经验从而提高我们日常的工作效率。