excel学习库

excel表格_excel函数公式大全_execl从入门到精通

Excel VBA 应用案例分享/电子发票信息读取/更新、补充、使用说明

本文于2023年6月1日首发于本人同名公众号,更多文章案例请搜索关注!

☆本期内容概要☆

  • 批量读取发票文件

  • 发票小助手使用说明

大家好,我是冷水泡茶,昨天我们分享了电子发票信息读取的文章(Excel VBA 应用案例分享/电子发票管理小助手/电子发票信息读取),由于时间紧迫,要赶在24点前发文,所以有些内容没能说透,比如使用说明什么的,加之功能方面又做了较大改进,所以今天的主题还是电子发票信息读取。

本来我只是想分享一下EXCEL VBA读取PDF文件、XML文件的方法与思路的,哪知越写越HIGH,好象都有点刹不住车了,索性好人做到底、送佛到西天,尽量完善一下吧,让一些不想研究VBA,但是又想使用这种功能的朋友能够用起来,减少点工作量。废话不多说,我们先看个动图感受一下:

功能简介:

1、可以单独读一张发票,或者读取一个文件夹下所有发票,当然选择标准就是扩展名为PDF或者OFD的文件,即使它不是发票,也会被当做一张发票来处理,只不过读不到内容而已。

2、主要发票信息:购销双方名称税号,发票代码号码,开票项目,金额税额价税合计。如果是20位发票号码的,仍然处理成12位发票代码+8位发票号码,如果票面有多个开票项目的,我们可能取到第一条,或者所有。

3、添加发票文件地址链接,方便我们点击直接打开发票查看核对。所以,如果把这个小助手当作发票管理工具正式使用的,那么电子发票文件应该是存放在相对固定的文件目录下。

4、读取PDF文件是比较慢的,所以加了一个提示框;而读取OFD文件非常快,为了能够充分解压,人为等待1秒。所以,建议大家尽量下载OFD格式的发票文件。另外,OFD格式的准确率应该是100%的,除非又出现新和版式。

5、有一张表wordContent,是暂存PDF发票文本的,如果读取PDF发票错误,可以查看文本,修改正则表达式。也可以提供给我处理。看他碍眼,可以隐藏。

6、读取结果不能保证100%准确,特别是PDF,如果用来登记发票信息的,需要核对。

7、如果PDF读不出来,wordContent又不是这张发票的内容的,可能是PDF文件无法转换成WORD,这种情况就没有办法了,只能手工登记。

下面我们看一下这次更新的内容:

1、增加了读取文件夹下所有发票的功能,其实就是加了一个过程ReadInvoiceFolder,主代码复制ReadInvoiceFile:

