zoukankan      html  css  js  c++  java
  • 工具函数

      1  Function DicCheck(ValueColum, dicColum)
      2     '待检查数据列的表头
      3     Dim valueColumnTitle As String
      4     '待检查数据列的字典表头
      5     Dim dicColumnTitle As String
      6     '数据表格的行数
      7     Dim valueRowCount As Long
      8     '需要校验的sheet
      9     Dim curMsgRow As Integer
     10     
     11     Dim valueTitle As String
     12     
     13     valueTitle = Sheets(valueSheetName).Cells(1, ValueColum)
     14     
     15     valueRowCount = Sheets(valueSheetName).UsedRange.Rows.count
     16     For i = dataRowStart To valueRowCount
     17         cellValue = Sheets(valueSheetName).Cells(i, ValueColum)
     18         If cellValue = "" Then
     19             Exit Function
     20         End If
     21         If cellValue <> "" And DoDicCheck(cellValue, dicColum) = False Then
     22              errorMsg = "" & i & "行的数据项:" & valueTitle & "不符合规范,请检查!"
     23              writeLog (errorMsg)
     24         End If
     25       
     26       Next i
     27 End Function
     28 '检查字典项是否合法
     29 Function DoDicCheck(valueCol As TypeValueColum, rowIndex)
     30  '字典sheet
     31     value = Sheets(valueSheetName).Cells(rowIndex, valueCol.columnIndex)
     32     For j = dataRowStart To Sheets(dicSheetName).UsedRange.Rows.count - 1
     33         dicvalue = Sheets(dicSheetName).Cells(j, valueCol.dicColumnIndex)
     34         If dicvalue = "" Then
     35             Exit For
     36         End If
     37         If dicvalue = value Then
     38           DoDicCheck = True
     39              Exit Function
     40         End If
     41    Next j
     42    If valueCol.dicColumnName = "民族" Or valueCol.dicColumnName = "国籍/地区" Then
     43         errorMsg = "" & rowIndex & "行的数据项:" & valueCol.columnName & "不符合规范,请检查"
     44         writeLog (errorMsg)
     45    Else
     46         errorMsg = "" & rowIndex & "行的数据项:" & valueCol.columnName & "不符合规范,请检查" & getTextByDicName(valueCol.dicColumnName, valueCol.dicColumnIndex)
     47         writeLog (errorMsg)
     48    End If
     49    
     50    DoDicCheck = False
     51 End Function
     52  '根据字典名称,获得字典的内容
     53  Function getTextByDicName(dicName, dicIndex)
     54     Dim str As String
     55     Dim count As Integer
     56     str = "(" & dicName & ""
     57     For j = dataRowStart To Sheets(dicSheetName).UsedRange.Rows.count - 1
     58         dicvalue = Sheets(dicSheetName).Cells(j, dicIndex)
     59         If dicvalue <> "" Then
     60             str = str + dicvalue + ""
     61             count = count + 1
     62         Else
     63             lastIndex = InStrRev(str, "")
     64             str = Application.WorksheetFunction.Substitute(str, "", ")", count)
     65             str = Application.WorksheetFunction.Substitute(str, "", "", count - 1)
     66             getTextByDicName = str
     67             Exit Function
     68         End If
     69    Next j
     70  End Function
     71  '校验长度是否符合要求,参数
     72  'value:需要校验的内容
     73  'length:限定长度
     74  'strick:是否相等
     75  Function CheckValueLength(valueCol As TypeValueColum, rowIndex, length, strick)
     76     value = Sheets(valueSheetName).Cells(rowIndex, valueCol.columnIndex)
     77     valueLength = Len(value)
     78     
     79     If strick Then
     80         If valueLength = length Then
     81             CheckValueLength = True
     82             Exit Function
     83         Else
     84             CheckValueLength = False
     85             errorMsg = "" & rowIndex & "行的数据项:" & valueCol.columnName & "必须为" & length & "位,请检查!"
     86             writeLog (errorMsg)
     87             Exit Function
     88         End If
     89     End If
     90     If valueLength <= length Then
     91         CheckValueLength = True
     92         Exit Function
     93     Else
     94         CheckValueLength = False
     95         errorMsg = "" & rowIndex & "行的数据项:" & valueCol.columnName & "长度不能大于" & length & "位,请检查!"
     96         writeLog (errorMsg)
     97         Exit Function
     98     End If
     99  End Function
    100  '获得内容的字节数
    101  '返回字节长度
    102  Function checkByteLength(value)
    103     Dim byteLen As Integer
    104     byteLen = 0
    105     If IsEmpty(value) Then
    106         Exit Function
    107     End If
    108     valueLength = Len(value)
    109     For i = 1 To valueLength
    110         If Abs(Asc(Mid(value, i, 1))) > 255 Then
    111             byteLen = byteLen + 3
    112         Else
    113             byteLen = byteLen + 1
    114         End If
    115     Next i
    116     checkByteLength = byteLen
    117  End Function
    118  
    119 '根据列查询是否有字典
    120 '找到返回列索引
    121 '找不到返回0
    122 Function findDic(value)
    123     Dim index As Integer
    124     index = 1
    125     Title = Sheets(dicSheetName).Cells(1, index)
    126     While Title <> ""
    127         
    128         If Title = value Then
    129             findDic = index
    130             Exit Function
    131         End If
    132         index = index + 1
    133          Title = Sheets(dicSheetName).Cells(1, index)
    134     Wend
    135     findDic = 0
    136 End Function
    137 
    138 '是否为数字
    139 '不是数字写入日志 返回 False
    140 '是数字  返回 True
    141 Function checkBeNumeric(valueCol As TypeValueColum, rowIndex)
    142     Dim beNumeric As Boolean
    143     value = Sheets(valueSheetName).Cells(rowIndex, valueCol.columnIndex)
    144     beNumeric = IsNumeric(value)
    145     If beNumeric Then
    146     Else
    147          errorMsg = "" & rowIndex & "行的数据项:" & valueCol.columnName & "必须为数字,请检查!"
    148          writeLog (errorMsg)
    149          checkBeNumeric = False
    150          Exit Function
    151     End If
    152     checkBeNumeric = True
    153 End Function
    154 '检查是否为20111001日期格式
    155 '合法,返回True
    156 '不合法,返回False
    157 Function CheckIsDate(valueCol As TypeValueColum, rowIndex)
    158     Dim beNumeric As Boolean
    159     value = Sheets(valueSheetName).Cells(rowIndex, valueCol.columnIndex)
    160     If Len(value) <> 8 Then
    161         errorMsg = "" & rowIndex & "行的数据项:" & valueCol.columnName & "格式不正确,请检查(例如:20121001)!"
    162         writeLog (errorMsg)
    163         CheckIsDate = False
    164         Exit Function
    165     End If
    166     
    167     beNumeric = IsNumeric(value)
    168     If beNumeric Then
    169     
    170     Else
    171         errorMsg = "" & rowIndex & "行的数据项:" & valueCol.columnName & "格式不正确,请检查(例如:20121001)!"
    172         writeLog (errorMsg)
    173         CheckIsDate = False
    174         Exit Function
    175     End If
    176     
    177     dateStr = Left(value, 4) & "/" & Mid(value, 5, 2) & "/" & Right(value, 2)
    178     beDate = IsDate(dateStr)
    179     If beDate Then
    180     Else
    181         errorMsg = "" & rowIndex & "行的数据项:" & valueCol.columnName & "不合法,请检查(例如:20121001)!"
    182         writeLog (errorMsg)
    183         CheckIsDate = False
    184         Exit Function
    185     End If
    186     CheckIsDate = True
    187 End Function
    188 '检查是否为20110101日期格式
    189 '合法,返回True
    190 '不合法,返回False
    191 Function CheckBeDate(value)
    192     Dim beNumeric As Boolean
    193     If Len(value) <> 8 Then
    194         CheckBeDate = False
    195         Exit Function
    196     End If
    197     
    198     beNumeric = IsNumeric(value)
    199     If beNumeric Then
    200     Else
    201         CheckBeDate = False
    202         Exit Function
    203     End If
    204     
    205     dateStr = Left(value, 4) & "/" & Mid(value, 5, 2) & "/" & Right(value, 2)
    206     beDate = IsDate(dateStr)
    207     If beDate Then
    208     Else
    209         CheckBeDate = False
    210         Exit Function
    211     End If
    212     CheckBeDate = True
    213 End Function
    214 '检查是否为201101日期格式
    215 '合法,返回True
    216 '不合法,返回False
    217 Function CheckIsYmDate(valueCol As TypeValueColum, rowIndex)
    218     Dim beNumeric As Boolean
    219     value = Sheets(valueSheetName).Cells(rowIndex, valueCol.columnIndex)
    220     If Len(value) <> 6 Then
    221         errorMsg = "" & rowIndex & "行的数据项:" & valueCol.columnName & "格式不正确,请检查(例如:201201)!"
    222         writeLog (errorMsg)
    223         CheckIsYmDate = False
    224         Exit Function
    225     End If
    226     
    227     beNumeric = IsNumeric(value)
    228     If beNumeric Then
    229     
    230     Else
    231         errorMsg = "" & rowIndex & "行的数据项:" & valueCol.columnName & "格式不正确,请检查(例如:201201)!"
    232         writeLog (errorMsg)
    233         CheckIsYmDate = False
    234         Exit Function
    235     End If
    236     
    237     dateStr = Left(value, 4) & "/" & Right(value, 2) & "/01"
    238     beDate = IsDate(dateStr)
    239     If beDate Then
    240     Else
    241         errorMsg = "" & rowIndex & "行的数据项:" & valueCol.columnName & "不合法,请检查(例如:20120101)!"
    242         writeLog (errorMsg)
    243         CheckIsYmDate = False
    244         Exit Function
    245     End If
    246     CheckIsYmDate = True
    247 End Function
    248 '比较两个日期大小
    249 'date1>date2 返回1
    250 'date1=date2 返回0
    251 'date1<date2 返回-1
    252 '其他返回2
    253 Function compareDate(dateStr1, dateStr2)
    254     Dim date1 As Date
    255     Dim date2 As Date
    256     If Len(dateStr1) <> 8 Or Len(dateStr2) <> 8 Then
    257         compareDate = 2
    258         Exit Function
    259     End If
    260     
    261      
    262     If IsNumeric(dateStr1) And IsNumeric(dateStr2) Then
    263     Else
    264         compareDate = 2
    265         Exit Function
    266     End If
    267     
    268     date1 = Left(dateStr1, 4) & "/" & Mid(dateStr1, 5, 2) & "/" & Right(dateStr1, 2)
    269     date2 = Left(dateStr2, 4) & "/" & Mid(dateStr2, 5, 2) & "/" & Right(dateStr2, 2)
    270     If date1 - date2 > 0 Then
    271         compareDate = 1
    272     ElseIf date1 - date2 = 0 Then
    273         compareDate = 0
    274     Else
    275         compareDate = -1
    276     End If
    277 End Function
    278 '检查必填项
    279 '空时返回0
    280 '不为空时返回1
    281 Function checkRequired(rowIndex, columnIndex)
    282     '表头内容
    283     Dim valueTitle As String
    284     '单元格内容
    285     Dim cellValue As String
    286     
    287     valueTitle = Sheets(valueSheetName).Cells(1, columnIndex)
    288     
    289     cellValue = Sheets(valueSheetName).Cells(rowIndex, columnIndex)
    290     If cellValue = "" Then
    291          checkRequired = 0
    292          errorMsg = "" & rowIndex & "行的数据项:" & valueTitle & "不能为空,请填写!"
    293          writeLog (errorMsg)
    294     Else
    295         checkRequired = 1
    296     End If
    297 End Function
    298 '检查身份证件号码是否合法
    299 '不合法,返回0
    300 '合法,返回1
    301 '15位 升级18位
    302 Function IDcheck(ID)
    303     Dim s, i As Integer
    304     Dim e, z As String
    305     '----------------------------身份证号码合法性检查---------------------------------------
    306     If Not (Len(ID) = 18 Or Len(ID) = 15) Then                                            '位数检验
    307        IDcheck = 0
    308        Exit Function
    309        Else
    310        If Len(ID) = 15 Then ID = Left(ID, 6) & "19" & Right(ID, 9)
    311        If IsNumeric(Left(ID, 17)) = False Or InStr(ID, ".") > 0 Then                      '字符检验
    312           IDcheck = 0
    313           Exit Function
    314        End If
    315        On Error Resume Next                                                               '日期检验
    316        If DateValue(Mid(ID, 7, 4) & "-" & Mid(ID, 11, 2) & "-" & Mid(ID, 13, 2)) < 1 Or _
    317           DateValue(Mid(ID, 7, 4) & "-" & Mid(ID, 11, 2) & "-" & Mid(ID, 13, 2)) > Date Then
    318           IDcheck = 0
    319           Exit Function
    320        End If
    321     End If
    322      '-----------------------------校验码的生成及检查----------------------------------------
    323     s = 0
    324     For i = 1 To 17
    325        s = s + Val(Mid(ID, 18 - i, 1)) * (2 ^ i Mod 11)
    326     Next
    327     e = Mid("10X98765432", (s Mod 11) + 1, 1)                                           '生成校验码
    328     If Len(ID) = 18 Then
    329        z = UCase(Right(ID, 1))
    330        If z = e Then                                                                    '校验码对比
    331           IDcheck = 1
    332           Else
    333           IDcheck = 0                  '如果要返回校验码,请把本行语句改为:IDcheck = e
    334        End If
    335        Else
    336        IDcheck = ID & e                                                         '15位身份证号码升位
    337     End If
    338 
    339 End Function
    340 '校验电子邮箱
    341 Function matchEmail(value)
    342     Dim beIndex As Integer
    343     beIndex = InStr(value, "@")
    344     If beIndex = 0 Then
    345         matchEmail = False
    346         Exit Function
    347     End If
    348     matchEmail = True
    349 End Function
    350 '获取表头信息
    351 Function getValueColumCount(sheetName)
    352     index = 1
    353     Title = Sheets(sheetName).Cells(1, index)
    354     While Title <> ""
    355         index = index + 1
    356         Title = Sheets(sheetName).Cells(1, index)
    357     Wend
    358     getValueColumCount = index - 1
    359 End Function
    360 '删除日志
    361 Function clearLog()
    362     Sheets(msgSheetName).Columns(1).Delete
    363 
    364 End Function
    365 '写日志
    366 Function writeLog(content As String)
    367     Sheets(msgSheetName).Cells(curMsgRow, 1) = content
    368     curMsgRow = curMsgRow + 1
    369 End Function
    370 
    371 '获得总列数
    372 Function getColumnCount(sheetName)
    373     index = 1
    374     Title = Sheets(sheetName).Cells(1, index)
    375     While Title <> ""
    376         index = index + 1
    377         Title = Sheets(sheetName).Cells(1, index)
    378     Wend
    379     getColumnCount = index - 1 - 2
    380 End Function
    381 '回填数据信息
    382 Function fileXsExportModel(xep As TypeValueCell)
    383     bb = getExportCell(xep)
    384     If xep.cellContent <> "" Then
    385         If xep.cellName = "班号" Then
    386            If Len(xep.cellContent) = 7 Then
    387              Dim jyjdInt As Integer
    388              Dim bjStr As String
    389              Dim bjMess As String
    390              Dim njStr As String
    391              Dim njMess As String
    392              bjMess = ""
    393              jyjdInt = Mid(xep.cellContent, 5, 1)
    394              njStr = Mid(xep.cellContent, 1, 4)
    395              bjStr = Mid(xep.cellContent, 6, 2)
    396              If jyjdInt = 1 Then
    397                 njMess = "小学" & njStr & ""
    398                 bjMess = bjStr & "班(" & xep.cellContent & ")"
    399              ElseIf jyjdInt = 2 Then
    400                 njMess = "初中" & njStr & ""
    401                 bjMess = bjStr & "班(" & xep.cellContent & ")"
    402              ElseIf jyjdInt = 3 Then
    403                 njMess = "高中" & njStr & ""
    404                 bjMess = bjStr & "班(" & xep.cellContent & ")"
    405              End If
    406              xep.cellContent = bjMess
    407              Sheets(XsExportSheet).Cells(19, 3) = njMess
    408              Sheets(XsExportSheet).Cells(xep.exportRow, xep.exportColumn) = xep.cellContent
    409            End If
    410         Else
    411             If xep.cellName <> "学籍接续标识" Then
    412                 Sheets(XsExportSheet).Cells(xep.exportRow, xep.exportColumn) = xep.cellContent
    413             End If
    414         End If
    415     Else
    416          If xep.cellName <> "隐藏" Then
    417             Sheets(XsExportSheet).Cells(xep.exportRow, xep.exportColumn) = ""
    418          End If
    419     End If
    420 End Function
    421 '清空模板信息
    422 Function clearXsExportModel(xep As TypeValueCell)
    423     Dim columnName As String
    424     columnName = xep.cellName
    425     If columnName <> "学籍接续标识" Then
    426         bb = getExportCell(xep)
    427         Sheets(XsExportSheet).Cells(xep.exportRow, xep.exportColumn) = ""
    428     End If
    429     '年级清空
    430     Sheets(XsExportSheet).Cells(19, 3) = ""
    431 End Function
  • 相关阅读:
    四月十五号日报
    四月十一号日报
    四月八号日报
    五月六号日报
    CCSUOJ评测系统——第四次scrum冲刺
    CCSUOJ评测系统——第三次scrum冲刺
    CCSUOJ评测系统——第二次scrum冲刺
    C# Process 进程管理
    [C#][收集整理]
    [C#][收集整理]
  • 原文地址:https://www.cnblogs.com/xiehaofeng/p/11616948.html
Copyright © 2011-2022 走看看