EXCEL VBA调用adobe的api识别电子PDF发票里内容并登记台账

EXCEL VBA调用adobe的api识别电子PDF发票里内容并登记台账

实现效果如上
代码如下


使用须知:
1、工具--引用里勾选[Adobe Acrobat 10.0 Type Library]
2、安装Adobe Acrobat pro软件Dim sht As Worksheet
Function BrowseFolders() As String  '浏览目录Dim objshell As ObjectDim objFolder As ObjectSet objshell = CreateObject("Shell.Application")Set objFolder = objshell.BrowseForFolder(0, "请指定发票文件所在的文件夹", 0, 0)BrowseFolders = ""If Not objFolder Is Nothing ThenBrowseFolders = objFolder.Self.PathEnd IfSet objFolder = NothingSet objshell = Nothing
End FunctionSub cmd_getpdf_Click()Dim Pth As String '文件路径Dim PDFName As String, Wapp As Object, Mstr As StringApplication.ScreenUpdating = False'============================================Pth = BrowseFoldersIf Pth = "" ThenPth = Sheet1.Range("A9").TextEnd IfIf Pth = "" ThenPth = ThisWorkbook.PathEnd IfIf Right(Pth, 1) <> "\" Then Pth = Pth & "\"Sheet1.Range("A8") = "上次路径:"Sheet1.Range("A9") = PthSheet1.Range("a15:a10000") = ""If Dir(Pth & "*.pdf") = "" ThenMsgBox "指定目录没有找到发票PDF文件!"Sheet1.Range("A9") = ""Exit SubEnd If'Debug.Print Pth'============================================For Each sht In ThisWorkbook.SheetsApplication.DisplayAlerts = FalseIf sht.Name = "发票资料读取到Excel" Then sht.DeleteApplication.DisplayAlerts = TrueNextSet sht = Worksheets.Add(, Worksheets(Sheets.Count))sht.Name = "发票资料读取到Excel"sht.Range("A1:J1") = Array("发票号码", "发票日期", "货物或*名称", "规格型号", "单位", "数量", "单价", "金额", "税率", "税额")'============================================定义表头字段PDFName = Dir(Pth & "*.pdf")Do While PDFName <> ""Call Imp_Into_XL(Pth & PDFName)PDFName = DirLoopsht.Columns.AutoFitMsgBox "操作完成!"'============================================Application.ScreenUpdating = True
End SubSub Imp_Into_XL(PDF_File As String)Dim AC_PD As Acrobat.AcroPDDocDim AC_Hi As Acrobat.AcroHiliteListDim AC_PG As Acrobat.AcroPDPageDim AC_PGTxt As Acrobat.AcroPDTextSelectDim Yes_Fir As BooleanDim Ct_Page As LongDim i As Long, j As Long, k As Long, m As IntegerDim T_Str As StringDim Hld, XL, Brr(), RowNo%, Arr As Variant, sss%Dim Hld_Txt As VariantDim FPHM As String   '发票号码Dim FPRQ As String   '发票日期Dim GGXH As String   '规格型号Dim HWMC As String   '货物名称Dim SL_SV As String  '数量-税率Dim SL_SV_Temp As String  '数量-税率的临时存变量Dim HWDW As String   '货物单位Dim SL As String     '数量Dim DW As String     '单位Dim XH As String     '型号'====================================================定义字段类型Set AC_PD = New Acrobat.AcroPDDocSet AC_Hi = New Acrobat.AcroHiliteListAC_Hi.Add 0, 32767With AC_PD.Open PDF_FileCt_Page = .GetNumPagesIf Ct_Page = -1 ThenMsgBox "请确认发票文件 '" & PDF_File & "'".CloseGoTo h_endEnd IfFor i = 1 To 1 ' Ct_Page    '只考虑一个文档有一张发票的情形T_Str = ""Set AC_PG = .AcquirePage(i - 1)Set AC_PGTxt = AC_PG.CreateWordHilite(AC_Hi)If Not AC_PGTxt Is Nothing ThenWith AC_PGTxtFor j = 0 To .GetNumText - 1T_Str = T_Str & .GetText(j)Next jEnd WithEnd If'==========================================================If T_Str <> "" ThenHld_Txt = Split(T_Str, vbCrLf)FPHM = "": FPRQ = "":: GGXH = "": HWMC = ""For j = 0 To UBound(Hld_Txt)If InStr(Hld_Txt(j), "年月日") = 0 ThenIf InStr(Hld_Txt(j), "年") > 0 And InStr(Hld_Txt(j), "月") > 0 And InStr(Hld_Txt(j), "日") > 0 Then   '当字符串里含有年月日时Hld_Txt(j) = Repce2(Hld_Txt(j))Hld_Txt(j) = Trim(Replace(Hld_Txt(j), "开票日期:", ""))            '如果有"开票日期:"几个字,将其替换掉FPRQ = Left(Hld_Txt(j), 4) & "-" & Mid(Hld_Txt(j), 6, 2) & "-" & Mid(Hld_Txt(j), 9, 2)Exit ForEnd IfEnd IfNext jFor j = 0 To UBound(Hld_Txt)If TestNumber(Hld_Txt(j)) Then   '测试是否含有数字并以数字结尾的类型,加以判断If Len(Hld_Txt(j)) = 10 And TestCH(Hld_Txt(j)) = False Then '当字符串里没有年月日,但是以"2023 06 30"有空格,共有10个字符串位置形式存在时取得发票日期If InStr(Hld_Txt(j), " ") > 0 And UBound(Split(Hld_Txt(j), " ")) > 0 ThenFPRQ = "'" & RegR(Hld_Txt(j))    '取得发票日期Exit ForEnd IfEnd IfEnd IfNext jFor j = 0 To UBound(Hld_Txt)If TestNumber(Hld_Txt(j)) Then   '测试是否含有数字并以数字结尾的类型,加以判断Hld_Txt(j) = Trim(Replace(Hld_Txt(j), "发票号码:", ""))            '如果有"发票号码:"几个字,将其替换掉If Len(Hld_Txt(j)) = 8 Or Len(Hld_Txt(j)) = 20 Then          '//***限定要取出的发票号码为8位或者20位数字,否则发票号码取不出来If IsNumeric(Hld_Txt(j)) ThenIf InStr(Hld_Txt(j), ".") = 0 And InStr(Hld_Txt(j), ChrW(165)) = 0 ThenFPHM = Regs(Hld_Txt(j)) '取得8位或者20位的发票号码Exit ForEnd IfEnd IfEnd IfEnd IfNext jk = 0For j = 0 To UBound(Hld_Txt)If Len(Trim(Hld_Txt(j))) > 2 Then        '//***当字符数大于2,有的只有一个*,这种情形需要排除If Left(Trim(Hld_Txt(j)), 1) = "*" Or InStr(Hld_Txt(j), "详见") > 0 Then  '////当货物名称前面第一个字符是*号或者含有(详见)时Arr = Array("+", "<", ">")   '/***密码区有许多有这几个符号,遇到了就避开它sss = 0For m = LBound(Arr) To UBound(Arr)               '//***避免遇到密码区以*号开头,并且有Arr数组里符号的情形If InStr(Hld_Txt(j), Arr(m)) > 0 Then sss = sss + 1Next mIf sss = 0 ThenHld_Txt(j) = Trim(Hld_Txt(j))                '清除前后空格Hld_Txt(j) = StrConv(Hld_Txt(j), vbNarrow)   '全角转为半角Hld_Txt(j) = Repce(Hld_Txt(j))               '将字符串中多个空格变成一个If InStr(Hld_Txt(j), "%") > 0 Or Right(Trim(Hld_Txt(j)), 1) = "*" ThenFor m = UBound(Split(Hld_Txt(j), " ")) To 0 Step -1If TestCHNum(Split(Hld_Txt(j), " ")(m)) = False Or Trim(Split(Hld_Txt(j), " ")(m)) = "*" Then   '循环判定,取出有数字的数量-税额部分//有部分的金额和税额是*号If TestCH(Split(Hld_Txt(j), " ")(m)) = True And InStr(Hld_Txt(j), "不征税") = 0 Then Exit ForSL_SV = Split(Hld_Txt(j), " ")(m) & " " & SL_SVSL_SV_Temp = Split(Hld_Txt(j), " ")(m) & " " & SL_SV_Temp       '增加这个变量,存下原始的数量金额部分If InStr(SL_SV, "不征税") > 0 And Len(SL_SV) > 3 Then SL_SV = Left(SL_SV, InStr(SL_SV, "税")) & " " & Right(SL_SV, Len(SL_SV) - InStr(SL_SV, "税"))SL_SV = Trim(SL_SV)SL_SV_Temp = Trim(SL_SV_Temp)If m < UBound(Split(Hld_Txt(j), " ")) And Split(Hld_Txt(j), " ")(m) < 0 Then Exit ForElseIf TestCHNum(Split(Hld_Txt(j), " ")(m)) = True Then    '循环判定,如含有中文+数字,则需拆分SL_SV = RegSL(Split(Hld_Txt(j), " ")(m)) & " " & SL_SVSL_SV_Temp = RegSL(Split(Hld_Txt(j), " ")(m)) & " " & SL_SV_TempSL_SV = Trim(SL_SV)SL_SV_Temp = Trim(SL_SV_Temp)Exit ForEnd IfNext mSL_SV = Repce(SL_SV): SL_SV_Temp = Repce(SL_SV_Temp)  '用原始的数量金额部分来方便取出GGXHGGXH = Trim(Replace(Hld_Txt(j), SL_SV_Temp, ""))  '去掉数量-税额部分,下余的是规格型号   ////***前面做过变动后,这里用replace取不出余下的规格型号SL_SV_Temp = ""SL_SV = SL_JE(SL_SV)                         '数量-税额部分,不能用trim去掉前面空格If InStr(GGXH, "费") > 0 ThenHWMC = Left(GGXH, InStr(GGXH, "费"))         '货物名称,有费字的取费字前面字符(含费字)作为货物名称GGXH = Trim(Replace(GGXH, HWMC, ""))         '费字后面的是规格型号+单位ElseIf InStr(GGXH, " ") = 0 ThenHWMC = GGXH: GGXH = ""                   '规格型号没有包含空格时,货物名称就取ggxh,将原来的ggxh置空ElseHWMC = Split(GGXH, " ")(0)               '规格型号有包含空格时,货物名称取ggxh的第一个空格前的字符GGXH = Trim(Replace(GGXH, HWMC, ""))     '规格型号取除了货物名称后的余下的值End IfEnd IfIf InStr(GGXH, " ") = 0 Then          '当规格型号没有空格时********Select Case Len(GGXH)Case Is = 0                    '当费后面的字符数量为0时If Split(SL_SV, " ")(0) = "" Then     '当数据部分第一个字符为空时,货物名称就只为货物名称HWMC = HWMC & " " & " "Else                                '当数据部分第一个字符不为空时,货物名称取最后一个值为单位,次一个值为规格型号If Mid(HWMC, Len(HWMC) - 1, 2) = "服务" Or InStr(HWMC, "费") > 0 ThenHWMC = HWMC & " " & " "                '当货物名称最后两个字是"服务"时或含有"费",已经不能拆开了.ElseIf InStr(HWMC, "费") = 0 ThenDW = Right(HWMC, 1)                      '取右边一位做单位*****XH = Mid(HWMC, Len(HWMC) - 1, 1)HWMC = Left(HWMC, Len(HWMC) - 2)If InStr(HWMC, XH & DW) > 0 Or InStr(HWMC, XH) > 0 Or InStr(HWMC, DW) > 0 ThenHWMC = HWMC & XH & DW & " " & " "ElseHWMC = HWMC & " " & XH & " " & DWEnd IfEnd IfEnd IfCase Is >= 1                   '当费后面的字符数量为1或者大于1时DW = Right(GGXH, 1)                         '取右边一位做单位XH = Replace(GGXH, DW, "")               '余下的是型号If Split(SL_SV, " ")(0) = "" ThenHWMC = HWMC & " " & " "ElseIf XH <> "" ThenHWMC = HWMC & " " & XH & " " & DWElseHWMC = HWMC & " " & " " & DWEnd IfEnd IfEnd SelectElseIf InStr(GGXH, " ") > 0 Then       '当规格型号有空格时If Split(SL_SV, " ")(0) <> "" ThenHWDW = Split(GGXH, " ")(UBound(Split(GGXH, " ")))     '单位If Len(HWDW) > 1 ThenHWDW = Right(HWDW, 1)GGXH = Replace(GGXH, HWDW, "")GGXH = Replace(GGXH, " ", "_")HWMC = HWMC & " " & GGXH & " " & HWDWElseXH = Trim(Replace(GGXH, HWDW, ""))             '规格型号If XH = "" ThenIf Len(HWDW) > 1 ThenDW = Right(HWDW, 1)XH = Replace(HWDW, DW, "")HWMC = HWMC & " " & XH & " " & DWElseIf Len(HWDW) = 1 ThenHWMC = HWMC & " " & " " & DWEnd IfElseDW = HWDWXH = Trim(Replace(XH, " ", "_"))                 '去掉规格型号中的空格,用下横线连接HWMC = HWMC & " " & XH & " " & DWEnd IfEnd IfElseIf Split(SL_SV, " ")(0) = "" ThenXH = Replace(GGXH, " ", "_")                 '去掉规格型号中的空格,用下横线连接HWMC = HWMC & " " & XH & " "                 '没有单位,要加上表示单位的空格End IfEnd IfElseIf UBound(Split(Hld_Txt(j), " ")) <= 2 And InStr(Hld_Txt(j), "%") = 0 Then           '当品名与数量金额等不在同一行时HWMC = Hld_Txt(j)For m = j To UBound(Hld_Txt)If InStr(Hld_Txt(m), "%") > 0 Then SL_SV_Temp = Hld_Txt(m): Exit ForNext mFor m = UBound(Split(SL_SV_Temp, " ")) To 0 Step -1If TestCHNum(Split(SL_SV_Temp, " ")(m)) = False Or Trim(Split(SL_SV_Temp, " ")(m)) = "*" Then   '循环判定,取出有数字的数量-税额部分//有部分的金额和税额是*号If TestCH(Split(SL_SV_Temp, " ")(m)) = True And InStr(SL_SV_Temp, "不征税") = 0 Then Exit ForSL_SV = Split(SL_SV_Temp, " ")(m) & " " & SL_SV       '增加这个变量,存下原始的数量金额部分If InStr(SL_SV, "不征税") > 0 And Len(SL_SV) > 3 Then SL_SV = Left(SL_SV, InStr(SL_SV, "税")) & " " & Right(SL_SV, Len(SL_SV) - InStr(SL_SV, "税"))SL_SV = Trim(SL_SV)If m < UBound(Split(SL_SV_Temp, " ")) And Split(SL_SV_Temp, " ")(m) < 0 Then Exit ForElseIf TestCHNum(Split(SL_SV_Temp, " ")(m)) = True Then    '循环判定,如含有中文+数字,则需拆分SL_SV = RegSL(Split(SL_SV_Temp, " ")(m)) & " " & SL_SVSL_SV = Trim(SL_SV)Exit ForEnd IfNext mSL_SV_Temp = Replace(SL_SV_Temp, SL_SV, "")SL_SV = Repce(SL_SV) '用原始的数量金额部分来方便留下GGXHGGXH = Trim(Replace(SL_SV_Temp, SL_SV, ""))  '去掉数量-税额部分,下余的是规格型号   ////***前面做过变动后,这里用replace取不出余下的规格型号If Len(GGXH) = 0 Then         '当规格型号为空时DW = Split(HWMC, " ")(UBound(Split(HWMC, " ")))HWMC = Trim(Replace(HWMC, DW, ""))XH = Trim(Replace(HWMC, Split(HWMC, " ")(0), " "))HWMC = Trim(Replace(HWMC, XH, ""))If InStr(HWMC, " ") > 0 Then HWMC = Replace(HWMC, " ", "_")    '将货物名称里原有的空格用下划线代替If InStr(XH, " ") > 0 Then XH = Replace(XH, " ", "_")          '将型号里原有的空格用下划线代替If Len(XH) > 0 ThenHWMC = HWMC & " " & XH & " " & DWElseHWMC = HWMC & " " & " " & DWEnd IfElseIf Len(GGXH) > 0 Then                        '当规格型号不为空时If InStr(HWMC, " ") > 0 Then HWMC = Replace(HWMC, " ", "_")    '将货物名称里原有的空格用下划线代替If InStr(GGXH, " ") > 0 ThenDW = Split(GGXH, " ")(UBound(Split(GGXH, " ")))   '单位XH = Trim(Replace(SL_SV_Temp, DW, ""))                     '型号If InStr(XH, " ") > 0 Then XH = Replace(XH, " ", "_")          '将型号里原有的空格用下划线代替If Len(XH) > 0 ThenHWMC = HWMC & " " & XH & " " & DWElseHWMC = HWMC & " " & " " & DWEnd IfElseDW = Right(GGXH, 1)                      '取右边一位做单位*****XH = Replace(GGXH, DW, "")HWMC = HWMC & " " & XH & " " & DWEnd IfEnd IfEnd IfIf Split(SL_SV, " ")(0) = "" Then     '///*****************Hld_Txt(j) = HWMC & SL_SVElseHld_Txt(j) = HWMC & " " & SL_SVEnd IfHWMC = "": SL_SV = "":   SL = "": DW = "": XH = "": GGXH = "": HWDW = "": SL_SV_Temp = ""If UBound(Split(Hld_Txt(j), " ")) = 7 Thenk = k + 1ReDim Preserve Brr(1 To 10, 1 To k)Brr(1, k) = "'" & FPHM: Brr(2, k) = FPRQ       '编号及日期For m = 0 To UBound(Split(Hld_Txt(j), " "))Brr(3 + m, k) = Split(Hld_Txt(j), " ")(m)Next mElseGoTo 0End IfEnd IfEnd IfEnd IfNext jWith shtIf k = 0 Then GoTo 0RowNo = .Cells(65536, 1).End(3).Row + 1.Cells(RowNo, 1).Resize(UBound(Brr, 2), UBound(Brr)) = Application.Transpose(Brr)'  .Cells(RowNo, 11) = PDF_File              '将文件名称放在最后一列Erase BrrEnd WithElseIf T_Str = "" Then
0MsgBox PDF_File & "文件没有取到数据,请检查!", vbOKOnly, "ExcelHome"Sheet1.Cells(Sheet1.Cells(65536, 1).End(3).Row + 1, 1) = PDF_File    '将有问题的文件名称放在sheet1表中,方便查验Exit ForEnd If'===========================================================Next i.CloseEnd Withh_end:Set AC_PGTxt = NothingSet AC_PG = NothingSet AC_Hi = NothingSet AC_PD = Nothing
End Sub
Function Regs(STR)        '取发票号码
Dim reg As Object, mh As VariantSet reg = CreateObject("VBScript.RegExp")With reg.Global = True.Pattern = "(^\d{8}$|^\d{20}$)"    '是8位或者是20位Set mh = .Execute(STR)Regs = mh.Item(0).SubMatches.Item(0)End With
End Function
Function RegR(STR)        '取发票日期
Dim reg As Object, mh As VariantSet reg = CreateObject("VBScript.RegExp")With reg.Global = True.Pattern = "(^\d{4} \d{2} \d{2}$)"    '前四位年,中两位月,后两位日Set mh = .Execute(STR)RegR = Replace(mh.Item(0).SubMatches.Item(0), " ", "-")End With
End Function
Function RegSL(STR)        '取数量
Dim reg As Object, mh As VariantSet reg = CreateObject("VBScript.RegExp")With reg.Global = True'.Pattern = "[\u4e00-\u9fff](\d+\.\d+|\d+)"    '中文后面跟的数量为小数或整数.Pattern = "[\u4e00-\u9fff]([-]?\d+\.\d+$|[-]?\d+$)"    '中文后面跟的数量为小数或整数Set mh = .Execute(STR)RegSL = mh.Item(0).SubMatches.Item(0)End With
End Function
Function TestNumber(STR)        '测试是否最后是数字
Dim reg As ObjectSet reg = CreateObject("VBScript.RegExp")With reg.Global = True.Pattern = "^\d+\.\d+$|\d+$"TestNumber = .test(STR)End With
End Function
Function TestCH(STR)        '测试是否以中文开始
Dim reg As ObjectSet reg = CreateObject("VBScript.RegExp")With reg.Global = True.Pattern = "[\u4e00-\u9fff]+"TestCH = .test(STR)End With
End Function
Function TestCHNum(STR)        '测试是否以中文后跟随数字
Dim reg As ObjectSet reg = CreateObject("VBScript.RegExp")With reg.Global = True.Pattern = "[\u4e00-\u9fff]([-]?\d+\.\d+$|[-]?\d+$)"TestCHNum = .test(STR)End With
End Function
Public Function Repce(STR)        '多个空格变成一个
With CreateObject("VBSCRIPT.REGEXP").Global = True.Pattern = "\s+"Repce = .Replace(STR, " ")
End With
End Function
Public Function Repce2(STR)        '去掉中间空格
With CreateObject("VBSCRIPT.REGEXP").Global = True.Pattern = "\s+"Repce2 = .Replace(STR, "")
End With
End Function
Public Function SL_JE(STR)        '处理数量金额这部分Dim i%, str_tempSelect Case UBound(Split(STR, " "))Case Is >= 5For i = UBound(Split(STR, " ")) To UBound(Split(STR, " ")) - 4 Step -1str_temp = Split(STR, " ")(i) & " " & str_tempNext iSL_JE = Trim(str_temp)Case 4SL_JE = STRCase 2SL_JE = "   " & STREnd Select
End Function

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/647150.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

