Python + SeaTable | 从数字列,文本列生成 Barcode 图片写入表格

在我们进行资料录入的时候, 是不是有时为了节省工作时间,通常需要把一段信息如身份证号码,或者电话号码转换成一段条码,然后用扫描器一个接着一个读取然后录入。 而在此, 通过 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 中的参数来进行实现,以下是一些例子:

默认样式
image

module_width 1mm

module_height 5mm
image

quiet_zone 0.5mm
image

font_size 6pt
image

text_distance 2
image

通过以上的例子,是不是又好像发现了SeaTable 使用上的新大陆呢,但是条码的生成和转换还需要注意一个问题, 一维条码天生是不支持汉子转换的, 只支持基本的数字, 字母和一些字符的转换。不过这个对于日常的业务需要已经基本足够了。 通过这个例子表明, 只要多动脑,多思考, SeaTable 结合 python 脚本通常能帮助我们实现一些意想不到的效果, 也会有很多意外的惊艳收获,而这些通常会化作宝贵的经验从而提高我们日常的工作效率。

这个条形码看起来不错,支持 Python qrcode 生成二维码吗?

目前暂时还不支持

error occured during barcode generate [Errno 400] {“error_type”:“table_not_exist”,“error_message”:“table Table1 not found”}

请问一下,这个错误代码是什么问题导致的呢?table name已经修改了还是会出现这样的错误代码