public static Stream ToXLSX2(TranslationModule project) { MemoryStream xlsStream = new MemoryStream(); var worksheet = new MemoryWorksheet(); Export.ToIWorksheet(project, worksheet); using (SpreadsheetDocument myDoc = SpreadsheetDocument.Create(xlsStream, SpreadsheetDocumentType.Workbook)) { WorkbookPart workbookPart = myDoc.AddWorkbookPart(); workbookPart.Workbook = new Workbook(); WorksheetPart worksheetPart = workbookPart.AddNewPart <WorksheetPart>(); SheetData sheetData = new SheetData(); worksheetPart.Worksheet = new Worksheet(sheetData); Sheets sheets = myDoc.WorkbookPart.Workbook.AppendChild <Sheets>(new Sheets()); Sheet sheet = new Sheet() { Id = myDoc.WorkbookPart.GetIdOfPart(worksheetPart), SheetId = 1, Name = "mySheet" }; sheets.AppendChild(sheet); int cellIdx = 0; for (uint row = 0; row < worksheet.Rows; row++) { var r = new Row(); r.RowIndex = row; for (int col = 0; col < worksheet.Columns; col++) { /* * var c = new Cell(); * c.DataType = CellValues.String; * //string val = worksheet[row, col] != null ? worksheet[row, col].ToString() : ""; * string val = "test;"; * c.CellValue = new CellValue(val); * * r.InsertAt(c, col); */ var c = CreateTextCell(ColumnLetter(cellIdx++), row, "test"); r.AppendChild(c); } sheetData.AppendChild(r); } worksheetPart.Worksheet.Save(); workbookPart.Workbook.Save(); myDoc.Close(); } return(xlsStream); }
public static Stream ToXLSX(TranslationModule project) { MemoryStream xlsStream = new MemoryStream(); var worksheet = new MemoryWorksheet(); Export.ToIWorksheet(project, worksheet); var ss = new Stylesheet(); ss.CellStyleFormats = new CellStyleFormats(); ss.CellStyleFormats.Count = 1; ss.CellStyles = new CellStyles(); ss.CellStyles.Count = 1; ss.DifferentialFormats = new DifferentialFormats(); ss.DifferentialFormats.Count = 0; ss.TableStyles = new TableStyles(); ss.TableStyles.Count = 0; using (SpreadsheetDocument myDoc = SpreadsheetDocument.Create(xlsStream, SpreadsheetDocumentType.Workbook)) { WorkbookPart workbookPart = myDoc.AddWorkbookPart(); //workbookPart.Workbook = new Workbook(); WorkbookStylesPart stylesPart = workbookPart.AddNewPart <WorkbookStylesPart>(); stylesPart.Stylesheet = ss; stylesPart.Stylesheet.Save(); WorksheetPart worksheetPart = workbookPart.AddNewPart <WorksheetPart>(); //SheetData sheetData = new SheetData(); //worksheetPart.Worksheet = new Worksheet(sheetData); /* * Sheets sheets = myDoc.WorkbookPart.Workbook.AppendChild<Sheets>(new Sheets()); * Sheet sheet = new Sheet() * { * Id = myDoc.WorkbookPart.GetIdOfPart(worksheetPart), * SheetId = 1, * Name = "mySheet" * }; * sheets.Append(sheet); */ OpenXmlWriter writer = OpenXmlWriter.Create(worksheetPart); writer.WriteStartElement(new Worksheet()); writer.WriteStartElement(new SheetData()); for (int row = 0; row < worksheet.Rows; row++) { var oxa = new List <OpenXmlAttribute>(); // this is the row index oxa.Add(new OpenXmlAttribute("r", null, row.ToString())); writer.WriteStartElement(new Row(), oxa); for (int col = 0; col < worksheet.Columns; col++) { oxa = new List <OpenXmlAttribute>(); // this is the data type ("t"), with CellValues.String ("str") oxa.Add(new OpenXmlAttribute("t", null, "str")); string val = worksheet[row, col] != null ? worksheet[row, col].ToString() : ""; //var cell = new Cell(new CellValue(val)); writer.WriteStartElement(new Cell(), oxa); //Cell c = new Cell(); CellValue v = new CellValue(val); writer.WriteElement(v); //c.AppendChild(v); //writer.WriteElement(); writer.WriteEndElement(); } writer.WriteEndElement(); } writer.WriteEndElement(); writer.WriteEndElement(); writer.Close(); writer = OpenXmlWriter.Create(myDoc.WorkbookPart); writer.WriteStartElement(new Workbook()); writer.WriteStartElement(new Sheets()); // you can use object initialisers like this only when the properties // are actual properties. SDK classes sometimes have property-like properties // but are actually classes. For example, the Cell class has the CellValue // "property" but is actually a child class internally. // If the properties correspond to actual XML attributes, then you're fine. writer.WriteElement(new Sheet() { Name = "Sheet1", SheetId = 1, Id = myDoc.WorkbookPart.GetIdOfPart(worksheetPart) }); // this is for Sheets writer.WriteEndElement(); // this is for Workbook writer.WriteEndElement(); writer.Close(); myDoc.Close(); } return(xlsStream); }