测试模型分类

测试模型 1. 概述 软件测试和软件开发一样,都遵循软件工程原理,遵循管理学原理,所以理解好软件的开发模型会便于理解测试模型. 软件测试的一般流程: 我们发现一般的软件测试流程和软件开发的流程一样,但是这样的流程测试介入的较晚,对于前期重大的bug很难修复.所以测试的流程…

网工内推 | 急招网工、运维,弹性工作,不加班,最高22K

01 Finogeeks 招聘岗位&#xff1a;运维工程师 职责描述&#xff1a; 1、负责FinClip小程序数字化管理系统产品的POC测试、交付部署、日常巡检工作&#xff0c;包括&#xff1a;交付运维方案、安装部署、数据对接调试、安全事件分析、日常巡检维护等 2、负责FinClip小程序数字…

QCustomPlot开源库使用

1.简介 QCustomPlot是用于绘图和数据可视化的Qt C 小部件。它没有进一步的依赖关系&#xff0c;并且有据可查。该绘图库专注于制作美观&#xff0c;出版质量的2D绘图&#xff0c;图形和图表&#xff0c;以及为实时可视化应用程序提供高性能。看一下“ 设置”和“ 基本绘图”教…

css的flex-direction: column;与direction: rtl;的作用

flex 个人理解 对子元素影响 设为 Flex 布局以后&#xff0c;子元素的float、clear和vertical-align属性将失效。 作用自身的样式 1. flex-direction 属性决定主轴的方向(即项目的排列方向) 2. flex-wrap属性定义,如果一条轴线排不下&#xff0c; 如何换行。 3. flex-flow属性…

