Excel переходит на Python и обратно в Excel

#python #excel #vba #date #time

#python #excel #vba #Дата #время

Вопрос:

Я работаю с python и извлекаю из него данные. Я создал 2d-массив таблицы Excel и пытаюсь найти индекс определенной даты. Однако, когда я печатаю одну из дат из моего 2d-массива, она печатается, <PyTime: 7/9/2014 12:00:00 AM> пока она есть в Excel 07/09/14 . Он также выводит время ввода, когда я проверяю тип. Предположим, что у моего массива есть имя 2darray .

Я пытаюсь использовать 2darray.index(object) , но я не знаю, что вставить в параметр. Может кто-нибудь помочь с этой проблемой? Я новичок в использовании Python для извлечения данных из Excel, и ваша помощь была бы очень признательна.

Комментарии:

1. Что означает «он печатается, пока в Excel это 07/09/14»? Пожалуйста, покажите нам, какой код вы используете, чтобы мы могли точно видеть, что происходит.

Ответ №1:

Предположим, что ваша дата, которая печатается <PyTime: 7/9/2014 12:00:00 AM> , хранится в переменной my_date . Вы можете сделать следующее, чтобы преобразовать его в собственный объект даты и времени Python:

 import datetime as dt
dt.datetime(month=my_date.month, day=my_date.day, year=my_date.year,
            hour=my_date.hour, minute=my_date.minute, second=my_date.second)
 

Однако вам может быть полезно использовать мою библиотеку xlwings, где вы можете:

 from xlwings import Range, Workbook
wb = Workbook(r'pathtoyourworkbook.xlsx')
my_date = Range('A1').value  # prints: datetime.datetime(2014, 9, 7, 12, 0)
 

То есть он автоматически предоставляет вам собственный datetime объект Python, который предлагает вам все необходимые методы для работы.

Ответ №2:

Привет, вы можете выполнить это действие с помощью win32com. Вам нужно очистить формат даты в вашем списке python, например:

 Import win32com.client
xl = win32com.client.Dispatch('Excel.Application')
wbxl = xl.Workbooks.Open('D:/myworkbooks.xlsx')
xlsheet = wbxl.ActiveSheet

mydatelist = []
for row in range(0,50]:
    mydatelist.append(str(xlsheet.Cells(row,1).Value))
    mydatelist = [word.replace('12:00:00 AM','') for word in mydatelist]
 

и вы можете сделать это после:

 import time
date = []
for x in mydatelist :
date.append(time.strptime(x, '%Y/%m/%d '))