1

真的需要一些快速的帮助。

我有一个逗号分隔的 CSV 文件,其中包含大约 200 万行数据(我知道很多,但不幸的是,这是我唯一可以使用的格式)。其中一行有一些数字,其中有很多小数位(如 3.908651901)。我需要将整列(所有 200 万行)四舍五入为整数。

问题是当我在 excel 中打开它时,它会说“仅显示 100 万行”。经过更多调查,我发现 excel 一次不能处理超过 100 万行。

我的问题是:如果我选择整列并将数字四舍五入为整数,这将适用于整个 200 万行吗?还是只有 100 万显示在 excel 中?

是否有任何其他程序可以处理 2-250 万行并将列更改为整数?

4

2 回答 2

0

可能最简单的方法是编写一个小程序来做到这一点。这可以用许多不同语言中的任何一种来完成,但是由于您提到 Excel,这里有一个快速而肮脏的基于 VBA 的选项,它可能足以完成一次性任务。这不会那么快,在我的硬件上花了大约一分钟。其他选择无疑会更快......

这只有效,因为数据从未真正触及工作表,因此百万行限制不会发挥作用。

Sub RoundCsv()
    Dim fso As FileSystemObject
    Dim csvIn As TextStream
    Dim csvOut As TextStream
    Dim FinePathAndName As String
    Dim FinePathAndNameNew As String
    Dim ln As String
    Dim dat As Variant
    Dim RoundColumn As Long

    Set fso = New FileSystemObject
    FinePathAndName = "C:\Your\Path\And\File\Name.csv"
    FinePathAndNameNew = "C:\Your\Path\And\File\NameNew.csv"
    RoundColumn = 3 '<-- set to the column number to round, count from 0
    Set csvIn = fso.OpenTextFile(FinePathAndName, ForReading, False)
    Set csvOut = fso.CreateTextFile(FinePathAndNameNew, True)

    Do While Not csvIn.AtEndOfStream
        ln = csvIn.ReadLine
        dat = Split(ln, ",")
        dat(RoundColumn) = Round(dat(RoundColumn))
        ln = Join(dat, ",")
        csvOut.WriteLine ln
    Loop

    csvIn.Close
    csvOut.Close
    Set csvIn = Nothing
    Set csvOut = Nothing
    Set fso = Nothing
End Sub
于 2013-04-10T06:25:46.367 回答
0

我在这里有点晚了,但也遇到了同样的问题。经过一番谷歌搜索后,我发现了这个名为 gSplit 的程序,它可以将一个大的 csv 分解为多个较小的文件,并将这些较小的部分放回一个大文件中。

您可以将 CSV 分成两半或三等份,格式化每一份,然后重新组合它们。

PS我与这个产品没有任何关系,我只是找到它并且它解决了我的问题,所以我想我会在这里代表它。

http://www.gdgsoft.com/gsplit/

于 2014-10-09T17:19:02.283 回答