将 Excel 文件导出为 csv 会生成两倍的行数

将 Excel 文件导出为 csv 会生成两倍的行数

我对这个问题很是苦恼。

我有一张包含 994 行的 Excel 表,但是当我导出为 CSV 时,我得到了文本格式的 1880 行!

当然,现在我尝试重新创建原始 Excel 文件,我得到了 1880 行。

谁能告诉我这里可能发生什么事?


我刚刚找到了问题的根源:

原始文件的单元格内包含回车符,当导出为文本格式时,这些回车符会转换为新行。

现在到了最有趣的部分:文本文件已经翻译完毕,我需要将翻译后的文件重新导入 Excel,重新创建 *** 格式。有人知道我该怎么做吗?

答案1

我最终自己解决了这个问题。以下是出于文档目的的答案:

原因:

某些单元格包含换行符。导出为 CSV 时,换行符会转换为新行,而文件重新导入 Excel 时不会恢复这些新行,导致行数比原始行数多得多。

解决方案:

编写一个小应用程序,强制每行包含与原始文件完全相同数量的 TAB 字符。如果该行不包含预期数量的 TAB,则向其添加下一行,直到达到正确的 TAB 数量。插入占位符以标记内部换行符的位置。处理后,在 Excel 中打开,检查行数,然后查找并将占位符替换为换行符(Alt+010)。

以下是 C# 代码:它使用了 2 个 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;

}

这显然是一个快速而粗糙的解决方案,但它确实有效,并且可以相对容易地适应处理受到同样问题困扰的其他文件。

答案2

我遇到了同样的问题,我通过改变代码中的函数顺序(您需要先自动适应列然后应用文本换行)解决了这个问题,就像这样

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

然后我把它改成了这样:

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; 

我希望它能帮助那些想要生成 excel 文件并保留新行的人

相关内容