Hi,
I cannot properly write to Worksheet with values by codes below, while there're values to vCO, vRO, vSI, and vIT (vIT is having value to InnerText). Why?
I cannot properly write to Worksheet with values by codes below, while there're values to vCO, vRO, vSI, and vIT (vIT is having value to InnerText). Why?
using (SpreadsheetDocument spreadSheet = SpreadsheetDocument.Open(@Path0, true)) { if (vIT != "") { index = InsertSharedStringItem(vIT, shareStringPart); } IEnumerable<Sheet> sheets = spreadSheet.WorkbookPart.Workbook.Descendants<Sheet>().Where(s => s.Name == vSN); // if the specific sheet doesnot exist, create new if (sheets.Count() == 0) { InsertWorksheetCus(spreadSheet.WorkbookPart, vSN); } // get the worksheetPart WorksheetPart worksheetPart2 = (WorksheetPart)spreadSheet.WorkbookPart.GetPartById(sheets.First().Id); string columnName; uint rowIndex; if (vCO != "" && vRO != "") { columnName = vCO + vRO; rowIndex = Convert.ToUInt32(vRO); Cell cell = InsertCellInWorksheet(columnName, rowIndex, worksheetPart2); if (vSI != "") cell.StyleIndex = Convert.ToUInt32(vSI); if (index != 0) { cell.CellValue = new CellValue(index.ToString()); cell.DataType = new EnumValue<CellValues>(CellValues.SharedString); } worksheetPart2.Worksheet.Save(); } ... private static Cell InsertCellInWorksheet(string columnName, uint rowIndex, WorksheetPart worksheetPart) { DocumentFormat.OpenXml.Spreadsheet.Worksheet worksheet = worksheetPart.Worksheet; SheetData sheetData = worksheet.GetFirstChild<SheetData>(); string cellReference = columnName + rowIndex; Row row; if (sheetData.Elements<Row>().Where(r => r.RowIndex == rowIndex).Count() != 0) { row = sheetData.Elements<Row>().Where(r => r.RowIndex == rowIndex).First(); } else { row = new Row() { RowIndex = rowIndex }; sheetData.Append(row); } if (row.Elements<Cell>().Where(c => c.CellReference.Value == columnName + rowIndex).Count() > 0) { return row.Elements<Cell>().Where(c => c.CellReference.Value == cellReference).First(); } else { Cell refCell = null; foreach (Cell cell in row.Elements<Cell>()) { if (string.Compare(cell.CellReference.Value, cellReference, true) > 0) { refCell = cell; break; } } Cell newCell = new Cell() { CellReference = cellReference }; row.InsertBefore(newCell, refCell); worksheet.Save(); return newCell; } }
Many Thanks & Best Regards, Hua Min