请教各位高人,使用 openpyxl 写入 excel 数据时,自己的方法太笨拙,有没有更简单的语句来实现?谢谢啦!

yoyofox2003 2018-05-13 10:37:37
各位高人:
大家好。小弟最近在使用 Python 读取 Excel 数据,然后写入到另一个 sheet 时,遇到个问题,想请教一下各位朋友。
详细请看这里:

环境: Python 2.7 和 openpyxl

目标: 将 sheet 1 里面的几个 日本汽车公司 筛选出来,写入到 sheet 2 里面。详见这里图片。
实际上,我从代码上已经实现了这一效果。但问题是,感觉自己在 ”写入 sheet 2” 时,使用的方法太笨拙:只会一列、 一列
的写入,这样使用了 三个for循环 才 ”按列” 写入到 sheet 2 里面。

问题: 现在就是想请教一下各位,怎样可以逐行写入,少用几个 for 循环来写入 sheet 2 ?具体请看下面的完整代码。



下面贴上完整的代码以及里面相应的注解,已调试通过,可以实现效果。

import openpyxl

my_excel = openpyxl.load_workbook("f:\\456.xlsx")
my_sheet = my_excel.worksheets[0]
my_sheet_2 = my_excel.worksheets[1]

fields = []
data = []
tmp_list = []

[color=#0000FF]# 下面这里是先从 sheet 1 获取表头的三个字段 "ID", "Company", "Country",保存到 名为 fileds 的列表里面。[/color]
for i in range(1, my_sheet.max_column + 1):
aa = str(my_sheet.cell(row = 1, column = i).value)

fields.append(aa)

print fields
print "\n"

[color=#0000FF]# 下面这里是先从 sheet 1 读取表头之外的所有数据(即汽车公司的 ID,公司名称 和 所属国家),保存到 名为 data 的列表里面。[/color]
for j in range(2, my_sheet.max_row + 1):

tmp_list = []

for k in range(1, my_sheet.max_column + 1):

bb = str(my_sheet.cell(row = j, column = k).value)

tmp_list.append(bb)

data.append(tmp_list)

print data



# 下面这里是从刚刚保存的 data 列表里面,筛选出 日本汽车公司的 数据,先保存到名为 MIG 的列表里面。
MIG = []

for iterm in data:

if ('Japan' in iterm[2]):

MIG.append(iterm)

print MIG


# 下面是,向 sheet 2 先写入表头 “ID”,“Company” 和 “Country” 这三个字段
for i in range(1,4):

my_sheet_2.cell(row = 1, column = i).value = my_sheet.cell(row = 1, column = i).value


# 下面,使用三个 for 循环,按列,将 MIG 里面的数据按列写入 sheet 2 里面。现在就是这里感觉太笨拙,使用了三个 for 循环、按列写入。能否有更简单的语句来实现?
for i in range(1,5):

my_sheet_2.cell(row = i + 1, column = 1).value = MIG[i-1][0]

for i in range(1,5):

my_sheet_2.cell(row = i + 1, column = 2).value = MIG[i-1][1]

for i in range(1,5):

my_sheet_2.cell(row = i + 1, column = 3).value = MIG[i-1][2]

my_excel.save('f:\\456.xlsx')

...全文
769 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
yoyofox2003 2018-05-14
  • 打赏
  • 举报
回复
我刚才想了一下,"陈年椰子" 和 "Chaleaoch_exist" 你们给出的这两种方法,实际已经解决了问题。感谢 "陈年椰子" 给出的 读取的同时即写入 的方法,和 "Chaleaoch_exist" 给出的 sheet.append(data) 方法。 我根据你们刚才给出的这两种方法,修改了自己的代码,修改之后的代码简洁了不少,读起来更容易理解,而且都已经调试通过。谢谢!
yoyofox2003 2018-05-14
  • 打赏
  • 举报
回复
你好,你刚才说的 sheet.append() 方法,我调试了一下。但是仍有个问题想问下:使用 sheet.append() 时,怎样指定写入到哪一行里面呢现在默认的好像就是只写入到 sheet 里面的第1行。 我刚是这样调试的: 完整代码详见这里: import openpyxl a = ['1','Toyota','Japan'] my_excel = openpyxl.load_workbook("C:\\new.xlsx") my_sheet = my_excel.worksheets[0] my_sheet.append(a) my_excel.save("C:\\new.xlsx") 打开 "new.xlsx",显示:
冯斯特罗 2018-05-14
  • 打赏
  • 举报
回复
你的例子没仔细看, 按行写入是有现成的api的.
# 添加一行
row = [1 ,2, 3, 4, 5]
sheet.append(row)
yoyofox2003 2018-05-14
  • 打赏
  • 举报
回复
谢谢你给出的这一建议方法,我现在正在调试。另外,还是想问一下,若是一次将所有数据读出,然后怎样 "按行" 将代码里面名为 MIG 的列表 写入 Sheet 2 呢?我自己的代码里面是使用 "按列" 的方法将名为 MIG 的列表写入 sheet 的,这样用了 3 个 for 循环,感觉很繁琐。
陈年椰子 2018-05-14
  • 打赏
  • 举报
回复
如果没有其他数据处理,仅仅这个过程。 建议读取数据的同时,直接写入。

37,743

社区成员

发帖
与我相关
我的任务
社区描述
JavaScript,VBScript,AngleScript,ActionScript,Shell,Perl,Ruby,Lua,Tcl,Scala,MaxScript 等脚本语言交流。
社区管理员
  • 脚本语言(Perl/Python)社区
  • WuKongSecurity@BOB
加入社区
  • 近7日
  • 近30日
  • 至今

试试用AI创作助手写篇文章吧