首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何将excel文件中的特定单元格移动到python中具有openpyxl的新列

如何将excel文件中的特定单元格移动到python中具有openpyxl的新列
EN

Stack Overflow用户
提问于 2022-11-22 22:16:41
回答 1查看 54关注 0票数 0

我正试图把一些特定的细胞转移到一个指定的位置。如图所示,希望将单元格D3中的数据移动到E2,D5移动到E4,.就这样吧。它可以和开吡醇一起使用吗?任何建议都将不胜感激!!单击以查看图像

这是我到目前为止所得到的。它按规定起作用了。

代码语言:javascript
复制
wb=xl.load_workbook(datafile)
ws=wb['Sheet1']

#insert a new column #5
ws.insert_cols(idx=5,amount=1)
wb.save(datafile)

mr=ws.max_row
   
#move cells

for i in range (1,mr+1):
    v=ws.cell(row = i+1,column=4) 
    ws.cell(row=i,column =5).value=v.value

wb.save(datafile)
wb.close

谢谢你的帮助。

我修改了密码,效果很好。然后,我想删除不需要的行,但它没有工作。看起来它进入了一个无限的循环。代码显示在这里。我做错什么了?

代码语言:javascript
复制
wb=xl.load_workbook(datafile)
ws=wb['Sheet1']
#insert a new column #5
ws.insert_cols(idx=5,amount=1)

#Calculate total number of rows 
mr=ws.max_row
   
#move cells
for i in range (2,mr,2):
    ws.cell(row=i,column=5).value=ws.cell(row=i+1,column=4).value

#delete unwanted rows
for i in range (2,mr,2):
    ws.delete_rows(idx=i+1,amount=1)
    
wb.save(datafile)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-11-29 08:05:08

这是一个很好的努力。

下面是一些需要帮助的注释,以及关于如何跳过一行的注释。

  1. 通常只需要在所有编辑结束时保存工作簿一次,除非您正在复制多个副本。因此,插入命令之后的wb.save是不必要的。
  2. 这里不应该使用'mr + 1‘。只是值'mr‘很好,它与行计数相匹配。
  3. 只将值从一个单元格复制到另一个单元格时,不需要为一个中间变量赋值。将新的单元格值分配给一行中的现有单元格值,如图所示。但是,如果要使用变量“v”作为中间变量,则可以。
  4. wb.close应该是wb.close(),但是无论如何,它不会在此工作簿上执行任何操作,只会影响只读和只写模式,这是打开工作簿时的一种方法。所以不需要包括这句话。

若要跳过行,可以在范围内设置步进。步进是范围参数中的最后一个数字。所以

代码语言:javascript
复制
range(2, mr, 2)

意思是'i‘从2开始,以2的增量增加到最大值ws.max_row。

在这种情况下,由于最大值为7,我将为2、4和6。

..。

代码语言:javascript
复制
wb = xl.load_workbook(datafile)
ws = wb['Sheet1']

# insert a new column #5
ws.insert_cols(idx=5, amount=1)
# wb.save(datafile)  # <--- not necessary just save at the end

mr = ws.max_row

# move cells
# Move and delete the rows by making the changes from the bottom up
for i in reversed(range(2,mr,2)):
    ws.cell(row=i, column=5).value = ws.cell(row=i + 1, column=4).value
    ws.delete_rows(idx=i + 1, amount=1)

wb.save(datafile)
# wb.close  # <-- Not needed, should have brackets anyway

#

删除的问题是:当您删除一行时,下面的行会立即向上移动。因此,如果删除第2行,那么第3行就变成了第2行,这意味着从顶部开始,按照这样的模式向下删除通常是行不通的。

要删除未完成的行,可以更容易地反向运行循环,因此删除一行不会影响您尚未更改的行。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74539605

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档