在 Apex 代码中生成 csv 文件可以写一个 Visualforce 页面,设定类型为 excel 的格式,然后调用 PageReference
的 getContent()
方法来获取 Blob 格式,存放在附件。
不过另一种更简单的方式就是拼接字符串,csv 即逗号分隔值,所以 csv 文件的内容即一串字符串,用逗号分隔值。
代码:
String csvString = 'header1,header2,header3';csvString += '\n';csvString += 'value1,value2,value3';csvString = '\ufeff' + csvString; // 前缀字节序标记Blob csvBlob = Blob.valueOf(csvString);
csvBlob
即生成的 csv 文件。
不过在 Microsoft Office Excel 中,打开 ASCII 码字符以外的字符,会出现乱码,需要在 csv 文件的最前面加上一个字节序标记符号(\ufeff
)。所以在上面代码中生成字符串时前面加了一个 \ufeff
。
当 csv 的值中出现了逗号(,),双引号("),换行符(\n) 时,需要将这些值用双引号。特别地,对于值中的双引号("),要在双引号前再加一个双引号来避免歧义。
比如 csv 中一行的值如下
value1 value2withcomma, value3withlinebreak\n value4withdoublequote"生成 csv 字符串时需生成为 value1,"value2withcomma,","value3withlinebreak\n","value4withdoublequote"""
References
1. 2.