需求:本人最近做一个project,从log里查找对应文字段,并将之写入excel,并画图,将图保存成jpg文件,如果手工一个个处理会很麻烦,于是,python进入了视线。本人使用python的win32com库来做,最好是先将此过程录制成excel宏,然后根据宏来编写python程序。

  1 # $Revision: #1 $  2 # $DateTime: 2011/10/13 14:08:58 $  3 # $Author: yabi.c.chen $  4 import win32com.client  5 import re,os,glob,Image  6 win32c = win32com.client.constants  7 class GetProjectData:  8     def __init__(self,DataTypeList = []):  9         self.app = win32com.client.Dispatch('Excel.Application') 10         self.app.Visible = True 11         self.app.DisplayAlerts = False 12         self.app.AlertBeforeOverwriting = False 13         self.DataTypeList = DataTypeList 14         if self.DataTypeList: 15             for DataType in self.DataTypeList: 16                 self.DataType = DataType 17                 self.IsDrawChart = False 18                 if DataType == 'HMS': 19                     self.State = "WATERFALL"  20                     self.SheetName = ['VBAR_BY_ZONE','AFTER_ADJ_BPIC1','AFTER_ADJ_CLR','BEFORE_ADJ_BPIC2','AFTER_ADJ_BPIC2'] 21                     self.pat = "HMS MEASUREMENTS RESULT:.*?HMS MEASUREMENTS RESULT END" 22                     self.IsDrawChart = True 23                 elif DataType == 'BPI': 24                     self.State = "WATERFALL"  25                     self.SheetName = ['VBAR_BY_ZONE','AFTER_ADJ_BPIC1','AFTER_ADJ_BPIC2'] 26                     self.pat = "Hd     TPIC_Avg     TPIP_Avg     TPIM_Avg      BPI_Avg     BPIP_Avg     BPIM_Avg.*?EXECUTION INFO:" 27                 else: 28                     continue  29                 try: 30                     self.AddData2Xls() 31                 except: 32                     raise 33                  34     def __del__(self): 35         self.app.Quit() 36                     37     def DrawHMSChart(self,workbook,fileName,SerialNum,headCount): 38         AllJPGPath = os.path.dirname(fileName)+os.sep+'all.jpg' 39         Width = 536*(2000/536) 40         Height = 270*(len(self.SheetName)/(2000/536)+1) 41         AllJPG = Image.new('RGB',(Width,Height)) 42         AllJPG.paste(0xFFFFFF,(0,0,Width,Height))  43         for index,Sheet in enumerate(workbook.Sheets): 44             workbook.Sheets(Sheet.Name).Activate() 45             workbook.Sheets(Sheet.Name).Cells(1,1).Activate() 46             chart = Sheet.ChartObjects().Add(200,100,400,200).Chart      #chart = workbook.Charts.Add() 47             chart.ChartType = win32c.xlLineMarkers 48             chartTitle = SerialNum + '_' + Sheet.Name 49             chart.ApplyLayout(1) 50             chart.Axes(win32c.xlCategory).TickLabelPosition = win32c.xlLow 51             chart.ChartTitle.Text = chartTitle 52             chart.Axes(win32c.xlValue, win32c.xlPrimary).AxisTitle.Text = "HMS" 53             #chart.Axes(win32c.xlCategory).TickLabelSpacing = 5 54             chart.Axes(win32c.xlValue).MinimumScale = 0 55             chart.Axes(win32c.xlValue).MaximumScale = 8 56             chart.Axes(win32c.xlValue).MajorUnit = 0.5 57             for hd in range(headCount): 58                 series = chart.SeriesCollection().NewSeries() 59                 chart.SeriesCollection(hd+1).Name = "Hd %s" % hd 60                 chart.SeriesCollection(hd+1).Values = "='%s'!$C$%d:$C$%d" % (Sheet.Name,2+24*hd,25+24*hd) 61             chart.Location(Where = win32c.xlLocationAsObject,Name = Sheet.Name) 62             #Save Chart as picture to local 63             JPGFile = os.path.dirname(fileName)+os.sep+chartTitle+'.jpg' 64             Sheet.ChartObjects(1).Chart.Export(JPGFile,'jpg') 65             if index < 3: 66                 AllJPG.paste(Image.open(JPGFile),(index*536,0))  67             else: 68                 AllJPG.paste(Image.open(JPGFile),((index-3)*536,270))  69         AllJPG.save(AllJPGPath) 70         workbook.Save() 71                         72     def AddData2Xls(self): 73         filelist = glob.glob("*.txt") 74         for myfile in filelist: 75             SN = myfile[:8] 76             myfolder = os.path.splitext(os.path.basename(myfile))[0] 77             if not os.path.isdir(myfolder): 78                 os.mkdir(myfolder) 79             rawdata = self.GetRawData(myfile) 80             workbook = self.app.Workbooks.Add() 81             for index,data in enumerate(rawdata): 82                 worksheet = workbook.Sheets.Add(workbook.Sheets[workbook.Sheets.Count-1]) 83                 worksheet.Name = self.SheetName[index] 84                 Data = [] 85                 rowIndex = 0 86                 startIndex = int(1 and self.DataType != 'BPI' or 0) 87                 for linedata in data.splitlines()[startIndex:-1]: 88                     rowIndex +=1 89                     line = linedata.strip().split('\t') 90                     for colIndex in range(len(line)): 91                         try: 92                             line[colIndex] = float(line[colIndex]) 93                         except: 94                             pass 95                     Data.append(line) 96                 HD =  int(Data[-1][0].strip()[-1]) + 1        #Get Head count 97                 worksheet.Range(worksheet.Cells(1,1),worksheet.Cells(rowIndex,len(line))).Value = Data 98             for sh in workbook.Sheets: 99                 if sh.Name not in self.SheetName:              #Delete Sheet1,Sheet2 and Sheet3100                     workbook.Sheets(sh.Name).Delete()101             filename = os.getcwd()+os.sep+myfolder+os.sep+myfolder+'_'+self.DataType+'.xls'102             workbook.SaveAs(filename)103             if self.IsDrawChart and self.DataType == 'HMS':104                 self.DrawHMSChart(workbook,filename,SN,HD)105             workbook.Close()106     107     def GetRawData(self,Filename):108         f = open(Filename,'r')109         rawdata = str(f.read())110         #rawdata = rawdata[rawdata.find('- '*20 + self.State + ' : BEGIN   ' + ' -'*20):rawdata.find('- '*20 + self.State + ' : COMPLETE' + ' -'*20)]111         rawdatapat = '- '*20 + self.State + ' : BEGIN   ' + ' -'*20 + '(.*?)' + '- '*20 + self.State + ' : COMPLETE' + ' -'*20      112         rawdata = re.findall(rawdatapat,rawdata,re.DOTALL)113         data = re.findall(self.pat,rawdata[-1],re.DOTALL)114         f.close()115         return data116 117 if __name__ == '__main__':118     DataTypeList = ['HMS','BPI']119     GetProjectData(DataTypeList)

