Depende absolutamente do que você define como CSV "padrão". No que me diz respeito, o Excel segue as regras descritas em RFC 4180 , o "Formato Comum e o Tipo MIME para CSV Arquivos ".
Considere uma tabela em que a primeira célula na primeira linha tenha duas quebras de linha. No Excel, seria parecido com o seguinte:
+---+---------------+------------+------------+
| | A | B | C |
+---+---------------+------------+------------+
| 1 | col1, line1a | | |
| | col1, line1b | | |
| | col1, line1c | col2, row1 | col3, row1 |
| 2 | col1, row2 | col2, row2 | col3, row2 |
+---+---------------+------------+------------+
Agora, como o Excel exportaria isso? Vamos ver - um editor de texto mostraria isso:
"col1, line1a
col1, line1b
col1, line1c","col2, row1","col3, row1"
"col1, row2","col2, row2","col3, row2"
Não é muito sofisticado. Ele insere um retorno de carro (hex 0D
) onde a quebra de linha estava em nossa célula. Cada célula é cercada por aspas duplas. Além disso, as linhas reais são separadas por um retorno de carro.
Para analisar isso corretamente, um analisador de CSV precisaria
- ignora esse retorno de carro quando aparece entre aspas duplas (ou seja, uma célula)
- não ignora esse retorno de carro quando ele aparece fora de aspas duplas
Se não fizesse isso, você acabaria com algo confuso como este - note que agora há quatro linhas em vez de duas, porque não conseguiu ignorar as quebras de linha.
+---+---------------+------------+------------+
| | A | B | C |
+---+---------------+------------+------------+
| 1 | "col1, line1a | | |
| 2 | col1, line1b | | |
| 3 | col1, line1c" | col2, row1 | col3, row1 |
| 4 | col1, row2 | col2, row2 | col3, row2 |
+---+---------------+------------+------------+
Mas, vamos ver o que o RFC diz, talvez o Excel tenha feito isso certo?
Fields containing line breaks (CRLF), double quotes, and commas should be enclosed in double-quotes.
Legal, é exatamente isso que o Excel fez. Resumindo, o Excel parece seguir as recomendações de um arquivo CSV "padrão". Dado um analisador de CSV adequado, ele deve ser capaz de ler arquivos CSV do Excel também.