示例#1
0
        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();
        }
示例#2
0
        public void EndWritingWithoutTemplate()
        {
            _writer.WriteEndElement();
            _writer.WriteEndElement();

            _writer.Close();
        }
示例#3
0
        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();
            }
        }
示例#4
0
        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
        }
示例#6
0
        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();
        }
示例#7
0
        /// <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();
            }
        }
示例#8
0
        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();
        }
示例#9
0
        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();
            }
        }
示例#10
0
        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;
            }
        }
示例#11
0
        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();
        }
示例#12
0
        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();
        }
示例#13
0
 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;
     }
 }
示例#14
0
        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();
        }
示例#15
0
        public void EndWriteHead()
        {
            _writer.WriteEndElement(); //end of SheetData
            _writer.WriteEndElement(); //end of worksheet
            _writer.Close();

            _spreadsheet.Dispose();
        }
示例#16
0
        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();
            }
        }
示例#17
0
 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();
 }
示例#18
0
        /// <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);
            }
        }
示例#19
0
        private void FinishBuilding()
        {
            _writer.WriteEndElement(); // end SheetData
            if (_excelImages.Count > 0)
            {
                _writer.WriteElement(GetDrawing());
            }
            _writer.WriteEndElement(); // end Worksheet
            _writer.Close();

            _buildingIsFinished = true;
        }
示例#20
0
        public void Close()
        {
            _workBookWriter.WriteEndElement(); // End Writing Sheets
            _workBookWriter.WriteEndElement(); // End Writing Workbook

            _workBookWriter.Close();

            _sharedStringWriter.Close();
            _styleSheetWriter.WriteAndClose();

            _xl.Close();
        }
示例#21
0
        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();
        }
示例#22
0
        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();
        }
示例#23
0
        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();
            }
        }
示例#24
0
        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();
        }
示例#25
0
        /// <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();
        }
示例#27
0
        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();
            }
        }
示例#29
0
 private void writeConditionalFormattings(OpenXmlWriter writer)
 {
     writer.WriteStartElement(new X14.ConditionalFormattings());
     foreach (var spreadsheetConditionalFormattingRule in _conditionalFormattingRules)
     {
         spreadsheetConditionalFormattingRule.WriteOpenXml(writer);
     }
     writer.WriteEndElement();
 }
示例#30
0
        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);
        }