python读写Excel有xlwt和xlrd库,但是:
xlwt只能写新的单元格,不能更新已写过的单元格;
xlrd只能读已有内容的单元格,未写内容的单元格读不了。
方案:用xlutils.copy库,可以实现写新的单元格,和更新新入已有内容的单元格。
rb = xlrd.open_workbook(filename)
wb = copy(rb)
ws = wb.get_sheet(sheetname)
ws.write(x,y,content)
python读PDF表格pdfplumber库好用
现有需求,读取中国现有化学品名录pdf表格,写入Excel。问题难点:
1.在原PDF中,在换页处一个单元格内容太长会在第二页另起一行,要把这种情况的两行合并成一行。
2.表头只要一行,后续页的表头行不再写入Excel。
代码:
import pdfplumber
import xlwt
import xlrd
from xlutils.copy import copy
filename='test'+'.xlsx'
sheetname='chemistry'
#先用xlwt建立个空xlsx
myWorkbook=xlwt.Workbook()
mySheet1=myWorkbook.add_sheet(sheetname)
myWorkbook.save(filename)
#再用xlrd和xlutils,进行写入,可进行单元格改写,xlwt是不行的
rb = xlrd.open_workbook(filename)
wb = copy(rb)
ws = wb.get_sheet(sheetname)
pdf = pdfplumber.open(r"C:\Users\Administrator\Desktop\名录2013年版.pdf")
table = pdf.pages[2].extract_table()
i,j=0,0
for l in table[0]:
ws.write(i,j,l)
j+=1
R=0
wb.save(filename)
for i in range(2,4058):
rb = xlrd.open_workbook(filename)
wb = copy(rb)
ws = wb.get_sheet(sheetname)
st=rb.sheet_by_name(sheetname)
page=pdf.pages[i]
table=page.extract_table()
flag=0
for r in range(R,R+len(table)-1):
if not table[1+r-R][0]:
flag=1
for c in range (len(table[0])):
ws.write(r,c,st.cell(r,c).value+table[r+1-R][c])
else:
if flag==1:
for c in range (len(table[0])):
ws.write(r,c,table[1+r-R][c])
else:
for c in range (len(table[0])):
ws.write(r+1,c,table[1+r-R][c])
R+=len(table)-1-flag
wb.save(filename)
网友评论