2016-02-03 2 views
1

У меня есть файл .xlsx, который уже имеет некоторые данные. Я хочу ввести некоторые данные в ячейку I1. enter image description hereКак добавить новую ячейку в существующую строку в файле .xlsx с помощью открытого xml sdk?

Update: Я попытался это:

WorkbookPart workbookPart = spreadsheetDocument.WorkbookPart; 
WorksheetPart worksheetPart = workbookPart.WorksheetParts.First();     
SheetData sheetData = worksheetPart.Worksheet.Elements<SheetData>().First(); 

Row row1 = new Row() 
{ 
    RowIndex = (UInt32Value)1U 
}; 

Cell cell = new Cell() { CellReference = "I1" }; 
CellFormula cellformula = new CellFormula(); 
cellformula.Text = "IF(A2 = A1,1,0)"; 
CellValue cellValue = new CellValue(); 
cellValue.Text = "0"; 
cell.Append(cellformula); 
cell.Append(cellValue); 

row1.Append(cell); 

sheetData.Append(row1); 

Но это не работает.

Просьба предоставить образец кода с ответом.

+0

Показать, что вы пробовали до сих пор. – Mangesh

+0

@MangeshGhotage ... Я добавил кодировку, что я пробовал ... – user1780538

ответ

1

Вы создаете новый объект , хотя он уже существует в вашем документе. Затем вы даете ему RowIndex, который также уже существует, что означает, что вы получите поврежденный файл (у вас не может быть двух строк с одним и тем же индексом).

Вы должны найти существующий и добавить новый Cell в том, что вместо того, чтобы создавать совершенно новый . Самый простой способ сделать это - позвонить GetFirstChild<Row> по телефону sheetData.

Как и в стороне, я также не буду писать CellValue на номер Cell, так как вы используете формулу. В этом случае Value используется Excel, чтобы предотвратить его пересчет формулы при загрузке листа. В вашем примере, хотя ваше значение неверно. Опущение значения в целом, вероятно, самый простой способ гарантировать правильность, поскольку Excel будет вычислять формулу, когда лист загружается.

Это приводит к следующему коду:

using (SpreadsheetDocument spreadsheetDocument = SpreadsheetDocument.Open(filename, true)) 
{ 
    WorkbookPart workBookPart = spreadsheetDocument.WorkbookPart; 

    WorkbookPart workbookPart = spreadsheetDocument.WorkbookPart; 
    WorksheetPart worksheetPart = workbookPart.WorksheetParts.First(); 
    SheetData sheetData = worksheetPart.Worksheet.Elements<SheetData>().First(); 

    //find the first row in the sheet data 
    Row row1 = sheetData.GetFirstChild<Row>(); 

    //create a new cell 
    Cell cell = new Cell() { CellReference = "I1" }; 
    CellFormula cellformula = new CellFormula(); 
    cellformula.Text = "IF(A2 = A1,1,0)"; 
    cell.Append(cellformula); 

    //append the cell to the row 
    row1.Append(cell); 
} 
+0

Теперь я понял, где я был неправ. Вы предоставили мне решение именно то, что мне было нужно. Благодаря! – user1780538

Смежные вопросы