2016-09-21 179 views
0

我是編程新手,自學Python3。妻子問我讓她做一個腳本,它將從一列中讀取excel中的數據,並將每一行復制到另一列中。她有一個excel的12k行,它的形式是:row1 = string,row2 =(int/float/date/time),row3 = string,row4 =(int/float/date/time)...Python 3使用xlrd和xlwt複製數據

我所做的是這樣的:

import xlrd 
import xlwt 

workbook = xlrd.open_workbook("MyExcel.xls") 
sheet = workbook.sheet_by_index(0) 

wb = xlwt.Workbook() 
ws = wb.add_sheet("Sheet1") 

i = 0 
data = [] 
for i in range(sheet.nrows): 
    if i % 2 == 0: 
     value = sheet.cell(i, 0).value 
     data.append(value) 

j = 0 

for j in range(len(data)): 
    ws.write(j, 0, data[j]) 
    j += 1 

wb.save("MyOutput.xls") 

它工作正常,但問題是它正常工作與字符串和整數,而不是與日期或時間,將其轉換成那些花車。 我只是需要它複製每個單元格的值「原樣」沒有格式或任何東西,只需複製粘貼。如果一個單元格的值爲:「monkey/73.0:blah」,我只是希望它將它作爲「monkey/73.0:blah」複製到新的excel中。

任何想法如何實現這一目標?

ps:我知道它可以在excel本身內部實現,不使用python(使用INDEX和ROWS),但是我很好奇如何以這種方式將數據以正常的副本粘貼的方式傳輸,如果它的1/1/2016,我的日期變成浮動。

THX

回答

0

你不能做的正是你想要的東西,因爲你不知道文件中哪些Excel存儲。

日期和時間存儲爲浮點值。時間值介於0和1.0之間,並且日期/時間值以較大的數字存儲(消極日期未由許多版本的Excel正確處理)。您不能僅僅按照原樣複製單元格值(即沒有格式化),因爲格式化是單元格被稱爲日期或時間的唯一方法!

要閱讀的日期&時間,你可以取代你的代碼塊構建data列表與此:

cv = lambda v, t: (v if t != 3 
        else datetime(*(xlrd.xldate_as_tuple(v, workbook.datemode)))) 
data = [ cv(sheet.cell(i, 0).value, sheet.cell_type(i, 0)) 
     for i in range(1, sheet.nrows, 2) ] 

這會給你一個字符串,浮動的列表,datetime對象,你可以寫到你的輸出文件(使用xlrw編寫日期留給讀者練習,因爲我還沒有完成,現在這裏已經是&了)。