2017-02-09 37 views
-1

我正在开发GIS软件中的一个项目,我需要一个包含格式为YYYY-MM-DD的日期的列。目前,在Excel中,我有3列:1与年份,1与月份和1与一天。看起来是这样的:如何使用Excel和Python连接3列为1?

|  A |  B  |  C  | 
| 2012 |  1  |  1  | 
| 2012 |  2  |  1  | 
| 2012 |  3  |  1  | 
      ...etc... 

,我需要它看起来像这样:

|  A  | 
| 2012-01-01| 
| 2012-02-01| 
| 2012-03-01| 

我有几个工作簿,我需要在相同的格式,所以我想,也许蟒蛇会是一个有用的工具,所以我不必手动连接Excel中的所有内容。

所以,我的问题是,有一个简单的方法,不仅串联这三列,但在月份和日期的数字前面还要加个零?

我一直在尝试一下python库openpyxl,但到目前为止还没有提出任何有用的东西。任何帮助将不胜感激,谢谢。

+0

你可以用'.zfill( 2)'在月/日前添加一个零。 – ryugie

+0

这对于使用openpyxl很容易。你试过什么了。 –

回答

1

如果你打算要住在Excel中,您可能也只是使用Excel宏脚本。如果你的年,月,日都在列ABC,你可以在D栏中键入此将它们串联,然后将其格式化为一个日期并调整填充。

=$A1 & "-" & $B1 & "-" & $C1 
+0

Excel的日期时间支持其实很差。使用诸如Python之类的方法将日期转换为日期可能很有意义。 –

+0

@CharlieClark OP想留在excel中,所以即使你在python中进行字符串连接,日期时间仍然需要住在excel中 –

+0

我认为你第二次猜测需要提供更多代码的OP。特别是如果有很多文件,在没有将所有内容加载到Excel中的情况下执行此操作都是有意义的。 –

0

试试这个:

def DateFromABC(self,ws): 
    import datetime 

    # Start reading from row 1 
    for i,row in enumerate(ws.rows,1): 
     sRow = str(i) 
     # datetime goes into column 'D' 
     Dcell = ws['D'+sRow] 

     # Set datetime from 'ABC' 
     Dcell.value = datetime.date(year=ws['A'+sRow].value, 
            month=ws['B'+sRow].value, 
            day=ws['C'+sRow].value 
           ) 
     print('i=%s,tpye=%s, value=%s' % (i,str(type(Dcell.value)),Dcell.value)) 
    #end for 
    #end def DateFromABC 

测试与Python 3.4.2 - openpyxl:2.4.1 - LibreOffice的:4.3.3.2