鱼C论坛

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

如何在openpyxl处理excel时创建数值与单元格对应的字典

[复制链接]
发表于 2018-2-3 12:28:42 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 2OLEGEND 于 2018-2-3 15:05 编辑

在使用python中openpyxl模块处理excel时,计算奇数行单元格相对分子质量,并将相对分子质量值和对应的分子式保存成一个字典,为什么会在创建字典时,出现这个错误:cannot convert dictionary update sequence element #0 to a sequence,该如何改正?下面将代码和excel截图发上来。其实我的目的是获得相对分子质量最大的值和其对应的分子式,可是构造字典一直出错,我的想法是将每一行的相对分子质量和对应的分子式构建成一个字典,然后将最大的值取出来,写入新的表单。

谢谢各位老师了,该怎么处理?




  1. import openpyxl
  2. import re

  3. def massMr(s):#定义计算相对分子质量的函数,
  4.    
  5.     list1 = ['O', 'N', 'C', 'H']
  6.     dict1 = {'O':16, 'N':14, 'C':12, 'H':1}
  7.    
  8.     a = re.findall('\d+', s)
  9.    
  10.     sum = 0
  11.    
  12.     for i in range(4):
  13.         
  14.         
  15.         sum += int(dict1[list1[i]]) * int(a[i])
  16.         
  17. #    print('相对分子质量为:%d'% sum)
  18.         
  19.     return sum

  20. wb = openpyxl.load_workbook('test.xlsx')
  21. ws = wb.get_active_sheet()
  22. #print(ws)
  23. sheet = wb.get_sheet_by_name('Sheet1')



  24. #print(sheet['A1'].value)
  25. for i in range(1, int(sheet.max_row) + 1, 2):#对奇数行进行迭代
  26.     for j in range(1,50):#对列进行迭代,之所以选50是因为这是测试版,最终的excel列可能较多
  27.         if sheet.cell(row = i, column = j).value != None:#单元格不为空,进行计算
  28.             cellMass = massMr(str(sheet.cell(row = i, column = j).value))
  29.             dict1 = dict((cellMass, str(sheet.cell(row = i, column = j).value)))
  30.             print(dict1)
  31.         else:#单元格为空,则跳出这个循环,进行下次循环
  32.             break
  33.     print('\n')
复制代码


这是excel的截图:
excel.JPG
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2018-2-3 19:16:17 | 显示全部楼层
各位老师,有没有知道问题的?谢谢了!!!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-2-4 12:57:05 | 显示全部楼层
各位老师,有没有帮忙看看的,谢谢啊!!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-27 17:39

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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