转载于:https://www.cnblogs.com/jurkymaomao/archive/2011/10/24/2223126.html

python处理excel相关推荐

  1. python拆分excel的sheet为单文件_python拆分Excel表格并发送邮件

    工作中经常会出现需要将数据按一定的条件拆分并分发给不同的收件人的情况,今天就来给大家分享一下如何使用python拆分Excel表格并分发邮件. 以下表(2019年下半年销量数据表)数据为例: 首先我们 ...

  2. python 读取excel文件 效率 时间 格式_python读取Excel文件中的时间数据

    在使用python读取Excel文件中的时间格式,碰到的时间格式转换问题: 读取这样的表格: 输出这样的数据结果: 然而这样的结果却不是我们想要的,我们需要的是这样的结果: 1.安装python官方库 ...

  3. python连接excel存放数据_有了这篇python操作Excel学习笔记,以后储存数据 办公很轻松!...

    最近在做一些数据处理和计算的工作,因为数据是以.csv格式保存的,因此刚开始直接用Excel来处理.但是做着做着发现重复的劳动其实并没有多大的意义,于是就想着写个小工具帮着处理.以前正好在一本书上看到 ...

  4. 太赞!Python和Excel终于可以互通了

    点击上方"AI遇见机器学习",选择"星标"公众号 重磅干货,第一时间送达 今天为大家分享一篇使用python将大量数据导出到Excel中的技巧心得,可以让Pyt ...

  5. python 表格格式输出_利用python对excel中一列的时间数据更改格式操作

    问题场景:需要将下列的交期一列的数据格式更改成2019/05/10 存货编码 尺寸 数量 交期 0 K10Y0190000X B140 200 2019-05-10 00:00:00 1 K10Y01 ...

  6. python excel增加一列_(用Python修改excel中一列数据)python新增一列

    python怎么从excel中读取数据? ⒈ #import παέτο import xlrd #Ρύθμι διαδρής path='C:\\Users\\jyjh\\Desktop\\data ...

  7. 使用PYTHON操作Excel的工具

    作者:卓晴博士,清华大学自动化系 更新时间:2020-07-25 Saturday Python和Excel都是分析处理数据的很强大的工具.如果将它们结合在一起则更加的强大.由于自己经常处理一些Exc ...

  8. Python 与 Excel结合

    很多开发者说自从有了 Python/Pandas,Excel 都不怎么用了,用它来处理与可视化表格非常快速.但是这样还是有一大缺陷,操作不是可视化的表格,因此对技能要求更高一点.近日,开发者构建了名为 ...

  9. excel python 形状_何使用Python操作Excel绘制柱形图

    开发工具,环境 PyCharm Python3 Office Excel 我们已经创建好了一张Excel表. 现在我们要根据已有的数据,往里面添加柱形图. 柱形图 BarChart 我们主要使用Bar ...

  10. python处理excel文件的模块_python处理Excel文件的几个模块

    在python中简单地处理excel文件,有几个相关的模块,各有千秋,本文将不定时收录. Python Excel网站收集了关于python处理excel文件的各种信息. [注意]使用python处理 ...

最新文章

  1. 快速排查feign.FeignException: status 500 …
  2. 盘点热门的目标检测开源方案(附论文+代码下载)
  3. python动态图-不就是用Python做个动态图吗?看招
  4. 开发中最常使用到那些设计模式?
  5. 团队作业第4次-项目需求分析
  6. OJ1087: 获取出生日期(多实例测试)(C语言)
  7. 删除js数组中制定内容
  8. 电脑各类快捷键及运行命令大全
  9. FireMonkey Control的Paint顺序
  10. 华为崔景龙:FNV是下一代MBB网络演进的技术驱动
  11. 如何在不被支持的termux下载gh
  12. 大数据驱动教育变革,产教融合呈现新高度——数据科学与大数据技术教育分论坛顺利召开...
  13. 百度地图开发 —— 去除百度地图左下角Logo
  14. Github下载速度慢 提升github下载速度最新解决方案 跟龟速说拜拜(持续更新 保证方案可行 建议收藏)
  15. JS - 解决鼠标单击、双击事件冲突问题(同时实现两种事件响应)
  16. ffmpeg 之 hls
  17. 详解EBS接口开发之销售订单挑库发放(转载)
  18. 小米摄像机 nas网络存储 群晖nas
  19. 企业如何与客户建立良好的客户关系
  20. 5 款最好的免费 SSD 数据恢复软件

热门文章

  1. 如何快速有效的复习教师资格证?
  2. 2018 秋招 百度二轮面试---血淋淋的经历写实
  3. mysql怎么集合查询_MySql集合查询
  4. unity overrideSprite的使用
  5. 微信请勿打扰昵称,个性好看,来看看!
  6. 【玩转CSS】盒子模型
  7. 毕业找工作,推荐9个做简历的网站。
  8. oracle unable to open file,ORA-27041:unable to open file
  9. MySQL报错:Incorrect string value: '\xE6\x9D\x82\xE8\xB4\xA7...' for column
  10. scala当中的文件操作、网络请求和隐式转换