Как удалить первый лист в excel C#

arthyrgrex

Client
Регистрация
12.05.2013
Сообщения
104
Благодарностей
31
Баллы
28
Привет.

Может кто подскажет, как удалить первый лист (worksheet) в excel файле с помощью C# ?

Вот видос буржуя на эту тему (в описание к видео есть полный код):

В References указал Microsoft.Office.Interop.Excel, а код работать не хочет.

На форуме тоже ответа не нашел.

Заранее спасибо.
 

Mikhail B.

Moderator
Регистрация
23.12.2014
Сообщения
14 328
Благодарностей
5 431
Баллы
113

arthyrgrex

Client
Регистрация
12.05.2013
Сообщения
104
Благодарностей
31
Баллы
28
Вот код, который удаляет первый лист из таблицы excel.
Код:
FileInfo file = new FileInfo(@"C:\price.xlsx");
using (ExcelPackage exPack = new ExcelPackage(file))
{
    // Получаем первый лист
    ExcelWorksheet ws1 = exPack.Workbook.Worksheets[1];
    // Удаляем первый лист
    exPack.Workbook.Worksheets.Delete(ws1);
    // Сохраняем файл
    exPack.Save();
}
спасибо, LaGir
Проверил - отлично работает.


Но лично у меня в распоряжении excel файл, при удалении первого листа в котором - возникает следующая ошибка:
Код:
Выполнение действия CSharp OwnCode A generic error occurred in GDI+.
Кто говорит, что это проблема с правами на файл и папку, кто - проблема с библиотекой EPPlus, кто - проблема в сохранении картинки в прайсе.

Перепробовал многое, но побороть так и не получилось.

Если кто-то подскажет решение этой ошибки - скину 10$ за совет.
 

ssXXXss

Client
Регистрация
23.12.2014
Сообщения
7 379
Благодарностей
2 039
Баллы
113
ну попробуй так
exPack.Save(@"C:\price_1.xlsx");
 

arthyrgrex

Client
Регистрация
12.05.2013
Сообщения
104
Благодарностей
31
Баллы
28

surrealmix

Client
Регистрация
07.03.2013
Сообщения
715
Благодарностей
409
Баллы
63
спасибо, но не прокатило
Попробуй так:

C#:
var file = new FileInfo(@"C:\price.xlsx");
using (var exPack = new ExcelPackage(file))
{
    var ws1 = exPack.Workbook.Worksheets[1];

    var drawingsList = ws1.Drawings.ToList();
    drawingsList.ForEach(x => ws1.Drawings.Remove(x));

    exPack.Workbook.Worksheets.Delete(ws1);
    exPack.Save();
}
 

ssXXXss

Client
Регистрация
23.12.2014
Сообщения
7 379
Благодарностей
2 039
Баллы
113
в студии твой код запустил, и всё норм работает

2019-02-10_211912.png
 

ssXXXss

Client
Регистрация
23.12.2014
Сообщения
7 379
Благодарностей
2 039
Баллы
113
да и в зенке всё на ура работает, какая версия либы ?

2019-02-10_220055.png
 

arthyrgrex

Client
Регистрация
12.05.2013
Сообщения
104
Благодарностей
31
Баллы
28
да и в зенке всё на ура работает, какая версия либы ?

Посмотреть вложение 36047
версия либы 4.5.3.1

я чуть раньше писал, что код рабочий - на созданных мной файлах прокатывает тоже
а вот на прайсе поставщика - работать не хочет
ради прикола скину тебе ссылку на сам прайс, чтобы убедился
 

arthyrgrex

Client
Регистрация
12.05.2013
Сообщения
104
Благодарностей
31
Баллы
28
Попробуй так:

C#:
var file = new FileInfo(@"C:\price.xlsx");
using (var exPack = new ExcelPackage(file))
{
    var ws1 = exPack.Workbook.Worksheets[1];

    var drawingsList = ws1.Drawings.ToList();
    drawingsList.ForEach(x => ws1.Drawings.Remove(x));

    exPack.Workbook.Worksheets.Delete(ws1);
    exPack.Save();
}
спасибо
отрабатывает с следующей ошибкой:
Код:
Выполнение действия CSharp OwnCode The given key was not present in the dictionary.
в ЛС скину ссылку на прайс
 

ssXXXss

Client
Регистрация
23.12.2014
Сообщения
7 379
Благодарностей
2 039
Баллы
113
надеюсь там майнеров нет, но проверил и реаольно не хотит работать
так скинь просто эти строки для кого шаб делаещь, пусть он проверит у себя, так как во первых надо принять разрешешениение на редактирование
потом скажет что иди на куй типо и что то ещё не нравится
 

ssXXXss

Client
Регистрация
23.12.2014
Сообщения
7 379
Благодарностей
2 039
Баллы
113
создай пустой файл и кинь сюда
 

ssXXXss

Client
Регистрация
23.12.2014
Сообщения
7 379
Благодарностей
2 039
Баллы
113
ошибка не в сохранении, вот тут ошибка
exPack.Workbook.Worksheets.Delete(ws1);
 

matt_stiffler

Новичок
Регистрация
15.10.2019
Сообщения
2
Благодарностей
0
Баллы
1
Всем привет!

Подскажите, как доработать код выше, чтобы он мог удалять листы с пробелами в названии?

А то мне пишет вот такую ошибку:
Выполнение действия CSharp OwnCode. Непредусмотренное объявление XML. Объявление XML должно быть первым узлом в документе, использование знаков пробела перед ним не допускается., строка 2, позиция 735.
 

Кто просматривает тему: (Всего: 1, Пользователи: 0, Гости: 1)