ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 4242|回复: 4

python读写Excel浅尝

[复制链接]

TA的精华主题

TA的得分主题

发表于 2012-12-30 00:45 | 显示全部楼层 |阅读模式


本文就最近接触的一项工作中尝试和解决批量处理Excel文件作出总结分析和归纳,期待大家的指导。

任务描述:
1.统计BH.XLS里每个用户对应所有的编号,以逗号分隔
2.有3000+份FH_AREA.XLS,需要将上一步统计的编号,填到对应的用户后面。
3.给每一份FH_AREA.XLS第一行加上说明,并且合并单元格

数据如下:

BH.XLS.JPG

FH_AREA.XLS.JPG


20121230_Python读写Excel.rar (12.64 KB, 下载次数: 54)


因为需要操作的Excel表数量很多,而且对公式函数不熟,所以选择用Python来写了批处理的脚本来解决问题。

用到了xlrd来读excel,统计
pywin32来借助excel,修改之

参考:
1.python操作Excel: http://blog.solrex.org/articles/python-excel-lib.html


该贴已经同步到 tj051181的微博

TA的精华主题

TA的得分主题

 楼主| 发表于 2012-12-30 00:51 | 显示全部楼层
本帖最后由 tj051181 于 2012-12-30 00:58 编辑

1.xlrd
下载:http://pypi.python.org/pypi/xlrd
也可以用easy_installer安装。

优点:完全不需要安装ms office,而且读取速度很快
打开工作簿:
  1. workbook= xlrd.open_workbook(bh_xls)
复制代码
打开工作表:
  1. table = workbook.sheets()[0]  
复制代码
工作表的索引是从0开始。当然,也可以通过表名来打开。
获取工作表的有效行列数:
  1. nrows = table.nrows
复制代码
获取单元格值:
  1. p = table.cell(i,j).value
复制代码
值为Unicode
左上角是table.cell(0,0)

以下,是统计BH.XLS的代码片段:
  1. import xlrd
  2. path = os.path.abspath(os.path.dirname(sys.argv[0]))
  3. bh_xls = path + '/bh.xls'
  4. p_bh = {}

  5. '''
  6. 准备,读取BH表,统计
  7. '''
  8. def readbh():
  9.     data = xlrd.open_workbook(bh_xls)
  10.     table = data.sheets()[0]  
  11.     nrows = table.nrows
  12.     ncols = table.ncols
  13.     for i in range(1,nrows):
  14.         for j in range(5,ncols):
  15.             p = table.cell(i,j).value
  16.             if p != u"":
  17.                 bh = table.cell(i,1).value
  18.                 if p_bh.has_key(p):
  19.                     if p_bh[p].find(bh) == -1:
  20.                         p_bh[p] = p_bh[p] + u"," + bh
  21.                 else:
  22.                     p_bh[p] = bh
  23.                 del bh
  24.             del p
  25.             
  26.     del table
  27.     del data
复制代码


TA的精华主题

TA的得分主题

 楼主| 发表于 2012-12-30 01:03 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
2.pywin32
优点:可以直接创建ms excel application,类似宏的方式来处理excel文件

打开工作簿:
  1. workbook = xlsApp.Workbooks.Open(xls)
复制代码
打开工作表:
  1. sheet = workbook.Worksheets(1)
复制代码
这里工作表索引是从1开始。
修改单元格值:
  1. sheet.Cells(2,6).Value = '编号汇总'
复制代码
这里左上角是Cells(1,1)
合并单元格:
  1. sheet.Range('A1:F1').MergeCells = True
复制代码
代码片段,参考如下:
  1. from win32com.client import Dispatch
  2. '''
  3. 用WIN32调动Excel来处理
  4. '''
  5. xlsApp = Dispatch("Excel.Application")
  6. xlsApp.Visible = False
  7. xlsApp.DisplayAlerts = False


  8. print '共%d个Excel文件待处理,请稍后...' %len(xlss)
  9. for xls in xlss:
  10. ##    print gettime(),'start ',xls
  11.     workbook = xlsApp.Workbooks.Open(xls)
  12.     sheet = workbook.Worksheets(1)
  13.     rc = getrowcol(xls)
  14.     ##写标题
  15.     sheet.Cells(2,6).Value = '编号汇总'
  16.     sheet.Range('F3:F'+str(rc[0])).NumberFormatLocal='@'
  17.     sheet.Range('A1:F1').MergeCells = True
  18.     for i in range(3,rc[0]+1):
  19.         p_name = sheet.Cells(i,2).Value
  20.         if p_name:
  21.             p_name = ''.join(p_name.split())
  22.             u_p_name = unicode(p_name)
  23.             if p_bh.has_key(u_p_name):
  24.                 bhs = p_bh[u_p_name]
  25.                 sheet.Cells(i,6).Value = bhs
  26.             else:
  27.                 print 'error... ',p_name
  28.     del sheet
  29.     workbook.Close(SaveChanges=1)
  30.     del workbook
  31. ##    print gettime(),'finish ',xls
  32.    
  33. xlsApp.Quit()
  34. del xlsApp
复制代码

TA的精华主题

TA的得分主题

发表于 2012-12-30 13:37 | 显示全部楼层
不懂楼主分享的是一款软件还是自己的作品

TA的精华主题

TA的得分主题

 楼主| 发表于 2012-12-30 13:57 | 显示全部楼层
本帖最后由 tj051181 于 2012-12-30 14:01 编辑
dajiahaoxinku12 发表于 2012-12-30 13:37
不懂楼主分享的是一款软件还是自己的作品

用开源的环境来做Excel二次开发。
分享的是开发代码片段
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-12-27 03:37 , Processed in 0.037334 second(s), 12 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表