@xmdv

Как вставить строку в существующий Excel файл с помощью OpenXmlSDK?

Пытаюсь вставить строку в '*.xlsx' файл использую для этого OpenXml SDK.
Мой код:

using var document = SpreadsheetDocument.Open("dspreadsheet.xlsx", true);
    WorksheetPart worksheetPart = document.WorkbookPart.WorksheetParts.First();
    var sheetData = worksheetPart.Worksheet.Elements<SheetData>().First();
    InsertRow(sheetData, 5);
    worksheetPart.Worksheet.Save();


    static void InsertRow(SheetData sheetData, uint rowIndex)
    {
        Row row = new Row();    
                  
        Cell newCell = new Cell { DataType = CellValues.InlineString };            
        var inlineString = new InlineString();
        var text = new Text { Text = "some text for cell" };
        inlineString.Append(text);
        newCell.AppendChild(inlineString);
        row.AppendChild(newCell);        
                             
        var retRow = sheetData.Elements<Row>().ElementAt((int)rowIndex);    
        sheetData.InsertAfter(row, retRow);

        var rows = sheetData.Elements<Row>().ToArray();
        uint idx = 0;
        //here I set a sequentional RowIndex for each row
        // if I do not use this code error described below remains
        foreach (var r in rows) 
            r.RowIndex = ++idx;
    }


Я хочу добавить новую строку после 5-й строки. НЕо когда я открываю сгенерированный файл в Excel 2016, я получаю вот такую ошибку:

vCkNZ.png

Я могу открыть этот файл в LibreOffice Calc 6.4.3.2, но в нём нет добавленной строки.
Если использовать `sheetData.Append(row);` вместо `sheetData.InsertAfter(row, retRow);`, то это работает, и файл можно открыть в Excel. Но такой способ позволяет добавлять строки только в конец файла, а не в середину.
Может быть кто-то знает, как можно правильно вставлять строки в сущестующие .xlsx файлы? Заранее спасибо!
  • Вопрос задан
  • 539 просмотров
Решения вопроса 1
mindtester
@mindtester Куратор тега C#
http://iczin.su/hexagram_48
попробуйте так
using (var document = SpreadsheetDocument.Open("dspreadsheet.xlsx", true))
{
    WorksheetPart worksheetPart = document.WorkbookPart.WorksheetParts.First();
    var sheetData = worksheetPart.Worksheet.Elements<SheetData>().First();
    InsertRow(sheetData, 5);
    worksheetPart.Worksheet.Save();
}

    static void InsertRow(SheetData sheetData, uint rowIndex)
    {
        Row row = new Row();    
                  
        Cell newCell = new Cell { DataType = CellValues.InlineString };            
        var inlineString = new InlineString();
        var text = new Text { Text = "some text for cell" };
        inlineString.Append(text);
        newCell.AppendChild(inlineString);
        row.AppendChild(newCell);        
                             
        var retRow = sheetData.Elements<Row>().ElementAt((int)rowIndex);    
        sheetData.InsertAfter(row, retRow);
    }
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы