pdf对excel数据转换代码备份
一.综合测试代码
# -*- coding: utf-8 -*-
"""
Created on Wed Dec 2 15:46:02 2015
@author: Administrator
13-1-001之后的就发生读取发生错误,index=1976
index=4100发生错误
"""
import PyPDF2,os,openpyxl
from openpyxl.cell import get_column_letter,column_index_from_string
#打开Excel
#测试Excel
'''
wb_test=openpyxl.load_workbook('example.xlsx')
sheet_test=wb_test.active
for cellObj in sheet_test.columns[3]:
print(cellObj.value)
'''
#打开处理的Excel
wb=openpyxl.load_workbook('lijia2.xlsx')
sheet=wb.active
column=sheet.columns[2]
column_C_num=len(column) #4483个处理pdf
column_C_num-=1 #去掉标题,要减一
column_index=column_index_from_string('J') #J的索引号最终是10
column_K=sheet.columns[column_index] #要填写的K列
column_J=sheet.columns[column_index-1]
filenames_column_J=[] #最终要填写的文件名集合
for cellObj in column_J[1:]: #console显示不全前面内容,出现第一项不是第一个
#print(cellObj.value)
filenames_column_J.append(cellObj.value)
#Excel的J栏要处理pdf数量
column_J_num=len(filenames_column_J) #4483个处理pdf文档
if column_C_num!=column_J_num:
raise NameError
#1.搜集所有pdf文档
pdfFiles=[]
for filename in os.listdir('.'):#返回当前文件夹的所有文件:
if filename.endswith('.pdf'):
pdfFiles.append(filename)
pdfFile_num=len(pdfFiles) #文件夹pdf数量
#删除不需要的pdf文件
for filename in pdfFiles:
if filename not in filenames_column_J:
os.remove(filename)
#filename_error:Excel有的pdf文件,而路径找不到的pdf列表
filename_error=[]
for i in filenames_column_J:
if i not in pdfFiles:
filename_error.append(i)
#异常排除
if filename_error!=[] or pdfFile_num!=column_J_num:
raise NameError
'''
#当文件名由字母和数字组成时,文件路径排序会和Excel排序不一样
for i in range(column_J_num):
if pdfFiles[i]!=filenames_column_J[i]: #审核文件名是否一致
print ('wrongIndex:',i)
raise NameError
'''
#需要对Excel的K行建立一个字典,方便找到索引
#依次打开Excel对应的pdf文件名,写入cell
loop=column_J_num #循环次数要和文件名一致,1976及其之后的pdf,Python不能识别,只能处理到这一步
for i in range(loop):
#print ('file:',i)
#每100行显示print
if i%100==0:
print 'fileindex:',i
filename=filenames_column_J[i]
try:
pdfFileObj=open(filename,'rb')
pdfReader=PyPDF2.PdfFileReader(pdfFileObj)
pages=pdfReader.numPages #显示页数 在第4100行时读取pdfReader也会出错
except:
continue
#pageObj=pdfReader.getPage(0) #读取第一页的字符,第一页可读取
#content=pageObj.extractText() #输出第一页字符
#页面写入
content=""
for page in range(pages):
try:
pageObj=pdfReader.getPage(page) #读取第一页的字符,第一页可读取
content+=pageObj.extractText() #输出第一页字符
except:
continue
column_K[i+1].value=content #不用转换,可直接写入excel,第二页pdf也可写入excel
pdfFileObj.close()
#行高和行宽设定
sheet.height=12
sheet.column_dimensions['K'].width=20
#审核单元格里是否有空白,有多少空白
list_blank_cell=[]
for cell in column_K:
#print"cell.value:",cell.value
if cell.value==None:
list_blank_cell.append(cell)
print "list_blank_cell:",list_blank_cell
print "number of blank cell:",len(list_blank_cell)
#检测出28-3-0005.pdf对应的单元格是空白,经核实,无法打开此文档
wb.save('lijia2.xlsx')
二.单个样本测试
# -*- coding: utf-8 -*-
"""
Created on Fri Dec 4 14:05:39 2015
单文件数据转移测试
@author: Administrator
"""
import PyPDF2,os,openpyxl
from openpyxl.cell import get_column_letter,column_index_from_string
#打开处理的Excel
wb=openpyxl.load_workbook('example.xlsx')
sheet=wb.active
cell=sheet['K3']
filename="13-1-001.pdf"
pdfFileObj=open(filename,'rb')
try:
pdfFileObj=open(filename,'rb')
pdfReader=PyPDF2.PdfFileReader(pdfFileObj)
content=pageObj.extractText()
pageObj=pdfReader.getPage(0)
except: #不知道什么原因出错,except后面就不要加名字
print("wrong")
print("done")
'''
content=pageObj.extractText() #错误所在,文字无法提取,尝试换Python2版本,
#或把pdf降解到Word文档,再转换到Excel里
#print('content:',content)
cell.value=content
print("well done")
wb.save('example.xlsx')
content=""
for page in range(pages):
print ('page:',page)
pageObj=pdfReader.getPage(page) #读取第一页的字符,第一页可读取
print("ok")
content+=pageObj.extractText() #输出第一页字符
print('ok1')
column_K[i+1].value=content #不用转换,可直接写入excel,第二页pdf也可写入excel
pdfFileObj.close()
wb.save('example.xlsx')
'''
三,小样本测试
# -*- coding: utf-8 -*-
"""
Created on Wed Dec 2 15:46:02 2015
@author: Administrator
13-1-001之后的就发生读取发生错误,index=1976
小样本测试完毕,不能打开和提取文字的语句发生异常时,程序自动跳到下一行
"""
import PyPDF2,os,openpyxl
from openpyxl.cell import get_column_letter,column_index_from_string
#打开Excel
#测试Excel
'''
wb_test=openpyxl.load_workbook('example.xlsx')
sheet_test=wb_test.active
for cellObj in sheet_test.columns[3]:
print(cellObj.value)
'''
#打开处理的Excel
wb=openpyxl.load_workbook('example.xlsx')
sheet=wb.active
column=sheet.columns[2]
column_C_num=len(column) #4483个处理pdf
column_C_num-=1 #去掉标题,要减一
column_index=column_index_from_string('J') #J的索引号最终是10
column_K=sheet.columns[column_index] #要填写的K列
column_J=sheet.columns[column_index-1]
filenames_column_J=[] #最终要填写的文件名集合
for cellObj in column_J[1:]: #console显示不全前面内容,出现第一项不是第一个
#print(cellObj.value)
filenames_column_J.append(cellObj.value)
#Excel的J栏要处理pdf数量
column_J_num=len(filenames_column_J) #4483个处理pdf文档
if column_C_num!=column_J_num:
raise NameError
#1.搜集所有pdf文档
pdfFiles=[]
for filename in os.listdir('.'):#返回当前文件夹的所有文件:
if filename.endswith('.pdf'):
pdfFiles.append(filename)
pdfFile_num=len(pdfFiles) #文件夹pdf数量
#删除不需要的pdf文件
for filename in pdfFiles:
if filename not in filenames_column_J:
os.remove(filename)
#filename_error:Excel有的pdf文件,而路径找不到的pdf列表
filename_error=[]
for i in filenames_column_J:
if i not in pdfFiles:
filename_error.append(i)
#异常排除
if filename_error!=[] or pdfFile_num!=column_J_num:
raise NameError
'''
#当文件名由字母和数字组成时,文件路径排序会和Excel排序不一样
for i in range(column_J_num):
if pdfFiles[i]!=filenames_column_J[i]: #审核文件名是否一致
print ('wrongIndex:',i)
raise NameError
'''
#需要对Excel的K行建立一个字典,方便找到索引
#依次打开Excel对应的pdf文件名,写入cell
loop=column_J_num #循环次数要和文件名一致,1976及其之后的pdf,Python不能识别,只能处理到这一步
for i in range(loop):
#print ('file:',i)
#每50行显示print
if i%100==0:
print ('fileindex:',i)
filename=filenames_column_J[i]
try:
pdfFileObj=open(filename,'rb')
pdfReader=PyPDF2.PdfFileReader(pdfFileObj)
except:
continue
pages=pdfReader.numPages #显示页数
#pageObj=pdfReader.getPage(0) #读取第一页的字符,第一页可读取
#content=pageObj.extractText() #输出第一页字符
#页面写入
content=""
for page in range(pages):
try:
pageObj=pdfReader.getPage(page) #读取第一页的字符,第一页可读取
content+=pageObj.extractText() #输出第一页字符
except:
continue
column_K[i+1].value=content #不用转换,可直接写入excel,第二页pdf也可写入excel
pdfFileObj.close()
wb.save('example.xlsx')