Формат даты в Excel для сравнения - PullRequest
0 голосов
/ 01 ноября 2018

Я сейчас в процессе написания записной книжки iPython, которая извлечет содержимое файла .csv и вставит его в указанную вкладку в файле .xlsx. Вкладка в .xlsx заполнена кучей предварительно запрограммированных формул, чтобы я мог выполнить анализ исходного содержимого файла .csv.

Однако я столкнулся с проблемой с полями даты, которые я копирую из .csv в файл .xlsx.

Даты не обрабатываются должным образом в формулах Excel, если я дважды не щелкну ячейки даты или не применю функцию Excel «текст к столбцам» к столбцу дат и не выберу вкладку в качестве разделителя (что я должен отметить, не разбить клетку).

Мне интересно, есть ли способ либо ...

  • написать вспомогательную функцию, которая регистрирует нажатия клавиш при применении функции «text to columns»
  • написать вспомогательную функцию для двойного щелчка и возврата вниз по каждой строке столбца дат

    from openpyxl import load_workbook
    import pandas as pd
    
    def transfer_hours(report_name, ER_hours_analysis_wb):
    
        df = pd.read_csv(report_name, index_col=0)
    
        book = load_workbook(ER_hours_analysis_wb)
        sheet_name = "ER Work Log"
    
        with pd.ExcelWriter("ER Hours Analysis 248112.xlsx", 
            engine='openpyxl')  as writer:
    
            writer.book = book
            writer.sheets = dict((ws.title, ws) for ws in book.worksheets)
    
            df.to_excel(writer, sheet_name=sheet_name, 
                startrow=1, startcol=0, engine='openpyxl')
    

Ответы [ 2 ]

0 голосов
/ 01 ноября 2018

Используйте модуль xlsx

import xlsx
load_workbook  ( filen = (filePath,  read_only=False, data_only=False )

Если для data_only установлено значение False, будут возвращаться формулы, тогда как data_only = True возвращает значения без формул.

0 голосов
/ 01 ноября 2018

Каким бы прекрасным инструментом ни были панды, в этом случае, возможно, нет смысла его включать.

Вот более короткая структура того, чего вы пытаетесь достичь:

import csv
import datetime
from openpyxl import load_workbook

def transfer_hours(report_name, ER_hours_analysis_wb):
    wb = load_workbook(ER_hours_analysis_wb)
    ws = wb['ER Work Log'] 

    csvfile = open(report_name, 'rt')
    reader = csv.reader(csvfile,delimiter=',')

    #iterators
    rownum = 0
    colnum = 0

    for row in reader:       
        for col in row:
            dttm = datetime.datetime.strptime(col, "%m/%d/%Y")
            ws.cell(column=colnum,row=rownum).value = dttm

    wb.save('new_spreadsheet.xlsx')

Отсюда вы сможете определить, какие столбцы должны иметь какой формат в зависимости от позиции в CSV. Вот пример:

    for row in reader:       
        ws.cell(column=0,row=rownum,value=row[0])
        dttm = datetime.datetime.strptime(row[1], "%m/%d/%Y")
        ws.cell(column=1,row=rownum).value = dttm

Для справки:

https://openpyxl.readthedocs.io/en/stable/usage.html

Как в Python построчно читать файл в список?

Как форматировать столбцы с заголовками, используя OpenPyXL

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...