我想制作一个使用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个文本文件即可。如何编码以打开多个文本文件?
答案 0 :(得分:0)
重新定位某些语句,并确保语句在适当的循环中(正确的缩进)。我没有测试过,但看起来正确。
首先在开始时进行所有导入和设置。
import os
from openpyxl import load_workbook
os.chdir(r'F:\tes')
filenames = ["eb.txt", "ea.txt"]
wb = load_workbook(filename = r'F:\tes\Book1.xlsx')
然后开始迭代。
# outer loop
for i, filename in enumerate(filenames):
file = open(filename, 'r')
text = file.read().replace('\u2014', '-').replace('—', '-')
# explicitly close the file
file.close()
start = 0
startcheck = True
end = 0
endcheck = True
# find the data
# inner loop
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
# ensure this section in the outer loop
data = text[start:end]
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')
最好open a file using the with
keyword,以确保文件已关闭。
with open(filename, 'r') as f:
text = f.read().replace('\u2014', '-').replace('—', '-')
在您的示例中,您使用枚举遍历文件中的每个字符,以找到数据的开始和结束的索引text[idx:idx+4] == 'NPWP'
。
字符串有一个find method,它将为您做到这一点。
start = text.find('NPWP')
end = text.find('Pembeli', start)
data = text[start:end]
通过这些更改,您的代码将如下所示:
import os
from openpyxl import load_workbook
os.chdir(r'F:\tes')
filenames = ["eb.txt", "ea.txt"]
wb = load_workbook(filename = r'F:\tes\Book1.xlsx')
for i, filename in enumerate(filenames):
with open(filename, 'r') as f:
text = f.read().replace('\u2014', '-').replace('—', '-')
start = text.find('NPWP')
end = text.find('Pembeli', start)
data = text[start:end]
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')