用Python整理Excel表格,利用python处理excel数据

  用Python整理Excel表格,利用python处理excel数据

  本文主要介绍Python office automation对Excel中的数据进行计算整理,并写成Word示例进行详细讲解。有需要的朋友可以借鉴一下,希望能有所帮助。祝大家进步很大,早日升职加薪。

  

前言

  在前几天的文章中,我们解释了如何从Word表格中提取指定的数据,并按照格式保存在Excel中。今天,我们将根据一位读者提出的真实需求,再次讲解如何使用Python从Excel中计算、整理数据并写入Word。其实不难,主要是以下两步:

  Openpyxl读取Excel获取内容,docx读写Word文件,开始吧!

  

需求确认

  首先,我们来看看需要处理的一些Excel数据。因为隐私,资料已经皮卡丘了。

  你可以看到有很多数据,有重复的数据。我们要做的就是按照一定的规则对每一列的数据进行计算和整理,并使用Python自动填充到Word中。一般要求如下

  以上只是部分要求,更多数据需要在word中填写!

  除了按照格式进行处理并存储在word中的指定位置之外,还有一个要求:最终输出的Word文件名需要按照一定的规则生成:

  好了,需求分析完了,接下来就看Python怎么解决了!

  

Python实现

  首先,我们使用Python来解析Excel。

  fromopenpyxlimportload _ workbook

  进口货

  #获取桌面的路径

  defGetDesktopPath():

  returnos . path . join(OS . path . expand user( ~ ), Desktop )

  Path=GetDesktopPath() /data/#构成文件夹的路径将在以后重用。

  workbook=load _ workbook(filename=path data . xlsx )

  Sheet=workbook.active#获取当前页面

  #可以通过代码得到数据范围,如果要批量循环迭代的话很方便。

  #获取数据范围

  打印(纸张.尺寸)

  #A1:W10

  Openpyxl可以通过以下方式读取单元格

  Cells=sheet [A13360A4] #返回A1-A4的4个单元格

  Cells=sheet[A]# Get列A。

  单元格=工作表[A:C]#获取列A-C

  单元格=sheet[5]#获取第5行

  #注意,如果上面提到的带有单元格的获取返回嵌套的祖先。

  强制细胞:

  打印(单元格[0])。value)#遍历单元格仍然需要取出祖先中的元素来获取值。

  #获取一个范围内的所有单元格

  #还可以使用iter_col返回列

  forrowinsheet.iter_rows(最小行=1,最大行=3,最小列=2,最大列=4):

  强制箭头:

  打印(单元格.值)

  知道了原理,我们就可以分析Excel中的数据了。

  #SQE

  SQE=表[Q2]。价值

  #供应商制造商

  供应商=表[G2]。价值

  #采购订单编号

  C2 _ 10=sheet [c23360c10] #返回cell.tuple对象。

  #列表推导背后也是如此。

  vC2_10=[str(cell[0].value)forcellinC2_10]

  #使用set简单的去掉重量然后使用,连接,填入单词形式。

  order_num=,。join(set(vC2_10))

  #用set简单重复数据删除后,与之连接,用word文件名命名。

  order_num_title=“”。join(set(vC2_10))

  #产品型号

  T2 _ 10=工作表[T2:T10]

  vT2_10=[str(cell[0].value)forcellinT2_10]

  ptype=“,”。join(set(vT2_10))

  #产品描述

  P2 _ 10=工作表[P2:P10]

  vP2_10=[str(cell[0].value)forcellinP2_10]

  信息=,。join(set(vP2_10))

  info_title = &.join(set(vP2_10))

  # 日期

  # 用datetime库获取今日时间以及相应格式化

  import datetime

  today = datetime.datetime.today()

  time = today.strftime(%Y年%m月%d日)

  # 验货数量

  V2_10 = sheet[V2:V10]

  vV2_10 = [int(cell[0].value) for cell in V2_10]

  total_num = sum(vV2_10) # 计算总数量

  # 验货箱数

  W2_10 = sheet[W2:W10]

  vW2_10 = [int(cell[0].value) for cell in W2_10]

  box_num = sum(vW2_10)

  # 生成最终需要的word文件名

  title = f{order_num_title}-{supplier}-{total_num}-{info_title}-{time}-验货报告

  print(title)

  通过上面的代码,我们就成功的从Excel中提取出来数据,这样Excel部分就结束了,接下来进行word的填表啦,由于这里我们默认读取的word是.docx格式的,实际上读者的需求是.doc格式文件,所以windows用户可以用如下代码批量转化doc,前提是安装好win32com

  

