2017-06-27 2359 views
0

有沒有辦法從excel表格中獲取列,將列寫入列表並將其排序,然後將它們重寫爲另一個Excel表格?這是我到目前爲止所嘗試的,但它只寫入最後一列數據。我不需要前兩行數據,因爲它們只是標題。使用Python對Excel中的列數據進行排序

import xlrd 
import xlsxwriter 

wb = xlrd.open_workbook('exceldata.xlsx') 
ws = wb.sheet_by_index(0) 

col=[] 

for i in range(2,ws.ncols): 
    col=ws.col_values(i) 

    for x in range(2): 
     col.pop(0) 

    col.sort() 

    workbook = xlsxwriter.Workbook('test_sorting.xlsx') 
    worksheet = workbook.add_worksheet() 
    worksheet.write_column('A1',col) 
    workbook.close() 

UPDATE:這是成功的,但沒有人知道這是如何簡化?

import xlrd 
import xlsxwriter 

wb = xlrd.open_workbook('exceldata.xlsx') 
ws = wb.sheet_by_index(0) 


col1=ws.col_values(2) 
for x in range(2): 
    col1.pop(0) 
col1.sort() 

col2=ws.col_values(3) 
for x in range(2): 
    col2.pop(0) 
col2.sort() 

col3=ws.col_values(4) 
for x in range(2): 
    col3.pop(0) 
col3.sort() 

col4=ws.col_values(5) 
for x in range(2): 
    col4.pop(0) 
col4.sort() 

col5=ws.col_values(6) 
for x in range(2): 
    col5.pop(0) 
col5.sort() 

columns=[] 
for i in range(2,7): 
    col=ws.col_values(i) 
    columns.append(col) 

print(columns) 

workbook = xlsxwriter.Workbook('test_sorting.xlsx') 
worksheet = workbook.add_worksheet() 
worksheet.write_column('A2',col1) 
worksheet.write_column('B2',col2) 
worksheet.write_column('C2',col3) 
worksheet.write_column('D2',col4) 
worksheet.write_column('E2',col5) 

workbook.close()

+0

您不需要彈出任何值。您可以簡單地從第二個元素開始檢索值:'ws.col_values(3,1)'返回一個以D2開頭的值列表。雖然我認爲xlrd是閱讀Excel文件的最佳軟件包,但它沒有最好的文檔。您應該查看舊的[教程PDF](https://github.com/python-excel/tutorial)的xlrd部分。是的,它已經過時了,但仍然比「官方」xlrd文檔更好。 –

+0

最後的循環,構建'columns',是正確的想法。您可以使用'columns'而不是'col1','col2'等。請注意,雖然'columns'是一個列表,但它內部的元素也是列表,因此可以單獨引用和操作。例如,在上面的代碼中,'columns [2]'包含與'col3'相同的數據(除了彈出和排序)。你如何彈出和排列「列」中的數據?最簡單的方法就是在你創建'columns'的時候,在將'col'追加到'columns'之前立即做'col'。 –

回答

0

我認爲你需要追加(),或從您的Excel擴展()列名列表 '關口'。目前它每次FOR循環迭代都會替換'i'的值。

也許是這樣的: col.append(ws.col_values(I))

附:這是我對堆棧溢出的第一個答案。希望能幫助到你。我沒有測試過(如果需要,我會測試它並更新答案)。

+0

我試過這個,但是我得到以下錯誤:'<''不支持'list'和'float' –

相關問題