Я наконец-то решил проблему самостоятельно. Вот ответ для целей документации:
Причина:
Некоторые ячейки содержали разрывы строк. При экспорте в CSV разрывы строк были преобразованы в новые строки, которые не были восстановлены при повторном импорте файла в Excel, что привело к гораздо большему количеству строк, чем в оригинале.
Решение:
Напишите небольшое приложение, которое заставляет каждую строку содержать столько же символов табуляции, что и исходный файл. Если строка не содержит ожидаемого количества вкладок, добавляйте следующую строку до тех пор, пока не будет достигнуто нужное количество вкладок. Вставьте заполнитель, чтобы отметить места, где были внутренние разрывы строк. После обработки откройте в 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;
}
Это, очевидно, быстрое и грязное решение, но оно выполняет свою работу и может быть относительно легко адаптировано для обработки других файлов, страдающих от той же проблемы.