Excel表格将所有数据写入一列

时间:2015-08-11 10:19:43

标签: python excel xlwt writing xlw

我在将文本写入Excel工作表时遇到问题:

这是我的代码:

import xlwt

wbk = xlwt.Workbook()
sheet = wbk.add_sheet('python')
row = 0 # row counter
col = 0

f = open('newfile.txt')
for line in f:
    L = line.split('\t')
    for c in L:
        sheet.write(row,col,c)
    row += 1
wbk.save('example12.xls')

这里是input.txt

Ename   DCname  Competency  Effort

Eng01   DC1 SW  30  
Eng02   DC2 HW  30  
Eng03   DC3 ME  40  
Eng04   DC2 SW  20  
Eng05   DC3 FW  40  
Eng06   DC3 SW  35  
Eng07   DC1 HW  25  
Eng08   DC3 SW  30  
Eng09   DC1 HW  35  
Eng10   DC3 SW  20  
Eng11   DC1 HW  40  
Eng12   DC3 SW  40  
Eng13   DC1 HW  30  
Eng14   DC1 HW  30  
Eng15   DC3 FW  40  

但是input.txt只写入一列,我怎样才能把它写入不同的列?

2 个答案:

答案 0 :(得分:1)

你的问题在这里:

for line in f:
    L = line.split('\t')
    for c in L:
        sheet.write(row,col,c)
    row += 1

col永远不会从0更改,因此它始终会写入同一列。您可以在该循环期间递增它,但使用enumerate会更好。 enumerate返回循环的每次迭代的索引,因此您可以计算您使用它的哪个数字列。像这样:

for line in f:
    L = line.split('\t')
    for i,c in enumerate(L):
        sheet.write(row,i,c)
    row += 1

i是该行中找到的列的编号,因此它会将每个数据写入下一列。

答案 1 :(得分:0)

假设您的输入文本文件是使用制表符分隔的,则以下内容应该有效:

import csv

with open("input.txt", "r") as f_input, open("output.csv", "wb") as f_output:
    csv_input = csv.reader(f_input, delimiter="\t")
    csv_output = csv.writer(f_output)

    text = list(csv_input)
    csv_output.writerows(text)

这将为您提供一个可以在Excel中打开的文件,如下所示:

Ename,DCname,Competency,Effort
Eng01,DC1,SW,30
Eng02,DC2,HW,30
Eng03,DC3,ME,40
Eng04,DC2,SW,20
Eng05,DC3,FW,40
Eng06,DC3,SW,35
Eng07,DC1,HW,25
Eng08,DC3,SW,30
Eng09,DC1,HW,35
Eng10,DC3,SW,20
Eng11,DC1,HW,40
Eng12,DC3,SW,40
Eng13,DC1,HW,30
Eng14,DC1,HW,30
Eng15,DC3,FW,40

如果要使用openpyxl直接创建XLSX文件,可以使用以下命令:

import csv  
from openpyxl.workbook import Workbook

with open("input.txt", "r") as f_input:
    csv_input = csv.reader(f_input, delimiter="\t")

    wb = Workbook()
    ws1 = wb.active
    ws1.title = "Locations"

    for row in csv_input:
        ws1.append(row)

    wb.save(filename="output.xlsx")