Limsable版原始记录模板编写
Limsable版原始记录模板编写规则,多数继承与KingsLims原始记录模板编写规则。
新增功能
数据绑定规则变更 &[数据名称.数据项] 如:
默认数据名称(实验、标物、标物称量、称量、图谱、环境、前处理、录入),
可以在我的原始记录模板自行更改和新增
普通数据绑定
&[实验.样品编号] &[实验.SampleNo]
&[实验.项目名称] &[实验.ItemName]
&[实验.实验时间] &[实验.SampleTime]
&[实验.设备名称] &[实验.DeviceName]
&[实验.设备编号] &[实验.DeviceSn]
&[实验.浓度] &[实验.浓度2]
&[实验.含量] &[实验.含量2]
&[环境.温度] &[环境.湿度]
&[标物.浓度] &[标物.浓度2]
&[图谱.URL]
选择多条数据 指定选择行读取
第一行 &[环境.温度] &[环境.湿度]
第二行 &[环境.温度_next<1>] &[环境.湿度_next<1>]
第三行 &[环境.温度_next<2>] &[环境.湿度_next<2>]
…
第N行 &[环境.温度_next< N-1>] &[环境.湿度_next< N-1>]
选择多条数据 指定项目名称读取
&[实验.项目名称] &[实验.ItemName]
&[实验.项目名称.浓度] &[实验.ItemName.浓度]
图谱还原到原始记录中显示图片
&(图谱.URL) 这样写需要图片所在的单元格必须和图片宽高一致 不会自适应
&(图谱.URL)[ auto] 会适应绑定单元格大小
渲染多行数据
这里不同于KingsLims 中使用Detail渲染多行
多行渲染时,原始记录Excel菜单公式=>名称管理器中定义“list_数据名称”的标签,并将引用位置指向需要处理多行的行
[图片上传失败...(image-cca9bd-1661934794902)]
名称管理器的名称可能是
- list_实验
- list_标物
- list_称量
- list_图谱
- …
实测值回写
示例:DAQ.W5.AC2.Measuredvalue
_DAQ._W5(样品编号的单元格)._AC2(项目名称单元格).Measuredvalue 单个下划线为固定定位 __DAQ.W5.AC2.Measuredvalue __开头为相对定位(列表自增长)
查看可选择的全部数据源
在创建原始记录功能中选择的全部数据源
重点:Excel中常用VBA
重设分页符
ActiveSheet.ResetAllPageBreaks
Workbook_Open中必用方法
On Error Resume Next '忽略错误继续执行VBA代码,避免出现错误消息
Application.DisplayAlerts = False '关闭提示
Application.ScreenUpdating = False '取消屏幕更新
特定字符转为想要的字符
' 表格打开事件时 找到(|)替换为 换行符
Dim cell As Range
For Each cell In ActiveSheet.UsedRange
If InStr(1, cell.Value, "(|)") > 0 Then
cell.Value = Replace(cell.Value, "(|)", vbCrLf)
End If
Next cell
两个经常用到的函数方法模板(有效位数&按小数位)
Function QLYXWZ(TestValue#, ValidityNumber%) As String '按有效位数进行修约
Dim Ret$
If TestValue < 0 Then
Flag = -1
TestValue = -CDec(TestValue)
Else
Flag = 1
End If
If ValidityNumber < 0 Or TestValue = 0 Then
Ret = CDec(TestValue) * Flag '有效数字小于1 或者 结果为0 的时候不处理
Else
i = Int(Log(TestValue) / Log(10) + 1)
TestValue = TestValue / 10 ^ i
Ret = Round(CDec(TestValue), ValidityNumber) * 10 ^ i
End If
If InStr(Ret, ".") > 0 And NonZeroCount(Ret) < ValidityNumber Then Ret = Ret & Left("0000000000000000", ValidityNumber - NonZeroCount(Ret))
If InStr(Ret, ".") = 0 And Len(Ret) < ValidityNumber Then Ret = Ret & "." & Left("0000000000000000", ValidityNumber - Len(Ret))
If Left(Ret, 1) = "." Then Ret = "0" & Ret
If Flag = -1 Then Ret = "-" & Ret
QLYXWZ = Ret ' 例如:ValidityRound(0.01255,3)=0.0126 ValidityRound(0.01265,3)=0.0126
End Function
Function Round46(C#, d%) As String '按小数位数进行修约
Dim Ret$
If C < 0 Then
Flag = -1
C = -CDec(C)
Else
Flag = 1
End If
Ret = CStr(VBA.Round(CDec(C), d))
If Left(Ret, 1) = "." Then Ret = "0" & Ret
If d > 0 And InStr(Ret, ".") = 0 Then Ret = Ret & ".0"
If Len(Ret) - InStr(Ret, ".") < d Then Ret = Ret & Left("00000000000000000", d - (Len(Ret) - InStr(Ret, ".")))
If Flag = -1 Then Ret = "-" & Ret
Round46 = Ret
End Function
Function NonZeroCount(Str$) As Integer '修约的时候非前0字符个数
Dim TmpStr$
TmpStr = Str
While TmpStr <> "" And (Left(TmpStr, 1) = "0" Or Left(TmpStr, 1) = ".")
TmpStr = Right(TmpStr, Len(TmpStr) - 1)
Wend
NonZeroCount = Len(Replace(TmpStr, ".", ""))
End Function
重点:Excel中常用函数
1.判断范围是否都"/"
=IF(AND(H9:I9 = "/"), "都包含/", "不都包含/")