找回密码
 立即注册
搜索
热搜: Excel discuz
查看: 305|回复: 3

[项目代码] 发票

[复制链接]

492

主题

7万

元宝

77万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
770449
发表于 2024-11-24 21:11:39 | 显示全部楼层 |阅读模式
  1. # 需要导入以下包
  2. import pdfplumber, os
  3. from openpyxl import Workbook
  4. import re

  5. wenjian = Workbook()  # 创建存放发票信息的文件
  6. D = wenjian.active
  7. D.column_dimensions['A'].width = 40
  8. D.column_dimensions['B'].width = 20
  9. D.column_dimensions['C'].width = 30
  10. D.column_dimensions['D'].width = 40
  11. D.column_dimensions['E'].width = 20
  12. title = ["开票号码","开票日期", "买方信息","卖方信息","价税合计" ]  # 先把要提取内容的抬头写入单元格
  13. for h in range(1, 6):
  14.     D.cell(1, h, title[h - 1])


  15. # 下面是三种发票内容提取函数,其他格式我还没遇到


  16. def write_anotherthing(B, text):
  17.     D = B.active
  18.     s1 = re.findall('发票号码\s*[::]\s*(\d+)', text, re.DOTALL)
  19.     s2 = re.findall('开票日期\s*[::]\s*(.*?)\n', text, re.DOTALL)
  20.     s3 = re.findall('价税合计.*?[¥¥]\s*([\d.]+)', text, re.DOTALL)
  21.     s4 = re.findall('[销售]\s*名称\s*[::]\s*(.*?)\s', text, re.DOTALL)
  22.     s5 = re.findall('[购买]\s*名称\s*[::]\s*(.*?)\s', text, re.DOTALL)

  23.     D.cell(i, 1, s1[0])
  24.     D.cell(i, 2, s2[0])
  25.     D.cell(i, 5, s3[0])
  26.     D.cell(i, 4, s4[0])
  27.     D.cell(i, 3, s5[0])

  28.     print(s5,s3)


  29. i = 2  # 从表格第二行开始写入数据
  30. # 把需要提取的票PDF放在一个文件夹,下面开始提取文件名
  31. name = '电子发票'  # 放待提取发票的文件夹名
  32. targetDir = fr"D:\{name}"  # 存放待提取发票的完整路径
  33. # 下面三行提取所有发票PDF的文件名
  34. files = []
  35. for (dirpath, dirnames, filenames) in os.walk(targetDir):
  36.     files += filenames
  37. # 开始读取每张发票内容,并判断属于什么类型发票
  38. for file in files:
  39.     with pdfplumber.open(fr"D:\{name}\{file}") as pdf:
  40.         # print(f"已轮到{file}")
  41.         print(f'D:\{name}\{file}')

  42.         A = pdf.pages[0]
  43.         text = A.extract_text()
  44.         search_string1 = "发票代码"
  45.         search_string2 = "票据代码"

  46.         write_anotherthing(wenjian, text)
  47.         # print(f"{file}已印")
  48.     i = i + 1
  49. # 提取好后保存文件
  50. wenjian.save(fr"D:\{name}\{name}.xlsx")
复制代码



回复

使用道具 举报

492

主题

7万

元宝

77万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
770449
 楼主| 发表于 2024-11-25 13:57:57 | 显示全部楼层
  1. import pdfplumber,os
  2. from openpyxl import Workbook

  3. wenjian = Workbook()  # 创建存放发票信息的文件
  4. D = wenjian.active
  5. D.column_dimensions['A'].width = 40
  6. D.column_dimensions['B'].width = 20
  7. D.column_dimensions['C'].width = 30
  8. D.column_dimensions['D'].width = 40
  9. D.column_dimensions['E'].width = 20
  10. title = ["开票号码","开票日期", "买方信息","卖方信息","价税合计" ]  # 先把要提取内容的抬头写入单元格
  11. for h in range(1, 6):
  12.     D.cell(1, h, title[h - 1])


  13. i = 2
  14. path = r'C:\Users\乾舟\PycharmProjects\pythonProject\LF\电子发票\\'
  15. list = []
  16. files = os.listdir(path)
  17. for file in files:
  18.     print(path+file)
  19.     with pdfplumber.open(path+file) as pdf:
  20.         page = pdf.pages[0]
  21.         text = page.extract_text()
  22.         # print(text)
  23.         xuhao = text.split('发票号码:')[1].split()[0]
  24.         # print(xuhao)
  25.         riqi = text.split('开票日期:')[1].split()[0]
  26.         # print(riqi)
  27.         goumai = text.split('购 名称:')[1].split()[0]
  28.         # print(goumai)
  29.         maijia = text.split('销 名称:')[1].split()[0]
  30.         # print(maijia)
  31.         total = text.split('(小写)¥')[1].split()[0]
  32.         # print(total)
  33.         list.append(xuhao)
  34.         list.append(riqi)
  35.         list.append(goumai)
  36.         list.append(maijia)
  37.         list.append(total)
  38.         wenjian.active.cell(i,1,xuhao)
  39.         wenjian.active.cell(i,2,riqi)
  40.         wenjian.active.cell(i,3,goumai)
  41.         wenjian.active.cell(i,4,maijia)
  42.         wenjian.active.cell(i,5,total)
  43.         print(list)
  44.         i = i +1
  45. wenjian.save('001.xlsx')
