我想编写代码以从Excel获取数据并将其写入文本文件。这是我的代码:
import xlrd
import os.path
wb = xlrd.open_workbook(os.path.join('D:\TRB 2014 Data','SPS1 demo data.xlsx'))
wb.sheet_names()
sh = wb.sheet_by_index(0)
i = 1
while sh.cell(i,11).value != 0:
Load = sh.cell(i,11).value
D1 = sh.cell(i,13).value
D2 = sh.cell(i,14).value
D3 = sh.cell(i,15).value
D4 = sh.cell(i,16).value
D5 = sh.cell(i,17).value
D6 = sh.cell(i,18).value
D7 = sh.cell(i,19).value
DB1 = str(Load) + " " + str(D1) + " " + str(D2) + " " + str(D3)+ " " + str(D4)+ " " + str(D5)+ " " + str(D6)+ " " + str(D7)
file = open("Output.txt", "w")
file.write(DB1 + '\n')
file.close
i = i + 1
此代码的问题是写入文本文件的数据始终显示在第一行。因此,虽然我在excel中有20行数据,但文本文件仅显示文本文件中第一行的excel文件中的最后一个数据。我在'\n'
中有file.write
但是,它似乎无效。
答案 0 :(得分:5)
您应open output.txt
个文件append mode
:
file = open("Output.txt", "a")
此外,您应该在进入循环之前执行此操作,并且应该在该循环之后关闭它。
<强>更新强>:
在这种情况下,您可以使用with
而不是在结尾处关闭文件句柄。
还包括@Josh in his own answer提出的好建议,代码可以是:
import xlrd
import os.path
wb = xlrd.open_workbook(os.path.join('D:\TRB 2014 Data','SPS1 demo data.xlsx'))
wb.sheet_names()
sh = wb.sheet_by_index(0)
i = 1
with open("Output.txt", "a") as my_file:
while sh.cell(i,11).value != 0:
Load = sh.cell(i,11).value
all_d = sh.col_values(i, 13, 19)
DB1 = Load + " " + (" ".join(all_d))
my_file.write(DB1 + '\n')
i += 1
答案 1 :(得分:4)
import xlrd
workbook=xlrd.open_workbook("xxx.xls")
sh=workbook.sheet_by_name("test1")
print sh.nrows
print sh.ncols
n=0
i=0
file=open("xxx.txt","w")
for n in range(sh.nrows):
for i in range(sh.ncols):
data =sh.cell_value(n,i)+" "
print data,
file.write(data+" ")
print
file.write("\n")
this code is working properly for writing into text file
答案 2 :(得分:2)
您正在打开和关闭Excel工作表中每行的输出文件。
在while循环之前打开文件,然后在完成循环后关闭它。
import xlrd
import os.path
wb = xlrd.open_workbook(os.path.join('D:\TRB 2014 Data','SPS1 demo data.xlsx'))
wb.sheet_names()
sh = wb.sheet_by_index(0)
i = 1
file = open("Output.txt", "w")
while sh.cell(i,11).value != 0:
Load = sh.cell(i,11).value
D1 = sh.cell(i,13).value
D2 = sh.cell(i,14).value
D3 = sh.cell(i,15).value
D4 = sh.cell(i,16).value
D5 = sh.cell(i,17).value
D6 = sh.cell(i,18).value
D7 = sh.cell(i,19).value
DB1 = str(Load) + " " + str(D1) + " " + str(D2) + " " + str(D3)+ " " + str(D4)+ " " + str(D5)+ " " + str(D6)+ " " + str(D7)
file.write(DB1 + '\n')
i = i + 1
file.close
答案 3 :(得分:2)
xlrd实际上有一个很好的函数来获取列或行中的一堆单元格的值。使用它,您可以大量简化代码(我非常确定它们的功能更有效)。这样你的代码就可以成为:
import xlrd
import os.path
wb = xlrd.open_workbook(os.path.join('D:\TRB 2014 Data','SPS1 demo data.xlsx'))
wb.sheet_names()
sh = wb.sheet_by_index(0)
i = 1
my_file = open("Output.txt", "a")
while sh.cell(i,11).value != 0:
Load = sh.cell(i,11).value
all_d = sh.col_values(i, 13, 19)
DB1 = Load+" "+(" ".join(all_d))
my_file.write(DB1 + '\n')
i += 1
file.close