Upload arquivo .csv no site não abre as tabelas

HTML

C#

ASP.NET

CSV

16/04/2019

Olá pessoal, tudo bem?

Estou com um site em ASP.Net de uma empresa que esta com problema ao importar arquivos .csv na plataforma, ele não reconhece o conteúdo do arquivo. Para arquivos em .txt está funcionando normalmente, apenas o .csv que não abre. Poderiam me auxiliar?

public static DataTable CarreguePlanilha(string caminho)
{
var dtComColunas = new DataTable();
var criptografado = Path.GetExtension(Path.GetFileName(caminho)) == ".emailing";

//se é csv..
if ((new string[] { ".csv", ".txt" }).Contains(Path.GetExtension(Path.GetFileName(caminho))))
{
var csv = new CsvReader(new StreamReader(caminho), new CsvHelper.Configuration.Configuration { Delimiter = ";" });

csv.Read();

foreach (var h in csv.Context.HeaderRecord)
dtComColunas.Columns.Add(h, typeof(string));

dtComColunas.Rows.Add(csv.Context.HeaderRecord.Select(h => csv.GetField<string>(h)).ToArray());

while (csv.Read())
dtComColunas.Rows.Add(csv.Context.HeaderRecord.Select(h => csv.GetField<string>(h)).ToArray());

return dtComColunas;
}

Erro informado...

Exception User-unhandled
System.NullReferenceException: 'Referência de objeto não definida para uma instância de um objeto.'
<Temporary local of type 'string[]'> was null.
Paulo Freitas

Paulo Freitas

Curtidas 0

Melhor post

Stella Oliveira

Stella Oliveira

23/07/2019

Ei Paulo, não sei se vai ajudar você mas faz o seguinte.. quando você receber um arquivo trata ele com o tipo HttpPostedFileBase, olha como ficaria:

Recomendo você fazer o debug para entender o fluxo, passando seu arquivo csv no método indicado.

 public async void CadastroPlanilhaCSV(HttpPostedFile planilha)
        {
            using (var arquivo = new StreamReader(planilha.InputStream, Encoding.Default, true))
            {
                using (var csv = new CsvReader(arquivo))
                {
                    while (csv.Read())
                    {
                        var records = csv.GetRecord<dynamic>();
                        var a = (IDictionary<string, object>)records;

                        List<string> valorCSV = new List<string>();

                        foreach (var chave in a.Keys)
                        {
                            valorCSV.Add(chave);
                        }
                    }
                }
            }
        }


Abraço.
GOSTEI 1

Mais Respostas

Paulo Freitas

Paulo Freitas

16/04/2019

muito obrigado pela dica!!!
aprendendo ainda... kkkk
abração!!!
GOSTEI 0
POSTAR