Exportar arquivo do Excel para csv gera o dobro de linhas

0

Estou batendo com a cabeça neste.

Eu tenho uma planilha do Excel com 994 linhas, mas quando eu exporto para CSV eu recebo 1880 linhas em formato de texto!

E, claro, agora que estou tentando recriar o arquivo original do Excel, recebo 1880 linhas.

Alguém pode me dizer o que pode estar acontecendo aqui?

Acabei de encontrar a fonte do problema:

O arquivo original contém o retorno de carro dentro das células e, quando exportado para o formato de texto, esses retornos de carro são convertidos em novas linhas.

Agora, a parte divertida: o arquivo de texto foi traduzido e eu preciso reimportar o arquivo traduzido no Excel, recriando o formato ***. Alguém sabe como eu poderia fazer isso?

    
por Sylverdrag 25.05.2011 / 15:03

2 respostas

1

Eu finalmente consertei o problema sozinho. Aqui está a resposta para fins de documentação:

Causa:

Algumas células continham quebras de linha. Na exportação para CSV, as quebras de linha foram convertidas em novas linhas, que não foram restauradas quando o arquivo foi reimportado no Excel, resultando em um número muito maior de linhas do que no original.

Solução:

Escreva um pequeno aplicativo que força cada linha a conter exatamente o mesmo número de caracteres TAB que o arquivo original. Se a linha não contiver o número esperado de TABs, adicione a próxima linha a ela até que o número adequado de TABs seja atingido. Insira um espaço reservado para marcar os locais onde as quebras de linha internas foram. Após o processamento, abra no Excel, verifique o número de linhas, localize e substitua o espaço reservado por uma quebra de linha (Alt + 010).

Aqui está o código C #: ele usa dois controles richtextbox:

    public void restoreLines{
    int nbTabs = 0;
    int nbPrevTabs = 0;
    int totalTabs = 0;
    int lineNb = 0;
    string content = "";

    string sSource = rtbSrc.Text;
    string[] lines = Regex.Split(sSource, "µ");
    foreach (string line in lines)
    {
        lineNb++;
        nbTabs = line.Length - line.Replace("\t", "").Length;
        totalTabs = nbPrevTabs + nbTabs;
        if (totalTabs == 15)
        {
            content += line.TrimEnd() + "##µ##";
                nbTabs = 0;
                nbPrevTabs = 0;
            totalTabs = 0;
        }
        else if (totalTabs > 15)
        {
            MessageBox.Show("Line #" + lineNb + " contains " + totalTabs + " tabs");
            break;
        }
        else
        {
            content += line.TrimEnd() + "##InnerCRLF##";
            nbPrevTabs += nbTabs;
            nbTabs = 0;
        }
    }
    rtbRTF.Text = content;

}

Esta é obviamente uma solução rápida e suja, mas faz o trabalho e pode ser adaptada de maneira relativamente fácil para lidar com outros arquivos que sofrem do mesmo problema.

    
por 26.05.2011 / 15:35
0

Eu tive o mesmo problema e consertei alterando a ordem das funções (você precisa primeiro ajustar automaticamente as colunas e depois aplicar o texto) no meu código, foi assim

objWorksheet.Cells["A1"].LoadFromDataTable (dtSrc, true);
objWorksheet.Cells.Style.Font.SetFromFont (new Font ("Calibri", 10));
objWorksheet.Cells["J:J"].Style.WrapText = true; 
objWorksheet.Cells.AutoFitColumns ();

Então eu mudei para isso:

objWorksheet.Cells["A1"].LoadFromDataTable (dtSrc, true);
objWorksheet.Cells.Style.Font.SetFromFont (new Font ("Calibri", 10));
objWorksheet.Cells.AutoFitColumns ();
objWorksheet.Cells["J:J"].Style.WrapText = true; 

Espero que ajude alguém que queira gerar arquivos do Excel e manter uma nova linha

    
por 19.06.2017 / 17:45