L'exportation d'un fichier Excel au format CSV génère deux fois plus de lignes

0

Je frappe ma tête sur celui-ci.

J'ai une feuille Excel avec 994 lignes, mais lorsque j'exporte au format CSV, je reçois 1880 lignes au format texte!

Et bien sûr, maintenant que j'essaie de recréer le fichier Excel d'origine, j'ai 1880 lignes.

Tout le monde peut me dire ce qui pourrait se passer ici?


Je viens de trouver la source du problème:

Le fichier d'origine contient des retours chariot dans les cellules et, lorsqu'ils sont exportés au format texte, ces retours chariot sont convertis en nouvelles lignes.

Maintenant la partie amusante: le fichier texte a été traduit et je dois réimporter le fichier traduit dans Excel, en recréant le format ***. Quelqu'un sait comment je pourrais faire ça?

Sylverdrag
la source
Pouvez-vous modifier votre question pour nous dire ce que disent les 994 lignes supplémentaires du fichier CSV?
Chris Ting
@Chris Ting 886 lignes supplémentaires sûrement? À mon avis, il y a des données ailleurs sur la feuille, peut-être juste un caractère espace.
James
@Chris: Je souhaite, mais je n'ai aucune idée non plus, c'est en letton, donc c'est assez difficile à comprendre. Tout ce que je sais, c'est que la première ligne et la dernière ligne du fichier sont identiques dans le fichier Excel et dans le fichier texte. Je ne peux pas publier le contenu du fichier à cause de l'accord de confidentialité.
Sylverdrag
@ James: Cela ne ressemble à aucun personnage de l'espace pour moi.
Sylverdrag
Ces lignes supplémentaires sont-elles vides ou contiennent-elles des doublons? Avez-vous essayé de définir le codage sur UTF-8?
Ellesa

Réponses:

1

J'ai finalement résolu le problème moi-même. Voici la réponse à des fins de documentation:

Cause:

Certaines cellules contenaient des sauts de ligne. Lors de l'exportation au format CSV, les sauts de ligne ont été convertis en nouvelles lignes, qui n'ont pas été restaurées lors de la réimportation du fichier dans Excel, ce qui a entraîné un nombre de lignes beaucoup plus important que dans le fichier d'origine.

Solution:

Ecrivez une petite application qui oblige chaque ligne à contenir exactement le même nombre de caractères de tabulation que le fichier d'origine. Si la ligne ne contient pas le nombre attendu de TABs, ajoutez la ligne suivante jusqu'à ce que le nombre approprié de TABs soit atteint. Insérez un espace réservé pour marquer les endroits où se trouvaient les sauts de ligne internes. Après le traitement, ouvrez dans Excel, vérifiez le nombre de lignes, puis recherchez et remplacez l’espace réservé par un saut de ligne (Alt + 010).

Voici le code C #: Il utilise 2 contrôles 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;

}

C'est évidemment une solution rapide et sale, mais elle fait le travail et peut être relativement facilement adaptée pour gérer d'autres fichiers souffrant du même problème.

Sylverdrag
la source
0

J'ai eu le même problème et je l'ai corrigé en changeant l'ordre des fonctions (vous devez d'abord ajuster automatiquement les colonnes puis appliquer le retour à la ligne) dans mon code, c'était comme ça

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 ();

Puis je l'ai changé en ceci:

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; 

J'espère que cela aidera quelqu'un qui souhaite générer un fichier Excel et conserver une nouvelle ligne

Warix3
la source