猫头虎分享:已解决RuoYi-Vue3 项目代码生成器默认生成代码使用的Vue2模板代码问题与Vue2升级到Vue3解决方案

博主猫头虎的技术世界 &#x1f31f; 欢迎来到猫头虎的博客 — 探索技术的无限可能&#xff01; 专栏链接&#xff1a; &#x1f517; 精选专栏&#xff1a; 《面试题大全》 — 面试准备的宝典&#xff01;《IDEA开发秘籍》 — 提升你的IDEA技能&#xff01;《100天精通Golang》…

PHP中一些特征函数导致的漏洞总结

第一部分&#xff1a; 特征函数 接触到几个常用的函数&#xff1a; \\ \\\ md5 intval strpos in_array preg_match str_replacephp用这些函数实现过滤一些代码&#xff0c;漏洞可能有一些特性&#xff0c;利用这些特征代码进行对比&#xff1b;账号密码对比&#xff1b;强制检…

由于找不到msvcr120.dll,无法继续执行代码

一、msvcr120.dll作用介绍 msvcr120.dll文件是Microsoft Visual C Redistributable Package的一部分&#xff0c;它是一个动态链接库&#xff08;DLL&#xff09;文件。这个文件在Windows操作系统中提供C运行时库支持&#xff0c;包含了大量系统级函数和对象&#xff0c;这些函…