Sub ReadInvoiceFolder()    On Error Resume Next    Dim FileExtn As String    Dim iRow As Integer    Dim folderPath As String    Dim fileSystem As Object    Dim folder As Object    Dim file As Object    folderPath = FolderSelected    If folderPath = "" Then        MsgBox "请选择文件夹!"        Exit Sub    End If    If Not wContinue("即将开始读取文件夹下所有发票信息,时间较长,请耐心等待!") Then Exit Sub    Set fileSystem = CreateObject("Scripting.FileSystemObject")    Set folder = fileSystem.GetFolder(folderPath)    For Each file In folder.Files        FileExtn = GetExtn(file)        If FileExtn = ".pdf" Or FileExtn = ".ofd" Then            Counter = Counter + 1            currInvoiceFile = file            If currInvoiceFile = "" Then Exit Sub            InvoiceCode = ""            InvoiceNo = ""            SellerName = ""            SellerTaxID = ""            Amount = ""            TaxAmount = ""            invoiceDate = ""            ItemName = ""            BuyerName = ""            BuyerTaxID = ""            FileExtn = GetExtn(currInvoiceFile)            If FileExtn = ".pdf" Then                Call ReadPDFInvoiceInfo            ElseIf FileExtn = ".ofd" Then                Call ReadOFDInvoiceInfo            End If            '发票信息写入工作表            Sheets("Result").Activate            With ActiveSheet                iRow = .UsedRange.Rows.Count + 1                Cells(iRow, 1) = BuyerName                Cells(iRow, 2) = BuyerTaxID                Cells(iRow, 3) = invoiceDate                Cells(iRow, 4) = "'" & InvoiceCode                Cells(iRow, 5) = "'" & InvoiceNo                Cells(iRow, 6) = SellerName                Cells(iRow, 7) = "'" & SellerTaxID                Cells(iRow, 8) = ItemName                Cells(iRow, 9) = IIf(Amount = "", 0, CDbl(Amount))                Cells(iRow, 10) = IIf(TaxAmount = "", 0, CDbl(TaxAmount))                Cells(iRow, 11) = Cells(iRow, 9) + Cells(iRow, 10)                .Hyperlinks.Add Anchor:=.Cells(iRow, 12), _                    Address:=currInvoiceFile, _                    TextToDisplay:="打开" & FileExtn                Range(Cells(2, 9), Cells(iRow, 11)).NumberFormatLocal = "#,##0.00_ ;[红色]-#,##0.00 "            End With        End If    Next    '删除1-15列为空    Sheets("Result").Activate    Dim ws As Worksheet    Dim lastRow As Long    Set ws = ActiveSheet    lastRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row    For i = lastRow To 1 Step -1        If Application.CountA(ws.Range(ws.Cells(i, 1), ws.Cells(i, 15))) = 0 Then            ws.Rows(i).Delete        End If    Next     MsgBox "发票信息读取完毕,本次共读取【" & Counter & "】份,请仔细核对! " & Chr(10) & "若有错误,请手工修改!" & Chr(10) & "空白部分,请手工填写!"End Sub

代码解析:

(1)我们定义了一个获取文件夹路径的自定义函数FolderSelected,用来取得选择的文件夹地址:

Function FolderSelected()    With Application.FileDialog(msoFileDialogFolderPicker)        If .Show = -1 Then    'FileDialog 对象的 Show 方法显示对话框,并且返回 -1或0)。            FolderSelected = .SelectedItems(1)        Else            Exit Function        End If    End WithEnd Function

(2)然后我们就循环该文件夹下所有PDF和OFD文件,根据文件扩展名调用不同的读取过程。

(3)修改了发票文件路径显示文本为“打开.pdf”或“打开.ofd”,看起来更直观,可以看出是什么类型的文件。

(4)修改了金额、税额、价税合计的赋值,避免了空值出错的情况。

(5)设置金额、税额、价税合计的数字格式:

Range(Cells(2, 9), _Cells(iRow, 11)).NumberFormatLocal _= "#,##0.00_ ;[红色]-#,##0.00 "

(6)增加删除Result表空行的代码,删除空行要从最后一行开始循环向前删除,每次读取后都执行一次删除动作。

'删除1-15列为空Sheets("Result").ActivateDim ws As WorksheetDim lastRow As LongSet ws = ActiveSheetlastRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).RowFor i = lastRow To 1 Step -1    If Application.CountA(ws.Range(ws.Cells(i, 1), ws.Cells(i, 15))) = 0 Then        ws.Rows(i).Delete    End IfNext

2、增加了主界面,单个文件与文件夹的选项按钮。

3、正则表达式、XML节点等都有修改与更新,不细说了。

好,今天就到这吧,欢迎点赞、留言、分享,谢谢大家,我们下期再会。

☆猜你喜欢☆

本文使用 文章同步助手 同步,本文于2023年6月1日首发于本人同名公众号,更多文章案例请搜索关注!

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

«    2024年8月    »
1234
567891011
12131415161718
19202122232425
262728293031
控制面板
您好,欢迎到访网站!
  查看权限
网站分类
搜索
最新留言
    文章归档
      友情链接