复制代码



回复

使用道具 举报

492

主题

7万

元宝

77万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
770449
 楼主| 发表于 2024-11-25 16:08:37 | 显示全部楼层
  1. import pdfplumber,os
  2. from openpyxl import Workbook

  3. wenjian = Workbook()  # 创建存放发票信息的文件
  4. D = wenjian.active
  5. D.column_dimensions['A'].width = 40
  6. D.column_dimensions['B'].width = 20
  7. D.column_dimensions['C'].width = 30
  8. D.column_dimensions['D'].width = 40
  9. D.column_dimensions['E'].width = 20
  10. title = ["开票号码","开票日期", "买方信息","卖方信息","价税合计" ]  # 先把要提取内容的抬头写入单元格
  11. for h in range(1, 6):
  12.     D.cell(1, h, title[h - 1])


  13. i = 2
  14. path = r'C:\Users\乾舟\PycharmProjects\pythonProject\LF\20241123\20241123\发票\\'
  15. list = []
  16. files = os.listdir(path)
  17. for file in files:
  18.     print(path+file)
  19.     with pdfplumber.open(path+file) as pdf:
  20.         page = pdf.pages[0]
  21.         text = page.extract_text()
  22.         # print(text)
  23.         xuhao = text.split('发票号码:')[1].split()[0]
  24.         # print(xuhao)
  25.         riqi = text.split('开票日期:')[1].split()[0]
  26.         # print(riqi)
  27.         goumai = text.split('购 名称:')[1].split()[0]
  28.         # print(goumai)
  29.         maijia = text.split('销 名称:')[1].split()[0]
  30.         # print(maijia)
  31.         total = text.split('(小写)¥')[1].split()[0]
  32.         total = float(total)
  33.         # print(total)

  34.         wenjian.active.cell(i,1,xuhao)
  35.         wenjian.active.cell(i,2,riqi)
  36.         wenjian.active.cell(i,3,goumai)
  37.         wenjian.active.cell(i,4,maijia)
  38.         wenjian.active.cell(i,5,total)
  39.         print(list)
  40.         i = i +1
  41. wenjian.save('001.xlsx')
复制代码



回复

使用道具 举报

492

主题

7万

元宝

77万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
770449
 楼主| 发表于 2024-11-25 16:08:48 | 显示全部楼层
  1. import pdfplumber,os
  2. from openpyxl import Workbook

  3. wenjian = Workbook()  # 创建存放发票信息的文件
  4. D = wenjian.active
  5. D.column_dimensions['A'].width = 30
  6. D.column_dimensions['B'].width = 30
  7. D.column_dimensions['C'].width = 20
  8. D.column_dimensions['D'].width = 40
  9. D.column_dimensions['E'].width = 20
  10. title = ["甲方","乙方", "金额" ]  # 先把要提取内容的抬头写入单元格
  11. for h in range(1, 4):
  12.     D.cell(1, h, title[h - 1])

  13. i = 2

  14. path = r'C:\Users\乾舟\PycharmProjects\pythonProject\LF\20241123\20241123\合同\\'
  15. list = []
  16. files = os.listdir(path)
  17. for file in files:
  18.     print(path+file)
  19.     with pdfplumber.open(path+file) as pdf:
  20.         page = pdf.pages[1]
  21.         text = page.extract_text()
  22.         print(text)
  23.         print('---'*20)
  24.         jiafang = text.split('下简称甲方):')[1].split()[0]
  25.         print(jiafang)
  26.         yifang = text.split('简称乙方):')[1].split()[0]
  27.         print(yifang)
  28.         total = text.split('合计 ')[1].split()[0]
  29.         print(total)
  30.         total= float(total)
  31.         wenjian.active.cell(i,1,jiafang)
  32.         wenjian.active.cell(i,2,yifang)
  33.         wenjian.active.cell(i,3,total)

  34.         i = i +1
  35. wenjian.save('002.xlsx')
复制代码



回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|五花八门论坛 ( 豫ICP备15031300号-3 )

GMT+8, 2024-12-22 01:20 , Processed in 0.084492 second(s), 26 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表