标记从 Excel 数据库打印的记录
问题
BarTender 只能从数据库读取数据,但我希望在 Excel 中完成后将某一行标记为已读取。这可以实现吗?
解答
最好的方法是在 Excel 工作表中新增一个字段,用作“标签已打印”标记。当某条记录用于打印标签时,会在“标签已打印”字段中写入一个值,标记该记录已被打印。连接 Excel 文件时可以使用查询,过滤掉那些“标签已打印”字段已被设置的记录。
遗憾的是,BarTender 在数据库连接方面是只读的。这意味着如果要将值写回已打印的数据库记录,需要使用 BarTender 内置的 VB 脚本功能。以下是示例文件:
在 Excel 文件中有两个字段,一个是产品名称,另一个用于标记该产品记录是否已被打印。
在 BarTender 标签模板中,我已连接到该 Excel 文件,假设它位于 "C:\Seagull" 文件夹下。通过查询,只查找并打印那些“Printed”列中没有“YES”的产品(记录)。启用了打印时选择记录的选项,允许用户选择哪些尚未打印的记录需要打印。
在打印过程中,标签外红色对象中的 VB 脚本会运行一段代码,连接到 Excel 文件,找到正在打印的记录,并将“Printed”字段设置为“YES”,这样下次用户打印时,这条记录就不会再出现在打印时选择对话框中。VB 脚本如下:
OnNewRecord 事件
'定义对象名称。
dim objConn
dim strConn
dim rs
'定义数据库连接参数常量。
Const adOpenStatic = 3
Const adLockOptimistic = 3
Const adCmdText = &H0001
'连接到 Excel 文件。
Set objConn = CreateObject("ADODB.Connection")
objConn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source='C:\Seagull\Fruits.xls';Extended Properties=""Excel 8.0;HDR=YES;"""
'创建一个只包含当前打印记录的记录集。
Set rs = CreateObject("ADODB.Recordset")
rs.open "SELECT * FROM [Sheet1$]", objConn, adOpenStatic, adLockOptimistic, adCmdText
rs.Find "Product = '" & Field("Sheet1$.Product") & "'"
'将该记录的“Printed”字段设置为“YES”,标记为已打印。
rs.Fields("Printed") = "YES"
rs.Update
加粗部分可以根据你的 Excel 路径、文件名以及你需要查找和更新的字段名称进行修改。你可以参考这个示例,应用到你自己的标签打印需求中。