private void writeFrozenFirstColumn(OpenXmlWriter writer) { if (!_forzenFirstColumn) { return; } writer.WriteStartElement(new SheetViews()); var tabSelectedAtt = new OpenXmlAttribute("tabSelected", null, 1.ToString()); var workBookViewIdAtt = new OpenXmlAttribute("workbookViewId", null, 0.ToString()); writer.WriteStartElement(new SheetView(), new List <OpenXmlAttribute>() { tabSelectedAtt, workBookViewIdAtt }); var xSplitAtt = new OpenXmlAttribute("xSplit", null, 1.ToString()); var topLeftCellAtt = new OpenXmlAttribute("topLeftCell", null, "B1"); var activePane = new OpenXmlAttribute("activePane", null, "topRight"); var state = new OpenXmlAttribute("state", null, "frozen"); writer.WriteStartElement(new Pane(), new List <OpenXmlAttribute>() { xSplitAtt, topLeftCellAtt, activePane, state }); writer.WriteEndElement(); writer.WriteEndElement(); writer.WriteEndElement(); }
public void EndWritingWithoutTemplate() { _writer.WriteEndElement(); _writer.WriteEndElement(); _writer.Close(); }
public void CreateSheets(string filename, string sheetname, int sheetid) { using (SpreadsheetDocument myDoc = SpreadsheetDocument.Open(filename, true)) { WorkbookPart workbookPart = myDoc.WorkbookPart; if (sheetid == 1) { workbookPart.Workbook = new Workbook(); } Workbook workbook = myDoc.WorkbookPart.Workbook; //WorksheetPart worksheetPart = workbookPart.WorksheetParts.First(); OpenXmlWriter writer = OpenXmlWriter.Create(workbookPart); writer.WriteStartElement(workbook); writer.WriteStartElement(new Sheets()); writer.WriteElement(new Sheet() { Name = sheetname, SheetId = (uint)sheetid }); // this is for Sheets writer.WriteEndElement(); // this is for Workbook writer.WriteEndElement(); writer.Close(); myDoc.Close(); } }
public void Write(Sheet sheet) { if (sheet == null) { throw new ArgumentNullException(nameof(sheet)); } writer.WriteStartElement(sheetTemplate); if (sheet.Columns?.Any() ?? false) { Write(sheet.Columns); } if (sheet.Rows?.Any() ?? false) { Write(sheet.Rows); } if (sheet.MergeCells?.Any() ?? false) { Write(sheet.MergeCells); } writer.WriteEndElement(); writer.Close(); }
private void WriteColumnsPart(OpenXmlWriter openXmlWriter) { const int filterButtonWidth = 3; openXmlWriter.WriteStartElement(new Columns()); foreach (var propertyMap in this.orderedPropertyMaps) { if (!this.columnWidths.TryGetValue(propertyMap.PropertyData.IndexWrite, out var textLength)) { textLength = 0; } if (this.worksheetStyle.ShouldAutoFilter) { textLength += filterButtonWidth; } var calculatedColumnWidth = CalculateColumnWidth(textLength, propertyMap.PropertyData.Style.Font); var resolvedColumnWidth = ResolveColumnWidth(calculatedColumnWidth, this.worksheetStyle.MinColumnWidth, this.worksheetStyle.MaxColumnWidth); var columnIndexText = propertyMap.PropertyData.IndexWrite.ToString(); openXmlWriter.WriteStartElement(new Column(), new List <OpenXmlAttribute>() { new OpenXmlAttribute("min", null, columnIndexText), new OpenXmlAttribute("max", null, columnIndexText), new OpenXmlAttribute("width", null, resolvedColumnWidth.ToString()), new OpenXmlAttribute("bestFit", null, ConvertBoolToOpenXmlFormat(true)), new OpenXmlAttribute("customWidth", null, ConvertBoolToOpenXmlFormat(true)), }); openXmlWriter.WriteEndElement(); // column } openXmlWriter.WriteEndElement(); // columns }
private void writeTables(OpenXmlWriter writer, WorksheetPart part, ref int tableCount) { if (!_tables.Any()) { return; } var countAtt = new OpenXmlAttribute("count", null, _tables.Count.ToString()); writer.WriteStartElement(new TableParts(), new List <OpenXmlAttribute>() { countAtt }); foreach (var table in _tables) { var tableId = "table" + tableCount; var tableDefinition = part.AddNewPart <TableDefinitionPart>(tableId); tableDefinition.Table = table.Value.GetTableDefinition(tableCount, table.Key.ColumnIndex, table.Key.RowIndex); var idAtt = new OpenXmlAttribute("id", "http://schemas.openxmlformats.org/officeDocument/2006/relationships", tableId); writer.WriteStartElement(new TablePart(), new List <OpenXmlAttribute>() { idAtt }); writer.WriteEndElement(); tableCount++; } writer.WriteEndElement(); }
/// <summary> /// 共享字符串 /// </summary> /// <param name="sharedStringTablePart"></param> private void GenerateSharedStringTablePartContent(SharedStringTablePart sharedStringTablePart) { using (OpenXmlWriter writer = OpenXmlWriter.Create(sharedStringTablePart)) { // SharedStringTable 开始 writer.WriteStartElement(new SharedStringTable() { Count = totalCount, UniqueCount = (uint)stringIndexDic.Keys.Count }); foreach (var str in stringIndexDic.Keys) { // SharedStringItem 开始 writer.WriteStartElement(new SharedStringItem()); // 写入 Text writer.WriteElement(new Text(str)); // SharedStringItem 结束 writer.WriteEndElement(); } // SharedStringTable 结束 writer.WriteEndElement(); writer.Close(); } }
private void writeColumns(OpenXmlWriter writer) { writer.WriteStartElement(new Columns()); for (var i = 1; i <= _maxColumnIndex; i++) { var width = 20d; if (_maxNumberOfCharsPerColumn.ContainsKey(i)) { width = _maxNumberOfCharsPerColumn[i] > 255 ? 255 : _maxNumberOfCharsPerColumn[i]; width = width * DBL_AutoWidthCharacterScalingNumber; } var minAtt = new OpenXmlAttribute("min", null, i.ToString()); var maxAtt = new OpenXmlAttribute("max", null, i.ToString()); if (MaxColumnWidth.HasValue && width > MaxColumnWidth) { width = MaxColumnWidth.Value; } var widthAtt = new OpenXmlAttribute("width", null, width.ToString(CultureInfo.InvariantCulture)); writer.WriteStartElement(new Column(), new List <OpenXmlAttribute>() { minAtt, maxAtt, widthAtt }); writer.WriteEndElement(); } writer.WriteEndElement(); }
static void WriteRandomValuesSAX(string filename, int numRows, int numCols) { using (SpreadsheetDocument myDoc = SpreadsheetDocument.Open(filename, true)) { WorkbookPart workbookPart = myDoc.WorkbookPart; WorksheetPart worksheetPart = workbookPart.WorksheetParts.Last(); OpenXmlWriter writer = OpenXmlWriter.Create(worksheetPart); Row r = new Row(); Cell c = new Cell(); CellValue v = new CellValue("Test"); c.AppendChild(v); writer.WriteStartElement(new Worksheet()); writer.WriteStartElement(new SheetData()); for (int row = 0; row < numRows; row++) { writer.WriteStartElement(r); for (int col = 0; col < numCols; col++) { writer.WriteElement(c); } writer.WriteEndElement(); } writer.WriteEndElement(); writer.WriteEndElement(); writer.Close(); } }
public void CreateSharedStringPart(WorkbookPart workbookPart, int sharedStringMaxIndex, Dictionary <string, int> sharedStringDictionary) { try { if (sharedStringMaxIndex > 0) { SharedStringTablePart sharedStringTablePart = workbookPart.AddNewPart <SharedStringTablePart>(); using (OpenXmlWriter openXmlWriter = OpenXmlWriter.Create(sharedStringTablePart)) { openXmlWriter.WriteStartElement(new SharedStringTable()); foreach (var item in sharedStringDictionary) { openXmlWriter.WriteStartElement(new SharedStringItem()); openXmlWriter.WriteElement(new Text(item.Key)); openXmlWriter.WriteEndElement(); } openXmlWriter.WriteEndElement(); } } } catch (Exception exception) { LogWriter.LogError("Unable to create 'SharedStringPart' in Excel report."); throw exception; } }
private static void Finish(OpenXmlWriter writer, SpreadsheetDocument xl, WorksheetPart worksheetpart) { // end worksheet writer.WriteEndElement(); writer.Close(); // write root element writer = OpenXmlWriter.Create(xl.WorkbookPart); writer.WriteStartElement(new Workbook()); writer.WriteStartElement(new Sheets()); writer.WriteElement(new Sheet { Name = "Sheet1", SheetId = 1, Id = xl.WorkbookPart.GetIdOfPart(worksheetpart) }); // end Sheets writer.WriteEndElement(); // end Workbook writer.WriteEndElement(); writer.Close(); xl.Close(); }
public static void AddLine(OpenXmlWriter writer, int row, string[] values) { List <OpenXmlAttribute> attributes = new List <OpenXmlAttribute> { new OpenXmlAttribute("r", null, row.ToString()) }; writer.WriteStartElement(new Row(), attributes); int col1 = 1; foreach (var cols in values) { attributes = new List <OpenXmlAttribute> { new OpenXmlAttribute("t", null, "str"), new OpenXmlAttribute("r", "", GetColumnName(col1) + row), new OpenXmlAttribute("s", "", "1") // Bold (Style 1) }; writer.WriteStartElement(new Cell(), attributes); writer.WriteElement(new CellValue(cols)); writer.WriteEndElement(); col1++; } writer.WriteEndElement(); }
public void WriteCellValue(OpenXmlWriter openXmlWriter, string cellValue, int styleIndex, ref int sharedStringMaxIndex, Dictionary <string, int> sharedStringDictionary) { try { List <OpenXmlAttribute> openXmlAttributes = new List <OpenXmlAttribute>(); openXmlAttributes.Add(new OpenXmlAttribute("s", null, styleIndex.ToString())); int parseResult; if (int.TryParse(cellValue, out parseResult)) { openXmlWriter.WriteStartElement(new Cell(), openXmlAttributes); openXmlWriter.WriteElement(new CellValue(cellValue)); openXmlWriter.WriteEndElement(); } else { openXmlAttributes.Add(new OpenXmlAttribute("t", null, "s")); openXmlWriter.WriteStartElement(new Cell(), openXmlAttributes); if (!sharedStringDictionary.ContainsKey(cellValue)) { sharedStringDictionary.Add(cellValue, sharedStringMaxIndex); sharedStringMaxIndex += 1; } openXmlWriter.WriteElement(new CellValue(sharedStringDictionary[cellValue].ToString())); openXmlWriter.WriteEndElement(); } } catch (Exception exception) { LogWriter.LogError("Unable to write cell value to Excel report."); throw exception; } }
private void CreateHeaderRow(IEnumerable <ApplicationFieldDefinition> applicationFields, OpenXmlWriter writer, int rowIdx, string applicationName, string schemaId) { var xmlAttributes = new List <OpenXmlAttribute> { new OpenXmlAttribute("r", null, rowIdx.ToString(CultureInfo.InvariantCulture)) }; writer.WriteStartElement(new Row(), xmlAttributes); foreach (var applicationField in applicationFields.Where(ShouldShowField())) { var headerStyleId = "8"; if (applicationField.Attribute.StartsWith("#old") && ApplicationConfiguration.ClientName == "hapag" && "r0042ExportExcel".Equals(schemaId)) { headerStyleId = "2"; } //Exporting to Excel, even if field is hidden xmlAttributes = new List <OpenXmlAttribute> { // add new datatype for cell new OpenXmlAttribute("t", null, "str"), // add header style new OpenXmlAttribute("s", null, headerStyleId) }; writer.WriteStartElement(new Cell(), xmlAttributes); writer.WriteElement(new CellValue(GetI18NLabel(applicationField, applicationName))); // this is for Cell writer.WriteEndElement(); } // end Row writer.WriteEndElement(); }
public void EndWriteHead() { _writer.WriteEndElement(); //end of SheetData _writer.WriteEndElement(); //end of worksheet _writer.Close(); _spreadsheet.Dispose(); }
public void WriteRandomValuesSAX(string filename, int numRows, int numCols, int sheetid, int countRows) { using (SpreadsheetDocument myDoc = SpreadsheetDocument.Open(filename, true)) { WorkbookPart workbookPart = myDoc.WorkbookPart; WorksheetPart worksheetPart = workbookPart.WorksheetParts.Last(); OpenXmlWriter writer = OpenXmlWriter.Create(worksheetPart); Row r = new Row(); Cell c = new Cell(); CellValue v = new CellValue("Test"); c.AppendChild(v); var s = new SheetData(); writer.WriteStartElement(new Worksheet()); writer.WriteStartElement(s); //writer.WriteStartElement(new Sheet()); for (int row = countRows; row < numRows; row++) { writer.WriteStartElement(r); for (int col = 0; col < numCols; col++) { writer.WriteElement(c); } writer.WriteEndElement(); } //writer.WriteEndElement(); writer.WriteEndElement(); writer.WriteEndElement(); writer.Close(); //writer = OpenXmlWriter.Create(myDoc.WorkbookPart); //writer.WriteStartElement(new Workbook()); //writer.WriteStartElement(new Sheets()); //writer.WriteElement(new Sheet() //{ // Name = $"Sheet21{sheetid}", // SheetId = (uint)sheetid, // Id = myDoc.WorkbookPart.GetIdOfPart(worksheetPart) //}); //// this is for Sheets //writer.WriteEndElement(); //// this is for Workbook //writer.WriteEndElement(); //writer.Close(); myDoc.Close(); } }
private void writeSheetProperties(OpenXmlWriter writer) { writer.WriteStartElement(new SheetProperties()); writer.WriteStartElement(new OutlineProperties(), new List <OpenXmlAttribute>() { new OpenXmlAttribute("summaryBelow", null, 0.ToString()) }); writer.WriteEndElement(); writer.WriteEndElement(); }
/// <summary> /// /// </summary> /// <param name="csvFilePath"></param> /// <param name="xlsxFilePath"></param> private static void CreateWorkBook(string csvFilePath, string xlsxFilePath) { using (var workbook = SpreadsheetDocument.Create(xlsxFilePath, SpreadsheetDocumentType.Workbook)) { List <OpenXmlAttribute> attributeList; workbook.AddWorkbookPart(); WorksheetPart workSheet = workbook.WorkbookPart.AddNewPart <WorksheetPart>(); using (OpenXmlWriter writer = OpenXmlWriter.Create(workSheet)) { writer.WriteStartElement(new Worksheet()); writer.WriteStartElement(new SheetData()); using (FileStream fsRead = new FileStream(csvFilePath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite)) using (StreamReader sr = new StreamReader(fsRead)) using (CsvReader csvReader = new CsvReader(sr, CultureInfo.InvariantCulture)) { string[] values; long row = 1; while (csvReader.Read()) { attributeList = new List <OpenXmlAttribute>(); // this is the row index attributeList.Add(new OpenXmlAttribute("r", null, row.ToString())); writer.WriteStartElement(new Row(), attributeList); // Get the CSV record values = csvReader.Context.Record; for (long col = 1; col < values.Count(); col++) { attributeList = new List <OpenXmlAttribute>(); // this is the data type ("t"), with CellValues.String ("str") attributeList.Add(new OpenXmlAttribute("t", null, "str")); // Write out the cell writer.WriteStartElement(new Cell(), attributeList); writer.WriteElement(new CellValue(values[col].ToString())); writer.WriteEndElement(); } writer.WriteEndElement(); // Row row++; } } writer.WriteEndElement(); // SheetData writer.WriteEndElement(); // Worksheet } CreateWorkSheet(workbook, workSheet); } }
private void FinishBuilding() { _writer.WriteEndElement(); // end SheetData if (_excelImages.Count > 0) { _writer.WriteElement(GetDrawing()); } _writer.WriteEndElement(); // end Worksheet _writer.Close(); _buildingIsFinished = true; }
public void Close() { _workBookWriter.WriteEndElement(); // End Writing Sheets _workBookWriter.WriteEndElement(); // End Writing Workbook _workBookWriter.Close(); _sharedStringWriter.Close(); _styleSheetWriter.WriteAndClose(); _xl.Close(); }
public void Initialize() { _writer.WriteStartElement(new SharedStringTable()); // Write initial empty string shared string _sharedStringIdx.Add(string.Empty, 0); _writer.WriteStartElement(new SharedStringItem()); { _writer.WriteElement(new Text { Text = string.Empty }); } _writer.WriteEndElement(); }
private void writeSheetData(OpenXmlWriter writer, SpreadsheetStylesManager stylesManager, SpreadsheetHyperlinkManager hyperlinkManager, DrawingsManager drawingsManager) { writer.WriteStartElement(new SheetData()); foreach (var row in _rows) { row.Value.WriteRow(writer, row.Key.ColumnIndex, row.Key.RowIndex, stylesManager, hyperlinkManager, drawingsManager); } foreach (var table in _tables) { if (!table.Value.IsInStreamingMode) { continue; } using (var enumerator = table.Value.GetStreamingEnumerator()) { var tableRowPosition = table.Value.StreamedRowsSoFar; while (enumerator.MoveNext()) { var row = enumerator.Current; row.WriteRow(writer, table.Key.ColumnIndex, table.Key.RowIndex + tableRowPosition + 1, stylesManager, hyperlinkManager, drawingsManager); tableRowPosition++; } } } writer.WriteEndElement(); }
private void writeMergedCells(OpenXmlWriter writer) { var mergedCellRanges = new Dictionary <SpreadsheetLocation, System.Drawing.Size>(); foreach (var row in _rows) { for (var i = 0; i < row.Value.RowCells.Count; i++) { var cell = row.Value.RowCells[i]; if (cell.MergedCellsRange != null) { mergedCellRanges[new SpreadsheetLocation(row.Key.RowIndex, row.Key.ColumnIndex + i)] = cell.MergedCellsRange.Value; } } } if (mergedCellRanges.Any()) { writer.WriteStartElement(new MergeCells()); foreach (var cellRange in mergedCellRanges) { var cell1Name = SpreadsheetHelper.ExcelColumnFromNumber(cellRange.Key.ColumnIndex) + cellRange.Key.RowIndex; var cell2Name = SpreadsheetHelper.ExcelColumnFromNumber(cellRange.Key.ColumnIndex + cellRange.Value.Width) + (cellRange.Key.RowIndex + cellRange.Value.Height - 1); var range = cell1Name + ":" + cell2Name; var mergeCell = new MergeCell() { Reference = new StringValue(range) }; writer.WriteElement(mergeCell); } writer.WriteEndElement(); } }
private void WriteRow(List <string> columns, OpenXmlWriter writer, int rowNumber) { List <OpenXmlAttribute> attributes = new List <OpenXmlAttribute>(); attributes.Add(new OpenXmlAttribute("r", null, rowNumber.ToString())); writer.WriteStartElement(new DocumentFormat.OpenXml.Spreadsheet.Row(), attributes); foreach (string column in columns) { attributes = new List <OpenXmlAttribute>(); attributes.Add(new OpenXmlAttribute("t", null, "str")); writer.WriteStartElement(new Cell(), attributes); writer.WriteElement(new CellValue(column)); writer.WriteEndElement(); } writer.WriteEndElement(); }
/// <summary> /// 通过SAX创建工作表 /// </summary> /// <param name="worksheetPart"></param> private void CreateSheetBySAX(WorksheetPart worksheetPart, DrawingsPart drawingsPart) { using (_writer = OpenXmlWriter.Create(worksheetPart)) { _rowIndex = 1; //S: Worksheet _writer.WriteStartElement(new Worksheet()); if (drawingsPart != null) { _writer.WriteElement(new Drawing() { Id = worksheetPart.GetIdOfPart(drawingsPart) }); } InitSheetViews(); InitColumns(); MergeCells(); FillData(); //E: Worksheet _writer.WriteEndElement(); _writer.Close(); } }
/// <summary> /// Writes data to a cell /// </summary> /// <param name="writer">this OpenXmlWriter writer instance</param> /// <param name="cellAddress">The cell address</param> /// <param name="cellValue">The cell value</param> /// <param name="dataType">The data type for the cell</param> public static void WriteCell(this OpenXmlWriter writer, string cellAddress, string cellValue, CellValues dataType) { // default to a standard cell value OpenXmlElement value = new CellValue(cellValue); bool testBool; long testLong; // fix up some values switch (dataType) { // we are handling all strings as inline for performance reasons case CellValues.SharedString: case CellValues.InlineString: dataType = CellValues.InlineString; value = new InlineString(new Text(cellValue)); break; case CellValues.Date: // write the value as a string to the sheet dataType = CellValues.String; break; case CellValues.Number: // this is a safety check as we sometimes get bad values such as N/A in columns if (!long.TryParse(cellValue, out testLong)) { // we default to writing it as a string to be safe dataType = CellValues.InlineString; value = new InlineString(new Text(cellValue)); } break; case CellValues.Boolean: // this is a safety check as we sometimes get bad values such as N/A in columns if (bool.TryParse(cellValue, out testBool)) { value = new CellValue(testBool ? "1" : "0"); } else { // we default to writing it as a string to be safe dataType = CellValues.InlineString; value = new InlineString(new Text(cellValue)); } break; } // write cell xml to the writer writer.WriteStartElement(new Cell() { DataType = dataType, CellReference = cellAddress }); writer.WriteElement(value); writer.WriteEndElement(); }
public void AddData <T>(OpenXmlWriter oxw, List <T> data, List <OpenExcelColumn <T> > columns) { List <OpenXmlAttribute> oxa; for (int i = 0; i < data.Count; i++) { //rowCounter++; oxa = new List <OpenXmlAttribute>(); // this is the row index //oxa.Add(new OpenXmlAttribute("r", null, i.ToString())); if (i > 5 && i < 15) { oxa.Add(new OpenXmlAttribute("outlineLevel", string.Empty, "1")); } oxw.WriteStartElement(new Row(), oxa); foreach (var column in columns)/* (int j = 0; j <= columns.Count; i++)*/ { oxa = new List <OpenXmlAttribute> { // this is the data type ("t"), with CellValues.String ("str") new OpenXmlAttribute("t", null, column.CellValueType.ToString()), //oxa.Add(new OpenXmlAttribute("s", null, "3")); new OpenXmlAttribute("s", null, column.StyleIndexId ?? "0") }; //oxa.Add(new OpenXmlAttribute("s", null, "1")); // it's suggested you also have the cell reference, but // you'll have to calculate the correct cell reference yourself. // Here's an example: //oxa.Add(new OpenXmlAttribute("r", null, "A1")); oxw.WriteStartElement(new Cell(), oxa); { //oxw.WriteElement(new CellValue(string.Format("R{0}C{1}", i, j))); oxw.WriteElement(new CellValue(column.Selector(data[i]))); } // this is for Cell oxw.WriteEndElement(); } // this is for Row oxw.WriteEndElement(); } }
public void Save() { if (!_changed) { return; } if (_ssPart != null) { string originalSSPartId = _wpart.GetIdOfPart(_ssPart); _wpart.DeletePart(originalSSPartId); } SharedStringTablePart newSSPart = _wpart.AddNewPart <SharedStringTablePart>(); using (OpenXmlWriter writer = OpenXmlWriter.Create(newSSPart)) { writer.WriteStartElement(new SharedStringTable()); if (_stringCache == null) { string[] outputList = new string[_indexLookup.Count]; foreach (var i in _indexLookup) { outputList[i.Value] = i.Key; } for (uint idx = 0; idx < outputList.Length; idx++) { writer.WriteStartElement(new SharedStringItem()); writer.WriteElement(new Text(outputList[idx])); writer.WriteEndElement(); } } else { foreach (var i in _stringCache) { writer.WriteStartElement(new SharedStringItem()); writer.WriteElement(new Text(i.Value)); writer.WriteEndElement(); } } writer.WriteEndElement(); } }
private void writeConditionalFormattings(OpenXmlWriter writer) { writer.WriteStartElement(new X14.ConditionalFormattings()); foreach (var spreadsheetConditionalFormattingRule in _conditionalFormattingRules) { spreadsheetConditionalFormattingRule.WriteOpenXml(writer); } writer.WriteEndElement(); }
private static Cell WriteCell(OpenXmlWriter writer, object value, int rowIndex) { var cell = new Cell(); //cell.CellReference = ""; var attributeListCell = new OpenXmlAttribute[] { }; if (default(object) == value) { cell.DataType = CellValues.String; } else if (typeof(bool).IsInstanceOfType(value)) { cell.DataType = CellValues.Boolean; } else if (typeof(DateTime).IsInstanceOfType(value)) { cell.DataType = CellValues.Date; } else if (typeof(double).IsAssignableFrom(value.GetType())) { cell.DataType = CellValues.Number; } else { cell.DataType = CellValues.String; } writer.WriteStartElement(cell); if (default(object) == value) { var cellValue = new CellValue(""); writer.WriteElement(cellValue); } else if (typeof(CellReference).IsAssignableFrom(value.GetType())) { var cellRef = (CellReference)value; var formula = new DocumentFormat.OpenXml.Spreadsheet.CellFormula(cellRef.formula); writer.WriteElement(formula); var cellValue = new CellValue(cellRef.value); writer.WriteElement(cellValue); // <c r="H2" t="str"> // <f>Manufacturer!A15</f> // <v>30</v> //</c> } else { var cellValue = new CellValue(value.ToString()); writer.WriteElement(cellValue); } writer.WriteEndElement(); return(cell); }