2015-05-11 3 views
0

Я хочу заменить даты, представленные в определенном формате, в стандартном формате dd-mm-yyyy. Фактическая дата, присутствующая в 10-й колонке, будет равна 6.2017, 7.2017, где 7 - это месяц, а 2017 - год. Мне просто нужно добавить 1- перед всеми значениями, а затем я хочу заменить точку, присутствующую в значении даты, с помощью - (дефис). Таким образом, результат выглядит как 1-6-2017, 1-7-2017. Обратите внимание, что столбец может содержать значения none. В этом случае я хочу пропустить эти значения none.Как заменить значения, присутствующие в конкретном столбце, с помощью openpyxl?

Это то, что я пытался,

from openpyxl import load_workbook 
wb = load_workbook(r'E:\foo\Python\stocktable.xlsx') 
ws = wb.get_active_sheet() 
for rownum in range(2, ws.get_highest_row()): 
    print(str(ws.cell(row=rownum, column=10).value)) 

Выход:

6.2017 
7.2016 
7.2017 
6.2017 
7.2017 
7.2017 
2.2016 
7.2017 
8.2016 
None 

Так что я добавить Лил немного подправить в коде выше, чтобы работать для моего случая. Но это терпит неудачу.

from openpyxl import load_workbook 
wb = load_workbook(r'E:\foo\Python\stocktable.xlsx') 
ws = wb.get_active_sheet() 
for rownum in range(2, ws.get_highest_row()): 
    ws.cell(row=rownum, column=10).value = '1-' + str(ws.cell(row=rownum, column=10).value.replace('.', '-') 

wb.save(r'E:\foo\Python\stocktable.xlsx') 

То есть, он показывает ошибку symtax ​​как,

File "E:\foo\Python\python-excel.py", line 7 
    wb.save() 
    ^
SyntaxError: invalid syntax 
+0

Что вы подразумеваете под словом "it failed"? Какая ошибка? Как насчет ввода 'month, year = ws.cell (row = rownum, column = 10) .value.split (". ")', За которым следует 'ws.cell (row = rownum, column = 10) .value = year + "-" + месяц + "-" + "01" '? – shahkalpesh

+0

@shahkalpesh добавил .... – user197324

+0

Зачем вам нужно снова указывать имя файла при сохранении? Вместо этого попробуйте использовать 'wb.save()'. – shahkalpesh

ответ

-1

Хорошо, я понял, проблема и ниже код работает для меня.

from openpyxl import load_workbook 
wb = load_workbook(r'E:\foo\Python\stocktable.xlsx') 
ws = wb.get_active_sheet() 
for rownum in range(2, ws.get_highest_row()): 
    try: 
     month, year = str(ws.cell(row=rownum, column=10).value).split(".") 
     ws.cell(row=rownum, column=10).value = '1-' + str(month) + '-' + str(year) 
    except ValueError: 
     pass  

wb.save(r'E:\foo\Python\stocktable.xlsx') 

Как @shahkalpesh сказал в своем комментарии, я просто разделить строку (сначала он был в формате поплавка, поэтому я преобразовать его в строку, а затем сделать разделение на основе точки) в соответствии с точкой и сохранить значения до month и year переменная.

Затем я поместил код внутри tryexcept блок, так как столбец содержит none значений.

+0

Могу ли я узнать причину downvote? Я думаю, что это будет полезно для будущих читателей. – user197324

+0

Ваш код отображает полное непонимание форматов данных. Переход через строки для преобразования между числами и датами - это, безусловно, неправильная вещь. –

+0

@CharlieClark Я хочу преобразовать его в строку, как указано выше, поскольку входной файл находится в десятичном формате. Позже программное обеспечение navicat автоматически преобразует формат этой строки на сегодняшний день. – user197324

0

Если вы хотите изменить форматирование дат или времени, вам нужно только изменить number_format для ячеек.

for row in range(2, ws.max_row): 
    cell = ws.cell(row=row, column=10) 
    cell.number_format = "dd-mm-yyyy" 
+0

@Chalie по умолчанию, он был в поплавком формате. – user197324

+0

Excel обрабатывает даты как float, используя только форматирование для их дифференциации. –

Смежные вопросы