2016-09-21 5 views
0

私はPython3を自分自身に教えてプログラミングを始めています。妻は私に彼女にExcelからデータを読み込み、ある列から他の行を別の列にコピーするスクリプトを作成するように頼んだ。 彼女は12k行のExcelを持っており、row1 = string、row2 =(int/float/date/time)、row3 = string、row4 =(int/float/date/time)...xlrdとxlwtのようにPython 3のコピーデータ

私が何をしたか

はこれです:

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:Python(INDEXとROWS)を使用せずにExcel自体で達成できることは分かっていますが、通常のコピー貼り付けのようにデータをこのように転送する方法については興味があります私の日付は2011年1月1日に浮動小数点に変換されます。

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を使って日付を書くことは、私がやったことがないので、読者のための練習として残されています。今ここでは遅く&です)。

関連する問題