将堆积列表转换为可用数据

时间:2012-10-05 15:34:18

标签: python excel

在Excel中,我有一个单元格列表,这些名称在单元格中显示为堆叠,我希望每个名称都在自己的列中。我认为Python可能是一个很好的方法吗?

示例:

Joe Smith
John Hawk
Mike Green
Lauren Smith

一个单元格看起来与此类似,单元格中的每个名称都在单元格中,但单元格中包含所有名称。我有50个单元格,每个单元格有1-20个堆叠名称,我想将每个名称放在给定行的单元格中。因此,在我的示例中,所有这些名称将占据相同的行,但每个名称都有自己的列。

有什么想法吗?

3 个答案:

答案 0 :(得分:1)

如果你已经开始使用python,你可以将你的excel导出到csv。

然后使用python,您可以使用csv模块(csv.reader)打开您的csv:http://docs.python.org/library/csv.html

从那里你可以迭代你的csv的每一行。

每行的第一个索引将包含一串堆叠的名称。

您可以使用split方法将名称拆分为列表。从那里,您可以将这些值作为行写入输出csv(使用csv.writer)。

答案 1 :(得分:0)

如果你在excel中做得好,下面的代码应该适合你:

Sub SplitCellsAndExtend_Old()
'takes cells with inside line feeds and creates new row for each.

Dim strCell As String, lastRow As Long, i As Long, j As Long
application.ScreenUpdating = False
lastRow = Cells(Rows.Count, 1).End(xlUp).Row

    For i = lastRow To 1 Step -1
        strCell = Cells(i, 1)
        j = 0

        Do While InStr(1, strCell, Chr(10)) > 0
            Rows(i + j + 1).Insert
            strCell = Right(strCell, Len(strCell) - InStr(1, strCell, Chr(10)))
            Cells(i + j, 1) = Left(Cells(i + j, 1).Value, InStr(1, Cells(i + j, 1), Chr(10)) - 1)
            Cells(i + j + 1, 1).Value = strCell
            Cells(i + j + 1, 1).Value = Cells(i, 1)
            j = j + 1
        Loop
    Next
application.ScreenUpdating = True
End Sub

答案 2 :(得分:0)

嗯,你的问题一开始并不清楚,但是由于有人编辑了它,我想我明白你想要的。

假设您使用的是Windows,并且可以访问记事本和wordpad(这些应该在您的配件文件夹中 - 与您的计算器相同)

突出显示您的单元格并复制它们 - 然后将它们粘贴到记事本文档中。

FromExcel 它应该如下所示: ToNotepad 然后复制并粘贴记事本中的内容并将其粘贴到wordpad中,它应如下所示: ToWordpad 然后在wordpad中查找并替换引号: FindAndReplaceQuotationMarks 然后将其复制并粘贴回并擅长,您应该得到您想要的: BackIntoExcelResult

这是一种奇怪的方式 - 但它应该适合你。我经常发现通过这个管道(或它的变体)运行很多类型的东西摆脱了不必要的格式化项目。所以很多事情都有好处。祝你好运