【问题标题】:Python 3 copy data as is with xlrd and xlwtPython 3 使用 xlrd 和 xlwt 复制数据
【发布时间】:2016-09-21 13:21:06
【问题描述】:

我是编程新手,自学 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 日,则日期为浮点数。

谢谢

【问题讨论】:

    标签: xlrd xlwt


    【解决方案1】:

    您无法完全按照自己的意愿去做,因为您不了解 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 编写日期留给读者作为练习,因为我还没有这样做,现在已经很晚了&现在)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多