4

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が、うまくいかないようです。

4

4 に答える 4

5

次のコマンドでファイルを開く必要があります。output.txtappend mode

file = open("Output.txt", "a")

また、ループに入る前にこれを行う必要があり、そのループの後に閉じる必要があります。


更新

このような場合with、最後にファイル ハンドルを閉じる代わりに使用できます。

@Josh が彼自身の回答で行った良い提案も含めて、コードは次のようになります。

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
于 2013-07-31T18:02:03.730 に答える
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
于 2014-09-05T09:11:23.877 に答える
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
于 2013-07-31T18:02:10.197 に答える
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
于 2013-07-31T18:11:54.933 に答える