鱼C论坛

 找回密码
 立即注册
查看: 1843|回复: 2

[已解决]一个对excel的简单判断及操作方法请教

[复制链接]
发表于 2018-3-29 15:21:33 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 pharaoh21c 于 2018-3-29 19:08 编辑

各位老师,无耻小白想求教一个对excel操作的简单问题,我需要对附件excel进行如下操作:

1. 对"FCT"这一列中数字>20的行,将"In"和"Out"列加总至"Total"单元格
2. 对"FCT"这一列中数字<=20的行, "Total"单元格赋值"0"

特殊点(关键):
1. "FCT"等所有列位置都不固定(即可能这次为B列,下次表格被人改了变成C列D列了等等),因此首先需要判断"FCT"在哪一列;
2. 行数不固定(根据"Name"列来判断),如果使用循环函数的话,需要自动判断循环的次数

本人只会VBA,刚学习Python,恳请大师们帮忙贴一段Python代码让我学习一下(真实的数据和计算都要复杂很多,附件只是超级简化版)。

如果需要用到库,还请告知需要的库的名称。

万分感谢!
最佳答案
2018-3-29 16:38:18
本帖最后由 chakyam 于 2018-3-29 16:41 编辑

需要openpyxl

  1. import openpyxl
  2. workbook = openpyxl.load_workbook(r'Text_Func.xlsx')
  3. sheet = workbook.get_active_sheet()
  4. min_column = sheet.min_column
  5. max_column = sheet.max_column
  6. min_row = sheet.min_row
  7. max_row = sheet.max_row
  8. for i in range(min_column,max_column+1):
  9.         if sheet.cell(row = min_row,column = i).value == 'FCT':
  10.                 FCTcolumn = i
  11.         elif sheet.cell(row = min_row,column = i).value == 'Total':
  12.                 Totalcolumn = i
  13.         elif sheet.cell(row = min_row,column = i).value == 'In':
  14.                 Incolumn = i
  15.         elif sheet.cell(row = min_row,column = i).value == 'Out':
  16.                 Outcolumn = i
  17. for i in range(min_row+1,max_row+1):
  18.         if int(sheet.cell(row = i,column = FCTcolumn).value) > 20:
  19.                 Total = int(sheet.cell(row = i,column = Incolumn).value)+int(sheet.cell(row = i,column = Outcolumn).value)
  20.         else:
  21.                 Total = 0
  22.         sheet.cell(row = i,column = Totalcolumn).value = Total
  23. workbook.save(r'New_Text_Func.xlsx')
复制代码


不是很懂你说的BJ列是什么。。

Test_Func.zip

6.34 KB, 下载次数: 5

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2018-3-29 16:38:18 | 显示全部楼层    本楼为最佳答案   
本帖最后由 chakyam 于 2018-3-29 16:41 编辑

需要openpyxl

  1. import openpyxl
  2. workbook = openpyxl.load_workbook(r'Text_Func.xlsx')
  3. sheet = workbook.get_active_sheet()
  4. min_column = sheet.min_column
  5. max_column = sheet.max_column
  6. min_row = sheet.min_row
  7. max_row = sheet.max_row
  8. for i in range(min_column,max_column+1):
  9.         if sheet.cell(row = min_row,column = i).value == 'FCT':
  10.                 FCTcolumn = i
  11.         elif sheet.cell(row = min_row,column = i).value == 'Total':
  12.                 Totalcolumn = i
  13.         elif sheet.cell(row = min_row,column = i).value == 'In':
  14.                 Incolumn = i
  15.         elif sheet.cell(row = min_row,column = i).value == 'Out':
  16.                 Outcolumn = i
  17. for i in range(min_row+1,max_row+1):
  18.         if int(sheet.cell(row = i,column = FCTcolumn).value) > 20:
  19.                 Total = int(sheet.cell(row = i,column = Incolumn).value)+int(sheet.cell(row = i,column = Outcolumn).value)
  20.         else:
  21.                 Total = 0
  22.         sheet.cell(row = i,column = Totalcolumn).value = Total
  23. workbook.save(r'New_Text_Func.xlsx')
复制代码


不是很懂你说的BJ列是什么。。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-3-29 19:16:16 | 显示全部楼层


万分感谢!
抱歉写错了一点,"BJ"就是"FCT"列,原来的"BJ"列被我改了名称"FCT",帖子里忘了改了,现已修正。
我的本意是各列位置不固定(怕有同事将来改了文件列排序),需要先判断列位置在哪里,再判断这个列有多少行,再做循环计算。
您的写的程序好像不受我这个“笔误”的影响吧?多谢多谢!!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2026-3-9 21:17

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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