# pip install pypiwin32

  from win32com import client

  docx_path = path + 模板.docx

  # doc转docx的函数

  def doc2docx(doc_path,docx_path):

      word = client.Dispatch("Word.Application")

      doc = word.Documents.Open(doc_path)

      doc.SaveAs(docx_path, 16)

      doc.Close()

      word.Quit()

      print(\n doc文件已转换为docx \n)

  if not os.path.exists(docx_path):

      doc2docx(docx_path[:-1], docx_path)

  不过在Mac下暂时没有好的解决策略,如果有思路欢迎交流,好了有docx格式文件后我们继续操作Word部分

  

docx_path = path + 模板.docx

  from docx import Document

  # 实例化

  document = Document(docx_path)

  # 读取word中的所有表格

  tables = document.tables

  # print(len(tables))

  # 15

  确定好每个表格数后即可进行相应的填报操作,table的用法和openpyxl中非常类似,注意索引和原生python一样都是从0开始

  

tables[0].cell(1, 1).text = SQE

  tables[1].cell(1, 1).text = supplier

  tables[1].cell(2, 1).text = supplier

  tables[1].cell(3, 1).text = ptype

  tables[1].cell(4, 1).text = info

  tables[1].cell(5, 1).text = order_num

  tables[1].cell(7, 1).text = time

  上面代码完成Word中这一部分表格

  

  我们继续用Python填写下一个表格

  

for i in range(2, 11):

      tables[6].cell(i, 0).text = str(sheet[fT{i}].value)

      tables[6].cell(i, 1).text = str(sheet[fP{i}].value)

      tables[6].cell(i, 2).text = str(sheet[fC{i}].value)

      tables[6].cell(i, 4).text = str(sheet[fV{i}].value)

      tables[6].cell(i, 5).text = str(sheet[fV{i}].value)

      tables[6].cell(i, 6).text = 0

      tables[6].cell(i, 7).text = str(sheet[fW{i}].value)

      tables[6].cell(i, 8).text = 0

  tables[6].cell(12, 4).text = str(total_num)

  tables[6].cell(12, 5).text = str(total_num)

  tables[6].cell(12, 7).text = str(box_num)

  

  这里需要注意两个细节:

  

  • word写入的数据需是字符串,所以从Excel获取的数据需要用str格式化
  • 表格可能存在合并等其他情况,因此你看到的行数和列数可能不是真实的,需要用代码不断测试。

  按照上面的办法,将之前从Excel中取出来的数据一一填充到Word中对应位置就大功告成!最后保存一下即可。

  

document.save(path + f{title}.docx)

  print(\n文件已生成)

  

结束语

  回顾上面的过程,其实从需求和文件格式上看,这次文件的读写解析任务较复杂,码代码和思考时间会较久,所以当我们在考虑使用Python进行办公自动化之前需要想清楚这个问题:这次需要完成的任务是否工作量很多,或者以后长期需要进行,用Python是否可以解放双手?如果不是,实际上手动就可以完成,那么就失去了自动化办公的意义!

  点击打开源码地址

  以上就是Python办公自动化从Excel中计算整理数据并写入Word的详细内容,更多关于Python Excel数据写入Word的资料请关注盛行IT软件开发工作室其它相关文章!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: