Я новичок в программировании и создаю небольшое консольное приложение на 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
Пакет EPPlus NuGet автоматически терпит неудачу при .Save() ⇐ C#
Место общения программистов C#
-
Anonymous
1768301132
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();
}
}
Подробнее здесь: [url]https://stackoverflow.com/questions/79866855/epplus-nuget-package-silently-failing-on-save[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия