Переместите некоторые операторы и убедитесь, что операторы в соответствуют соответствующим циклам (правильный отступ).Я не проверял это, но это выглядит правильно.
Сначала все импорт и настройка в начале.
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')
Вероятно, лучше всего открыть файл, используя ключевое слово with
, которое обеспечитфайл закрыт.
with open(filename, 'r') as f:
text = f.read().replace('\u2014', '-').replace('—', '-')
В вашем примере вы перебираете каждый символ в файле, используя перечисление, чтобы найти индекс начала и конца ваших данных, text[idx:idx+4] == 'NPWP'
.
В строках есть метод поиска , который сделает это за вас.
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')