zoukankan      html  css  js  c++  java
  • python制作简单excel统计报表2之操作excel的模块openpyxl简单用法

    python制作简单excel统计报表2之操作excel的模块openpyxl简单用法

    # coding=utf-8
    
    from openpyxl import Workbook, load_workbook
    from openpyxl.drawing.image import Image
    from openpyxl.styles import Font,colors
    from datetime import datetime
    
    import MySQLdb
    
    class ExcelUtils(object):
        """
        pip install openpyxl
        pip install pillow
    pip install mysqlclient 参考文档:https://openpyxl.readthedocs.io/en/stable
    """ def __init__(self): self.wb = Workbook() # 激活表单 self.ws = self.wb.active self.ws_two = self.wb.create_sheet('我的表单') self.ws.title = '你的表单' self.ws.sheet_properties.tabColor = 'ff000000' self.ws_three = self.wb.create_sheet() def do_sth(self): # 插入数据 self.ws['A1'] = 66 self.ws['A2'] = '你好' self.ws['A3'] = datetime.now() # 批量插入数字 for row in self.ws_two['A1:E5']: for cell in row: cell.value = 2 # 对数据进行求和 self.ws_two['G1'] = '=SUM(A1:E1)' # 插入图片 # img = Image('./static/temp.jpg') # self.ws.add_image(img,'B1') # 合并单元格 self.ws.merge_cells('A4:E5') self.ws.unmerge_cells('A4:E5') # 插入文字 font = Font(sz=18,color = colors.RED) self.ws['A2'].font = font self.wb.save('./static/test.xlsx') def read_xls(self): """ 读取excel数据 :return: """ ws = load_workbook('./static/templates.xlsx') names = ws.get_sheet_names() print(names) # 获取sheet的三种方法 # wb = ws.active # wb = ws['北京大学统计'] wb = ws[names[0]] # 先读取行 for row in wb.rows: # 再读取列 for cell in row: print(cell.value) def get_conn(self): """ 获取mysql的连接""" try: self.conn = MySQLdb.connect( host="localhost", port=3306, user="root", password="root", db="user_grade", ) except MySQLdb.Error as e: print("Error %d:%s" % (e.args[0], e.args[1])) return self.conn def import_excel_todb(self): # 将excel中的内容导入数据库中 ws = load_workbook('./static/templates.xlsx') names = ws.get_sheet_names() # 获取数据的sheet wb = ws[names[0]] conn = self.get_conn() for (i,row) in enumerate(wb.rows): # 跳过标题部分 if i < 2: continue # 获取年份,最高分,平均分 year = wb['A{0}'.format(i+1)].value max = wb['B{0}'.format(i+1)].value avg = wb['C{0}'.format(i+1)].value # print(year, max, avg) cur = conn.cursor() # sql = "insert into score(year,max,avg) values(2005, 695, 468)" sql = "insert into score(year,max,avg) values({year},{max},{avg})".format(year = year,max = max,avg = avg) cur.execute(sql) conn.autocommit(True) conn.close() def export_db_toexcel(self): # 从数据库导数据到excel里面 # 从数据库中获取数据 conn = self.get_conn() cur = conn.cursor() cur.execute("select year,max,avg from score") # 获取所有数据 rows = cur.fetchall() # for row in rows: # print(row[0],row[1],row[2]) wb = Workbook() ws = wb.active ws.title = "高考成绩" for (i,row) in enumerate(rows): # 单个赋值 # ws['A{0}'.format(i+1)] = row[0] # ws['B{0}'.format(i+1)] = row[1] # ws['C{0}'.format(i+1)] = row[2] # 批量赋值 (ws['A{0}'.format(i+1)], ws['B{0}'.format(i + 1)], ws['C{0}'.format(i + 1)] ) = row wb.save("./static/myscore.xlsx") # 关闭数据库连接 conn.close() if __name__ == "__main__": client = ExcelUtils() # client.do_sth() # client.read_xls() # conn = client.get_conn() # client.import_excel_todb() client.export_db_toexcel()

     建表语句:

    CREATE TABLE `score` (
    `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
    `year` int(11) DEFAULT NULL,
    `max` int(11) DEFAULT NULL,
    `avg` int(11) DEFAULT NULL,
    PRIMARY KEY (`id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin;

    static/templates.xlsx

    插入数据库的信息:

  • 相关阅读:
    深入理解Linux修改hostname
    逆水行舟,不进则退
    TNS-12541: TNS:no listener TNS-12560 TNS-00511: No listener
    Linux Tomcat 6.0安装配置实践总结
    Database 'xxx' cannot be upgraded because it is read-only or has read-only file Make the database or files writeable, and rerun recovery.
    Tomcat启动找不到JRE_HOME的解决方法
    ORACLE触发器判断是否更新了某个字段
    MS SQL错误:SQL Server failed with error code 0xc0000000 to spawn a thread to process a new login or connection. Check the SQL Server error log and the Windows event logs for information about possible related problems
    MS SQL 错误:The operation could not be performed because OLE DB provider "SQLNCLI10" for linked server "test" was unable to begin a distributed transaction.
    ORA-01078: failure in processing system parameters & LRM-00109: could not open parameter file
  • 原文地址:https://www.cnblogs.com/reblue520/p/11187620.html
Copyright © 2011-2022 走看看