Esempio n. 1
0
        string GenerateCsv()
        {
            var r = new StringBuilder();

            // Header row:
            if (!ExcludeHeader)
            {
                r.AppendLine(Columns.Select(c => EscapeCsvValue(c.HeaderText)).ToString(","));
            }

            // Data rows:

            foreach (var row in DataRows)
            {
                var fields = new List <string>();
                for (var i = 0; i < row.Length; i++)
                {
                    var cell   = row[i];
                    var column = Columns[i];

                    var value = cell?.ToString().OrEmpty();

                    foreach (var filter in DataFilters)
                    {
                        value = filter.Apply(column, value);
                    }

                    if (column.DataType == "Link")
                    {
                        if (value.IsEmpty())
                        {
                            fields.Add(value);
                        }
                        else
                        {
                            var parts = value.Split(LinkSeperator.ToCharArray().Single());

                            if (parts.Length != 2)
                            {
                                throw new Exception("Invalid Link value for ExporttoExcel: " + value);
                            }

                            fields.Add(parts[0] + ": " + parts[1]);
                        }
                    }
                    else
                    {
                        fields.Add(value);
                    }
                }

                r.AppendLine(fields.Select(f => EscapeCsvValue(f)).ToString(","));
            }

            return(r.ToString());
        }
        string GenerateDataRows()
        {
            var r = new StringBuilder();

            foreach (var row in DataRows)
            {
                r.AppendLine(@"<Row>");

                for (int i = 0; i < row.Length; i++)
                {
                    var cell   = row[i];
                    var column = Columns[i];

                    var cellInfo = cell as ExcelCell;

                    var value = cell?.ToString().OrEmpty();

                    if (column.DataType == "Link")
                    {
                        if (value.IsEmpty())
                        {
                            r.AppendLine("<Cell><Data ss:Type=\"String\"></Data></Cell>");
                        }
                        else
                        {
                            var parts = value.Split(LinkSeperator.ToCharArray().Single());

                            if (parts.Length != 2)
                            {
                                throw new Exception("Invalid Link value for ExporttoExcel: " + value);
                            }

                            r.AddFormattedLine("<Cell ss:StyleID=\"linkStyle\" ss:HRef=\"{0}\"><Data ss:Type=\"String\">{1}</Data></Cell>",
                                               parts[1].XmlEncode(),
                                               parts[0].XmlEncode());
                        }
                    }
                    else
                    {
                        if (value.HasValue())
                        {
                            value = value.Remove("\r").XmlEncode().Replace("\n", "&#10;");
                        }

                        r.Append("<Cell");

                        var style = cellInfo?.Style ?? column.RowStyle;
                        r.AppendFormat(" ss:StyleID=\"{0}\"", style.GetStyleId());

                        if (column.Formula.HasValue())
                        {
                            r.AppendFormat(" ss:Formula=\"{0}\"", column.Formula);
                        }

                        r.Append(">");

                        if (value.HasValue())
                        {
                            r.AddFormattedLine("<Data ss:Type=\"{0}\">{1}</Data>", column.DataType, value);
                        }

                        r.AppendLine("</Cell>");
                    }
                }

                r.AppendLine("</Row>");
            }

            return(r.ToString());
        }