【问题标题】:Simplest way to total up columns?汇总列的最简单方法?
【发布时间】:2010-11-09 19:57:28
【问题描述】:

我有一个 PHP 脚本,它最多可以导入 10 个左右不同的 CSV 文件。每个文件的每一行都包含银行账户信息,包括余额。将所有 CSV 数据导入数据库后,我想通过比较数据库中的帐户总余额与 CSV 文件的帐户总余额来确保数据正确输入。

我至少看到了几个选项:

  1. 在 Excel 中手动合计所有帐户余额 - 糟糕。

  2. 编写一个 PHP 脚本来读取每个 CSV 文件并汇总帐户余额 - 也很糟糕。

  3. 我希望存在的第三个选项。如果我能做这样的事情,那就太棒了:

    excel --file="cd.csv" | sum --column="E"

这显然不是真的,但希望你能明白。使用 PHP、MySQL、Linux 命令、Excel 和/或任何其他工具的某种组合,有没有一种简单的方法可以做到这一点?

【问题讨论】:

  • 你可以更改 php 以接受 $argv(cli 模式)或简单的 bash total=0; col=9;for i in cut -d ' ' cd.csv -f $col; do let total=$i+$total; done; echo $total;

标签: php mysql excel csv


【解决方案1】:

不必为您完成答案,但 AWK 应该能够解决您的问题:看看这 2 个帖子:

https://superuser.com/questions/53652/transforming-csv-file-using-sed

Shell command to sum integers, one per line?

我不是 AWK 专家来提供解决方案,但也许其他人可以在这里帮助我们。

另一种选择(您也可能认为很糟糕)是使用像 PHPExcel 这样的库

【讨论】:

  • 看来我会选择awk
  • 更新:这似乎有效:cat file.csv | awk -F "\"*,\"*" '{s+=$2} END {print s}'(总计第二列。)
【解决方案2】:

您可以使用 fgetcsv() 遍历 CSV 文件,它将每行转换为值数组。您可以在每次迭代中累积包含余额的数组元素的值,直到获得总和。使用glob获取文件夹中的CSV文件列表。

【讨论】:

    【解决方案3】:

    您可能不必“手动”合计帐户余额,如果您可以使用应用程序中的 Excel 函数,VBA 中的 Excel 公式将是:

    Application.Sum(Range("A:A"))
    

    其中 A:A 用于 A 列。

    【讨论】:

    • 如果在windows上运行,可以使用PHP中的COM,但他似乎在Linux上运行
    • 我正在运行 Linux。但是,这并不是说在 Windows 中自动化某些过程然后将结果带入 Linux 没有帮助。
    【解决方案4】:

    尝试使用带有摘要选项的CSVFix。它会为您提供比您需要的更多的数据,但应该易于使用。

    否则,这听起来对 awk 很有用。

    【讨论】:

      【解决方案5】:

      您为什么不能在 Excel 中使用公式自动汇总帐户余额,然后将其与其余数据一起导出?

      【讨论】:

      • 我能做到。这并不理想(我更喜欢完全自动化),但它可能是最简单的解决方案。
      【解决方案6】:

      有点不同的角度:利用MySql CSV engine 将您的CSV 文件公开给Mysql,然后执行正常的SQL SUM。

      另见:The CSV Storage Engine

      【讨论】:

      • 我喜欢这个主意。我会更多地研究它,看看它是否是一个可行的选择。
      猜你喜欢
      • 1970-01-01
      • 2021-03-11
      • 2018-06-25
      • 2016-05-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-07
      • 2011-01-21
      相关资源
      最近更新 更多