在Excel中格式化日期以进行比较

时间:2018-10-31 21:39:40

标签: python excel pandas

我正在编写一个iPython笔记本,该笔记本将提取.csv文件的内容并将其粘贴到.xlsx文件的指定选项卡中。 .xlsx上的标签充满了一系列预编程公式,因此我可以对.csv文件的原始内容进行分析。

但是,我遇到了一个麻烦,因为我将日期字段从.csv复制到.xlsx文件中。

Excel公式无法正确处理日期,除非我双击日期单元格或在日期列上应用Excel的“文本到列”功能并将一个选项卡设置为定界符(我应该注意,不拆分单元格)。

我想知道是否有办法...

  • 编写一个辅助函数,以记录应用“文本到列”功能调用的按键操作
  • 编写一个辅助函数以双击并返回日期列的每一行

    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 :(得分:0)

被设计为与熊猫一样伟大的工具,在这种情况下,可能没有理由包括在内。

这是您要完成的工作的简短结构:

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

In Python, how do I read a file line-by-line into a list?

How to format columns with headers using OpenPyXL

答案 1 :(得分:0)

使用xlsx模块

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

将data_only设置为False将返回公式,而data_only = True将返回非公式值。

相关问题