예제 #1
0
        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);
        }
예제 #2
0
        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);
        }