jetson-inference----docker内运行分类任务

系列文章目录 jetson-inference入门 jetson-inference----docker内运行分类任务 文章目录 系列文章目录前言一、进入jetson-inference的docker二、分类任务总结 前言 继jetson-inference入门 一、进入jetson-inference的docker 官方运行命令 进入jetson-inference的docker d…

数据结构——静态链表

1.定义&#xff1a; &#xff08;1&#xff09;单链表&#xff1a;各个结点散落在内存中的各个角落&#xff0c;每个结点有指向下一个节点的指针(下一个结点在内存 中的地址); &#xff08;2&#xff09;静态链表&#xff1a;用数组的方式来描述线性表的链式存储结构: 分配一…

【业务功能篇133】 Mysql连接串优化性能问题

rewriteBatchedStatementstrue开启了MySQL驱动程序的批量处理功能。 spring.datasource.urljdbc:mysql://localhost:3306/mydatabase?rewriteBatchedStatementstrue 在MyBatis Plus框架中&#xff0c;批量插入是一种高效的数据库操作方式。通过开启rewriteBatchedStatementstr…

Vue3 Teleport 将组件传送到外层DOM位置

✨ 专栏介绍 在当今Web开发领域中&#xff0c;构建交互性强、可复用且易于维护的用户界面是至关重要的。而Vue.js作为一款现代化且流行的JavaScript框架&#xff0c;正是为了满足这些需求而诞生。它采用了MVVM架构模式&#xff0c;并通过数据驱动和组件化的方式&#xff0c;使…

