python自动化生成报告

新手上路,请多包涵

最近要做的报告太多了,而且查数据还特麻烦,又要数据库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的表格了,我在网上找了很多...不是不能执行,就是报错误... 这个也请大神帮忙解答...感谢 感谢

阅读 2k
1 个回答

不知道你是不是没有编程经验,不过大家不会有时间帮你写代码的,我的回答偏描述,看能不能帮到你:
第一个问题,glob.glob只是读取文件列表,要插入的话加一个循环把列表中的图片读进来再插入;
第二个问题,首先抽出连接数据库的部分,然后把执行sql语句的部分抽象成一个函数,每次传入sql语句后执行,最后在主函数中调用一次连接数据库,再多次调用执行sql语句的函数;
第三个问题,...要自己动手写,调试错误,api应该都是有的。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题