Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/29.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Python对Excel中的列数据进行排序_Python_Excel_Xlrd_Xlsxwriter - Fatal编程技术网

使用Python对Excel中的列数据进行排序

使用Python对Excel中的列数据进行排序,python,excel,xlrd,xlsxwriter,Python,Excel,Xlrd,Xlsxwriter,有没有办法从excel工作表中提取列,将列作为列表写入,对其进行排序,然后将其重写到另一个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_

有没有办法从excel工作表中提取列,将列作为列表写入,对其进行排序,然后将其重写到另一个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()
更新:这是成功的,但有人知道如何简化吗?

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()

我认为您需要在列表“col”中添加()或扩展()列名称。目前,每次FOR循环迭代时,它都会替换'i'的值

也许是这样的: col.append(ws.col_值(i))


另外,这是我关于堆栈溢出的第一个答案。希望能有帮助。我还没有测试它(我会测试它,如果需要的话会更新答案)。

我已经尝试过了,但是我得到了以下错误:“你不需要弹出任何值。”。您只需检索以第二个元素开头的值:
ws.col\u values(3,1)
返回以D2开头的值列表。虽然我认为xlrd是读取Excel文件的最佳软件包,但它没有最好的文档。您应该查看旧版本的xlrd部分。是的,它已经过时了,但它仍然比“官方”xlrd文档要好。最后的循环,即构建
,是正确的想法。您可以使用
columns
而不是
col1
col2
等。请注意,
columns
是一个列表,其中的元素也是列表,因此可以单独引用和操作。例如,在上面的代码中,
列[2]
包含与
col3
相同的数据(弹出和排序除外)。如何弹出和排序
列中的数据?最简单的方法是在构建
时,在将其附加到
之前立即对
执行所需操作。