力扣刷MySQL-第八弹(详细讲解)

&#x1f389;欢迎您来到我的MySQL基础复习专栏 ☆* o(≧▽≦)o *☆哈喽~我是小小恶斯法克&#x1f379; ✨博客主页&#xff1a;小小恶斯法克的博客 &#x1f388;该系列文章专栏&#xff1a;力扣刷题讲解-MySQL &#x1f379;文章作者技术和水平很有限&#xff0c;如果文中出…

DAY18--learning English

一、积累 1.tobacco The disturbing History of Tobacco. 令人不安的烟草历史。 2.commodity How commodity Market work. 必需品商店是如何运作的. 3.cane Sugarcane --- 甘蔗 Sugarcane Farm --甘蔗农场 4.decay Tooth decay. 蛀牙 5.compensate Chinese gammer have evlove…

【Web前端实操13】实现100*100的盒子的阴影效果,阴影值自拟

相关知识点&#xff1a; 盒阴影 box-shadow 向框添加一个或多个阴影。 1 box-shadow: h-shadow v-shadow blur spread color inset; 值描述h-shadow必选&#xff0c;水平阴影的位置v-shadow必选&#xff0c;垂直阴影的位置blur可选&#xff0c;模糊距离spread可选&#xf…

Scrapy爬虫在新闻数据提取中的应用

Scrapy是一个强大的爬虫框架&#xff0c;广泛用于从网站上提取结构化数据。下面这段代码是Scrapy爬虫的一个例子&#xff0c;用于从新闻网站上提取和分组新闻数据。 使用场景 在新闻分析和内容聚合的场景中&#xff0c;收集和组织新闻数据是常见需求。例如&#xff0c;如果我…

史上最全知识图谱建模实践(上):本体结构与语义解耦

在“无需复杂图谱术语&#xff0c;7个原则搞定Schema建模”一文中&#xff0c;我们总结了知识建模最佳实践的7个指导原则。本文中&#xff0c;我们将分基础篇、进阶篇&#xff0c;针对不同业务场景的建模需求&#xff0c;由浅及深讲解基于SPG的知识建模的方法和案例&#xff0c…

JS进阶-深入面向对象(三)

看文章可以得到的收获&#xff1a; 1.在日常开发中&#xff0c;我们在声明一个数组对象后&#xff0c;没有声明有map&#xff0c;filter等方法&#xff0c;为什么可以调用这些方法呢&#xff1f; 2. 什么是面向过程思想&#xff0c;什么是面向对象思想呢&#xff1f; 3.JS中…

免费的 UI 设计资源网站 Top 8

今日与大家分享8个优秀的免费 UI 设计资源网站。这些网站的资源包括免费设计材料站、设计工具、字体和其他网站&#xff0c;尤其是一些材料站。它们是免费下载的&#xff0c;材料的风格目前很流行&#xff0c;适合不同的项目。非常适合平面设计WEB/UI设计师收藏&#xff0c;接下…

C#,数据检索算法之线性检索(Linear Search)的源代码

数据检索算法是指从数据集合&#xff08;数组、表、哈希表等&#xff09;中检索指定的数据项。 数据检索算法是所有算法的基础算法之一。 线性&#xff1f;听起来就“高大上”&#xff0c;其实&#xff0c;只不过就是挨个比较呗。 本文发布&#xff08;听起来很正式 &#x…

一个好用的服务器控制面板

简介 它是一个免费开源的管理面板工具&#xff0c;可以帮助你集中管理多个服务器和网站。Ajenti 支持 Linux、BSD、Mac OS X和Windows 等多个操作系统&#xff0c;并且可以通过一个直观的 Web 界面来完成各种系统管理任务。 相比于其他管理面板&#xff0c;Ajenti有以下几个优…