我是编程新手,自学Python3。妻子让我给她做一个脚本,它将从一列中读取excel中的数据,并将每隔一行复制到另一列中。 她有12k行的excel,它的形式为:row1 = string,row2 =(int / float / date / time),row3 = string,row4 =(int / float / date / time)...
我做的是这个:
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),但我很好奇如何以这种方式传输数据作为普通的复制粘贴,没有它,例如分开我的如果它是2016年1月1日,则可以登上浮动。
THX
答案 0 :(得分: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) ]
这将为您提供一个可以写入输出文件的字符串,浮点数和日期时间对象的列表(使用xlrw写日期是留给读者的练习,因为我还没有完成它,而且#&# 39;在这里和现在已经很晚了。