Пакет EPPlus NuGet автоматически терпит неудачу при .Save()C#

Место общения программистов C#
Ответить
Anonymous
 Пакет EPPlus NuGet автоматически терпит неудачу при .Save()

Сообщение Anonymous »

Я новичок в программировании и создаю небольшое консольное приложение на C# в Visual Studio. В рамках процесса приложения оно копирует шаблон файла Excel и сохраняет копии в трех разных путях к файлам (с использованием пакета EPPlus из библиотеки NuGet). После этого происходит некоторая обработка данных, после которой данные удаляются из каждой созданной копии таблицы. 2 из 3 методов удаления работают отлично, однако последний, который, по сути, следует той же логике, что и первые 2, продолжает молча сбой в .Save(). Приложение перестает работать, даже не возвращая метод обратно в основной. В приведенном ниже фрагменте кода вы увидите, что я добавил WriteLines вокруг сохранения, поэтому я могу подтвердить, что он достигает сохранения и действительно пишет «собирается сохранить» на консоль, но терпит неудачу до достижения «сохранено».
Я потратил буквально часы, пытаясь понять это сейчас, второй пилот предложил разницу в структуре рабочего листа, однако нет именованных диапазонов, таблиц, объединенных ячеек, отформатированных ячеек, мешающих диапазону удаленные строки.
Сообщений об ошибках также не появилось, и я попробовал попытаться явно написать любое сообщение об исключении, но и там никаких результатов не было.
Я также пытался удалить «фантомные формулы» из листа Excel.
Я также пробовал удалять строки другим способом, сохраняя номер строки в списке, а затем удаляя строки вне цикла — все равно безуспешно.
Согласно исследованию, которое я провел на данный момент сделано, я считаю, что это связано с EPPlus, а не с самим кодом.
Я использую EPPlus 8.4.1
EDIT: дополнительная информация: строки успешно удаляются из электронной таблицы, поэтому кажется, что она работает, но программа все равно завершает работу раньше.
public static void FilterErrorData()
{
// ascertain target Excel.
var files = Directory.GetFiles(FileManager.errorOutputPath);
var file = files[0];

using (ExcelPackage package = new ExcelPackage(new FileInfo(file)))
{
ExcelWorksheet ws = package.Workbook.Worksheets["Sheet1"];

// starting at the end of the worksheet, iterate through until row 13 (first data row).
for (int row = ws.Dimension.End.Row; row >= 13; row--)
{
string a = ws.Cells[row, 2].Value?.ToString().Trim() ?? "";
string b = ws.Cells[row, 9].Value?.ToString().Trim() ?? "";
ab currentab = new ab(a, b);

if (!Errors.ContainsKey(ab))
{
ws.DeleteRow(row);
}
else
{
// Retreieve error message from dictionary.
string DataIssue = Errors[ab];
ws.Cells[row, 26].Value = DataIssue;
}
}

Console.WriteLine("About to save");
package.Save();
Console.WriteLine("Saved");

}
}

Пример одного из других методов, который работает нормально:
public static void FilterDataBelowThreshold()
{
// ascertain target Excel.
var files = Directory.GetFiles(FileManager.unprocessedOutputPath);
var file = files[0];

Dictionary ToKeep = new Dictionary();

foreach (var pair in FileManager.abLimits)
{
if (pair.Value < FileManager.threshold)
{
ToKeep.Add(pair.Key, pair.Value);
}
}

using (ExcelPackage package = new ExcelPackage(new FileInfo(file)))
{
ExcelWorksheet ws = package.Workbook.Worksheets["Sheet1"];

// starting at the end of the worksheet, iterate through until row 13 (first data row).
for (int row = ws.Dimension.End.Row; row >= 13; row--)
{
string a = ws.Cells[row, 2].Value?.ToString().Trim() ?? "";
string b = ws.Cells[row, 9].Value?.ToString().Trim() ?? "";
ab currentab = new ab(a, b);

if (!ToKeep.ContainsKey(currentab))
{
ws.DeleteRow(row);
}
}
package.Save();
}
}


Подробнее здесь: https://stackoverflow.com/questions/798 ... ng-on-save
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»