【发布时间】:2019-05-20 03:11:41
【问题描述】:
我想制作一个使用 Openpyxl 自动执行 excel 任务的程序。我正在使用“枚举”打开一些文本文件,然后自动输入到 excel 文件中。
import os
os.chdir(r'F:\tes')
filenames = ["eb.txt", "ea.txt"]
for i, filename in enumerate(filenames):
file = open(filename, 'r')
text = file.read().replace('\u2014', '-').replace('—', '-')
start = 0
startcheck = True
end = 0
endcheck = True
for idx, letter in enumerate(text):
if text[idx:idx+4] == 'NPWP' and startcheck:
start = idx + 7
startcheck = False
if text[idx:idx+7] == 'Pembeli' and endcheck:
end = idx
endcheck = False
data = text[start:end]
from openpyxl import load_workbook
wb = load_workbook(filename = r'F:\tes\Book1.xlsx')
sheet_ranges = wb['1771 III']
cell_name = 'M' + str(20 + (3*i))
sheet_ranges[cell_name] = data
wb.save(filename = r'F:\tes\Form 1771.xlsx')
我尝试打开 2 个文本文件,但它只打开并输入 1 个文本文件到 excel。如何编写代码以打开多个文本文件?
【问题讨论】:
-
这里为什么需要
enumerate?for filename in filenames工作得很好。 -
因为它包含错误“ValueError: too many values to unpack (expected 2)”
-
嗨@jodayme,我建议启动一个单独的脚本,它只是让迭代工作正常的文件。尝试只打印两个文件的名称而不使用枚举。
for f in filenames: print f。一旦您看到该工作,您就可以构建程序的其余功能。 -
不可能像您在下面的代码中所说的那样拥有
ValueError。正如 Adam 建议的那样,您应该首先检查filenames中的对象。 -
示例中的缩进看起来 关闭。
for idx, letter in enumerate(text):在其套件中 中没有任何内容。从data = text[start:end]开始的行看起来不像在外循环套件中。您可能希望开始使用四个空格进行缩进 - 它更易于查看,并且大多数 Python 程序员都使用此约定。