2014-09-25 5 views
0

Итак, теперь у меня есть функция Excel2CSV, но столкнулась с другой проблемой, в которой поля даты в моем файле Excel ('Date Opened', 'Date Closed'), которые отформатированы как Date в Excel записываются как целочисленное значение при преобразовании в CSV (пример 5/1/1995 преобразуется в 34820).Преобразование Excel в CSV - правильное преобразование полей даты

Я хотел бы, чтобы это просто написать эти даты в качестве обычного текста (то есть. 5/1/1995 -или- 1 мая 1995, или что-то вдоль этих линий. Что-то удобочитаемое.)

def Excel2CSV(ExcelFile, SheetName, CSVFile): 
    import xlrd 
    import csv 
    print "Acquiring " + ExcelFile + "..." 
    workbook = xlrd.open_workbook(ExcelFile) 
    print "Locating " + SheetName + " Worksheet..." 
    worksheet = workbook.sheet_by_name(SheetName) 
    print "Creating " + CSVFile + "..." 
    csvfile = open(CSVFile, 'wb') 
    print "Preparing to write CSV file..." 
    wr = csv.writer(csvfile, quoting=csv.QUOTE_ALL) 
    print "Writing CSV..." 
    for rownum in xrange(worksheet.nrows): 
     wr.writerow(
      list(x.encode('utf-8') if type(x) == type(u'') else x 
        for x in worksheet.row_values(rownum))) 
    print "Closing CSV File..." 
    csvfile.close() 
    print "CSV successfully written." 
    return CSVFile 

Я не уверен, как фиксировать поля даты по имени или значению, а затем правильно преобразовывать значения в обычный текст. Любая помощь приветствуется.

ответ

0

Для преобразования из числа даты в Python datetime использовать следующую формулу:

dt = datetime.datetime(1899, 12, 30) + datetime.timedelta(days=num) 

После того, как вы сделали, что вы можете преобразовать его в формат по умолчанию с str(dt) или указать свой собственный формат с dt.strftime(format). См. datetime documentation

+0

Уверен, что это всегда правильно? [http://www.cpearson.com/excel/datetime.htm](http://www.cpearson.com/excel/datetime.htm) указывает, что вам также необходимо вычесть 1 день для дат после '1900-фев- 28', по крайней мере, и может быть и дробная часть. –

+0

@ivan_pozdeev да, это правда. Если вам небезразличны даты, которые вы, вероятно, не должны обрабатывать в Excel, тем не менее, я не чувствовал необходимости указывать на это. –

+0

@ivan_pozdeev параметры 'days' обрабатывают float, так что дробные части тоже в порядке. –

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