从PHP导出到CSV:以美元符号作为文本的金额


Export From PHP to CSV: Amounts with dollar sign being taken as text

我试图用php/mysql导出CSV,当金额为美元时,金额被视为文本。

是否有一个工作周围有这些金额作为数字没有额外的excel格式从我的php程序?

编辑:

下面的代码给出了相应的金额。

    switch($currency)
    {
                            case 'Eur':
                                $symbol=iconv("UTF-8", "cp1252", "€");
                                break;
                            case 'USD':
                                //$symbol=chr(36);//"$";                            
                                $symbol=iconv("UTF-8", "cp1252", "$");
                                break;
                            case 'GBP':
                                //$symbol="£";//chr(163)//;
                                $symbol=iconv("UTF-8", "cp1252", "£");
                                break;
                            case 'EUR':
                                $symbol=iconv("UTF-8", "cp1252", "€");
                                break;
  }        
  return  $symbol."".$number;

返回值被馈送到csv。

显然欧元和英镑工作正常,但我怀疑美元不是,因为它有绝对的参考功能。

将值转换为文本的是excel。这一切都取决于窗口的区域设置。没有别的办法。(据我所知)

例如:当我将标准和格式设置为英语(美国)时,单元格的格式为货币(单元格值= 1,$为货币),当设置为荷兰语(荷兰)时,单元格的格式为通用(单元格值= $1为文本)。

我并不建议将格式存储在CSV文件中。虽然这会导致更多的工作,但如果您原始存储数据,它也会带来更大的灵活性。你总是可以发送原始数据,然后转换。

请记住,CSV是而不是 Excel格式。通过强迫你的CSV与Excel兼容,你甚至可能会给那些试图将CSV导入到网络上的人带来问题,或者类似的事情。对一个项目(或国家,如dn Fer在他的回答中所示)有效的格式可能不适用于另一个项目。

我认为一个比"我怎么能这样做?"更重要的问题是"我为什么要这样做?"如果你打算提供一个"excel友好"的预格式化程序,那么除了提供一个未格式化的原始CSV文件外,你还应该提供它。如果你只打算选择一个,让最终用户自己处理格式。另一种选择将不可避免地给你带来更多的问题。

我的建议是让列标题为你做解释。如果您愿意,可以将货币名称甚至符号放在每个列头的顶部,并将总数以原始数字形式放在下面。你的最终用户应该没有任何问题格式化自己的程序,他们选择打开它,它将有更少的机会不能正确转换。

相反,您可以考虑创建一个XML文件。如果你想让它在多种文件格式中工作,它将更加强大,它将允许你根据你的想象力/文档/实验/测试来格式化。如果你选择走这条路,这里是我找到的一些资源:

xml -外币转换成Excel xslt (SO)Excel电子表格格式的特点与限制

最后,我强烈建议先走CSV路线。如果你想让一些东西更健壮,你可以开始开发一些不同的东西。XML可能是一种更好的格式,因为现代电子表格支持某些版本的XML标准。代价是有时间。但最终,没有什么是不可能的-只是昂贵!