Anoob Aliyar Ответов: 2

Как удалить строку из файла excel с помощью Open Office XML SDK


Я написал приведенный ниже код для удаления строки из электронной таблицы excel с помощью OOXML . Я могу удалить данные строки , однако строка все еще существует как пустая строка. Пожалуйста, помогите мне полностью удалить строку из файла excel.
public static void DeleteRowFromExcel(string docName, string sheetName, uint rowIndex)
    {
        // Open the document for editing.
        using (SpreadsheetDocument document = SpreadsheetDocument.Open(docName, true))
        {
            IEnumerable<sheet> sheets = document.WorkbookPart.Workbook.GetFirstChild<sheets>().Elements<sheet>().Where(s => s.Name == sheetName);
            if (sheets.Count() == 0)
            {
                // The specified worksheet does not exist.
                return;
            }
            string relationshipId = sheets.First().Id.Value;
            WorksheetPart worksheetPart = (WorksheetPart)document.WorkbookPart.GetPartById(relationshipId);
            Row row=GetRow(worksheetPart,rowIndex);
            row.RemoveAllChildren();
            worksheetPart.Worksheet.Save();                
        }

    }</sheet></sheets></sheet>

Michael_Davies

Просто предположение; попробуйте row.Remove(); без части AllChildren.

Maciej Los

Мой виртуальный 5!
Опубликуйте его как asnwer, и я обещаю поднять его!

Anoob Aliyar

Спасибо Майклу за ваш ответ. Я попробовал row.Remove() , однако строка все еще существует как пустая строка.

Michael_Davies

Оглядываясь вокруг, кажется, что нет никакого окончательного ответа на этот вопрос;

http://codekea.com/53jeBMZL3gND/how-to-delete-a-row-in-excel-file-with-open-xml-sdk.html

Вышесказанное не помогает, так как не дает и пример просто констатирует проблему, связанную с удалением строки.

Единственный другой пример кода, который я могу найти, использует row.Remove (), дайте ему вихрь.

kingsa

У вас есть решение для этого ?? bcoz я тоже поражен в том же районе !!!

2 Ответов

Рейтинг:
1

M.Schener

Извините за мой английский, но я получаю результат для этой проблемы следующим образом:
1) Когда я удаляю одну строку за другой.Remove(), то для всех следующих строк я изменяю свойство RowIndex на RowIndex.Value -= 1;
2) для всех ячеек всех следующих строк я также изменяю свойство CellReference, уменьшая его на -1. Свойство CellReference хранится как адрес ячейки Excel.

Например, если мне нужно удалить четвертую строку в листе excel, так что для строки.Параметр rowindex.Значение = 4. я звоню подряд.Удалить(). Для следующего ряда с рядом.Параметр rowindex.Значение = 5, я поставил параметр rowindex.Значение, равное 4, так и для всех его клеток менять CellReference.Значение как 'А5' -&ГТ; 'А4', 'Б5' -&ГТ; 'В4' и так далее.


Рейтинг:
0

mhassanist

Эта логика сработала для меня

<pre lang="c#">
подряд.Удалить();

for (uint j = i; j < rowsCount-1; j++)
{
строки.ToArray()[j].RowIndex.Value = строки.ToArray()[j].RowIndex.Value - 1;

по каждому элементу (ячейке с В строк.ToArray()[j])
{
c.CellReference.Значение = c.CellReference.Ценность.Подстрока(0, 1) +
(Уинт.Синтаксический анализ(гр.CellReference.Ценность.Подстрока(1, c.CellReference.Ценность.Длина - 1))-1);


}
}
rowsCount--;
рабочий лист.Рабочий лист.Сохранить();