0

在 Excel 中,我有一个在单元格中显示为堆叠的名称列表,并且我希望每个名称都在其自己的列中。我在想 Python 可能是做到这一点的好方法?

例子:

Joe Smith
John Hawk
Mike Green
Lauren Smith

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

有任何想法吗?

4

3 回答 3

1

如果你打算使用 python,你可以将你的 excel 导出到 csv。

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

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

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

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

于 2012-10-05T15:40:34.470 回答
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
于 2012-10-05T16:19:27.437 回答
0

好吧,您的问题起初并不清楚,但是由于有人对其进行了编辑,我想我明白您想要什么。

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

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

来自Excel 它应该如下所示: 记事本 然后复制并粘贴记事本中的内容并将其粘贴到 wordpad 中,它应该如下所示: 到写字板 然后在 wordpad 中找到并替换引号: 查找并替换引号 然后将其复制并粘贴回 Excel 中,您应该会得到什么你要: 返回Excel结果

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

于 2012-10-05T18:31:28.290 回答