最近要做的报告太多了,而且查数据还特麻烦,又要数据库sql语句查询,又要插入表格,想用python写一个自动生成报告的工具,但是在网上查资料,只找到其中一个,就是以excel表格里的数据写入到word模版里,但是这个还满足不了,因为报告里需要插入图片,又要数据库查询.还要插入excel表格..听起来就很复杂,不知道哪位大神能指导一下...
归档的python
from docx import Document
from docx.shared import Inches
import glob
from os import listdir
from docx.oxml.ns import qn
from docx.enum.text import WD_ALIGN_PARAGRAPH
def center_insert_img(doc,img):
"""插入图片"""
for paragraph in doc.paragraphs:
# 根据文档中占位符定位图片插入的位置
if '<<img1>>' in paragraph.text:
paragraph.text = paragraph.text.replace('<<img1>>', '')
run = paragraph.add_run('')
run.add_break()
run.add_picture(img, width=Inches(6.2))
def save_img_to_doc(img):
tpl_doc = r'D:\py\归档模版.docx'
res_doc = r'D:\py\归档后模版.docx'
document = Document(tpl_doc)
center_insert_img(document,img)
document.save(res_doc)
def main():
img = r'C:\Desktop\身份证\zh.jpg'
# img = glob.glob(r'C:\Desktop\身份证\*.jpg')
save_img_to_doc(img)
if __name__ == '__main__':
main()
写的这个比较简单(网上抄来的),就是在word模版里用占位符定位图片插入的位置,但是以上的代码只是能插入1张图片,本来我以为通配符*,可以进行批量插入,实则不行!这个程序就卡在这里了, 希望能有大神指导
第二个连接数据库执行语句导出为excel表格
#coding=utf-8
import cx_Oracle
cx_Oracle.init_oracle_client(lib_dir=r"\")
from openpyxl import Workbook
import xlwings as xw
#连接oracle,读取数据
def link_Oracle(wb):
create_wb(wb,'helloDatas.xlsx')
ws = wb.create_sheet(title='sheet1',index=0)
#用户名、密码、"ip/库名"
connection = cx_Oracle.connect("xxx","xxx","xxx:1521/xxx14")
cursor = connection.cursor()
sql = '''
select * from 表名 where 1=1
'''
cursor.execute(sql)
#row = cursor.fetchone()
#print(row)
list_A_B = []
#遍历游标
rowcount=1
for a in cursor:
rowcount = rowcount + 1
list_A_B.append(a)
#读取表字段值
db_title = [i[0] for i in cursor.description]
#遍历表字段值
for titleNum in range(len(db_title)):
A = ws.cell(row=1,column=1)
B = ws.cell(row=1,column=2)
C = ws.cell(row=1,column=3)
A.value = db_title[titleNum]
B.value = db_title[titleNum]
C.value = db_title[titleNum]
#读取数据到excel
for rowNum in range(1,rowcount):
A = ws.cell(row=rowNum,column=1)
B = ws.cell(row=rowNum,column=2)
C = ws.cell(row=rowNum,column=3)
#list_A_B索引从0开始,所以-1,list中存的是tuple,后面[0]获取的是tuple中的对应元素
A.value = list_A_B[rowNum-1][0]
B.value = list_A_B[rowNum-1][1]
C.value = list_A_B[rowNum-1][2]
cursor.close()
connection.close()
wb.save('helloDatas.xlsx')
#创建Excel
def create_wb(wb,filename):
wb.save(filename=filename)
print ("新建Excel:"+filename+"成功")
if __name__ == '__main__':
wb = Workbook()
link_Oracle(wb)
#打开文件设置表头
app=xw.App(visible=True,add_book=False)
#打开excel表
wb=app.books.open('helloDatas.xlsx')
#插入第一行
sht = wb.sheets['Sheet1']
sht.api.Rows(1).Insert()
#设置第一行A1值
sht.range('A1').value = '单元值'
wb.save()
wb.close()
app.quit()
这个也是网上找资料抄的....菜鸟就只能抄... 这个已经成功执行,但是如果我执行多个语句,查询多个值,写入excel里,那应该如何操作?
还有最后一个,就是在word指定位置插入excel的表格了,我在网上找了很多...不是不能执行,就是报错误... 这个也请大神帮忙解答...感谢 感谢
不知道你是不是没有编程经验,不过大家不会有时间帮你写代码的,我的回答偏描述,看能不能帮到你:
第一个问题,glob.glob只是读取文件列表,要插入的话加一个循环把列表中的图片读进来再插入;
第二个问题,首先抽出连接数据库的部分,然后把执行sql语句的部分抽象成一个函数,每次传入sql语句后执行,最后在主函数中调用一次连接数据库,再多次调用执行sql语句的函数;
第三个问题,...要自己动手写,调试错误,api应该都是有的。