예제 #1
0
 public Cell(int index, IExcelDataReader reader)
 {
     Type               = reader.GetFieldType(index)?.Name;
     Value              = reader.GetValue(index);
     NumberFormatIndex  = reader.GetNumberFormatIndex(index);
     NumberFormatString = reader.GetNumberFormatString(index);
 }
예제 #2
0
 internal SheetData(IExcelDataReader reader)
 {
     ColumnCount = reader.FieldCount;
     Name        = reader.Name;
     while (reader.Read())
     {
         List <string> row       = new List <string>(ColumnCount);
         bool          isNullRow = true;
         for (int i = 0; i < ColumnCount; ++i)
         {
             var    val    = reader.GetValue(i);
             string strVal = "";
             if (val is DateTime)
             {
                 var fmt = reader.GetNumberFormatString(i);
                 strVal = ((DateTime)val).ToString(fmt.Replace('h', 'H'));
             }
             else
             {
                 strVal = val.ToString();
             }
             row.Add(strVal);
         }
         if (!isNullRow)
         {
             data.Add(row);
         }
     }
 }
예제 #3
0
        private string GetFormattedValue(IExcelDataReader reader, int columnIndex, CultureInfo culture)
        {
            var value        = reader.GetValue(columnIndex);
            var formatString = reader.GetNumberFormatString(columnIndex);

            if (formatString != null)
            {
                var format = new NumberFormat(formatString);
                return(format.Format(value, culture));
            }
            return(Convert.ToString(value, culture));
        }
예제 #4
0
        public static string GetFormattedValue(this IExcelDataReader reader, int columnIndex, CultureInfo culture = null)
        {
            var value        = reader.GetValue(columnIndex);
            var formatString = reader.GetNumberFormatString(columnIndex);

            if (formatString != null)
            {
                var format = new NumberFormat(formatString);
                return(format.Format(value, culture ?? new CultureInfo("pt-BR")));
            }
            return(Convert.ToString(value, culture ?? new CultureInfo("pt-BR")));
        }
예제 #5
0
        private static string GetFormattedValue(IExcelDataReader reader, int columnIndex, CultureInfo culture)
        {
            string result;
            var    value        = reader.GetValue(columnIndex);
            var    formatString = reader.GetNumberFormatString(columnIndex);

            if (formatString != null)
            {
                var format = new NumberFormat(formatString);
                result = format.Format(value, culture);
            }
            else
            {
                result = Convert.ToString(value, culture);
            }
            return(result.Replace('\r', ' ').Replace('\n', ' '));
        }
예제 #6
0
        public string GetFormattedValue(IExcelDataReader reader, int columnIndex, CultureInfo culture)
        {
            var value = reader.GetValue(columnIndex);

            var formatString = reader.GetNumberFormatString(columnIndex);

            if (formatString != null)
            {
                var format = new NumberFormat(formatString);

                var forstr = format.Format(value, culture);

                if (value != null && value.GetType() == typeof(System.Double) && getDoublePointCnt(forstr) > mDoublePointKeepCnt)
                {
                    forstr = Convert.ToDouble(forstr).ToString("F" + mDoublePointKeepCnt.ToString());
                    forstr = Convert.ToDouble(forstr).ToString("G");
                }

                return(forstr);
            }
            return(Convert.ToString(value, culture));
        }
예제 #7
0
    private SheetData ReadSheet(IExcelDataReader reader)
    {
        SheetData sheetData   = new SheetData();
        int       rowIndex    = 0;
        int       columnCount = reader.FieldCount;

        while (reader.Read())
        {
            bool isNullRow = true;
            var  rowStart  = reader.GetValue(0);
            //#开头的行是被注释掉的,不读
            if (rowStart != null && rowStart.ToString().StartsWith("#"))
            {
                continue;
            }
            string[] row = new string[columnCount];
            for (int i = 0; i < columnCount; ++i)
            {
                var    val    = reader.GetValue(i);
                string strVal = "";
                if (val != null)
                {
                    isNullRow = false;
                    if (val is DateTime time)
                    {
                        var fmt = reader.GetNumberFormatString(i);
                        strVal = time.ToString(fmt.Replace('h', 'H'));
                    }
                    else
                    {
                        strVal = val.ToString();
                    }
                }
                row[i] = strVal;
            }
            //跳过空行
            if (isNullRow)
            {
                continue;
            }
            if (sheetData.Titiles.Count == 0)
            {
                //读取标题
                for (int i = 0; i < columnCount; ++i)
                {
                    if (!string.IsNullOrWhiteSpace(row[i]))
                    {
                        sheetData.Titiles.Add(new ColumnTitle {
                            Name = row[i], Index = i
                        });
                    }
                }
            }
            else
            {
                RowData rowData = new RowData()
                {
                    RowIndex = rowIndex, Data = new string[sheetData.Titiles.Count]
                };
                for (int i = 0; i < sheetData.Titiles.Count; ++i)
                {
                    rowData.Data[i] = row[sheetData.Titiles[i].Index];
                }
                sheetData.Data.Add(rowData);
            }
            rowIndex++;
        }
        return(sheetData);
    }
        private static DataTable AsDataTable(IExcelDataReader self, ExcelDataTableConfiguration configuration, ExcelDataValidatorConfiguration validator, out DataTable errorTable, out DataTable targetTable)
        {
            var error = new DataTable {
                TableName = self.Name + @" Error"
            };
            var target = new DataTable {
                TableName = self.Name + @" Target"
            };
            var result = new DataTable {
                TableName = self.Name
            };

            error.ExtendedProperties.Add("visiblestate", self.VisibleState);
            target.ExtendedProperties.Add("visiblestate", self.VisibleState);
            result.ExtendedProperties.Add("visiblestate", self.VisibleState);

            var first         = true;
            var emptyRows     = 0;
            var columnIndices = new List <int>();

            while (self.Read())
            {
                if (first)
                {
                    if (configuration.UseHeaderRow && configuration.ReadHeaderRow != null)
                    {
                        configuration.ReadHeaderRow(self);
                    }

                    if (self.FieldCount != configuration.dtFieldColumn.Rows.Count)
                    {
                        // return "Số lượng column không hợp lệ";
                        errorTable  = error;
                        targetTable = target;
                        return(result);
                    }
                    for (var i = 0; i < self.FieldCount; i++)
                    {
                        if (configuration.FilterColumn != null && !configuration.FilterColumn(self, i))
                        {
                            continue;
                        }

                        var name = configuration.UseHeaderRow
                            ? Convert.ToString(self.GetValue(i))
                            : null;
                        if (name.ToString() != configuration.dtFieldColumn.Rows[i][0].ToString())
                        {
                            //ten cot khong trung
                            errorTable  = error;
                            targetTable = target;
                            return(result);
                        }
                        if (string.IsNullOrEmpty(name))
                        {
                            name = configuration.EmptyColumnNamePrefix + i;
                        }

                        // if a column already exists with the name append _i to the duplicates
                        var columnName = GetUniqueColumnName(result, name);


                        var column_error = new DataColumn(columnName, typeof(object))
                        {
                            Caption = name
                        };
                        var column_target = new DataColumn(columnName, typeof(object))
                        {
                            Caption = name
                        };
                        var column = new DataColumn(columnName, typeof(object))
                        {
                            Caption = name
                        };
                        error.Columns.Add(column_error);
                        target.Columns.Add(column_target);
                        result.Columns.Add(column);
                        columnIndices.Add(i);
                    }
                    var column3 = new DataColumn(@"Error_Excel", typeof(string))
                    {
                        Caption = @"Error_Excel"
                    };
                    error.Columns.Add(column3);

                    error.BeginLoadData();
                    target.BeginLoadData();
                    result.BeginLoadData();
                    first = false;

                    if (configuration.UseHeaderRow)
                    {
                        continue;
                    }
                }

                if (configuration.FilterRow != null && !configuration.FilterRow(self))
                {
                    continue;
                }

                if (IsEmptyRow(self, configuration))
                {
                    emptyRows++;
                    continue;
                }

                for (var i = 0; i < emptyRows; i++)
                {
                    result.Rows.Add(result.NewRow());
                }

                emptyRows = 0;
                StringBuilder hasError = new StringBuilder(String.Empty);

                var row = result.NewRow();

                for (var i = 0; i < columnIndices.Count; i++)
                {
                    var columnIndex = columnIndices[i];
                    var columnName  = columnIndices[i];

                    var value = self.GetValue(columnIndex);

                    if (configuration.TransformValue != null)
                    {
                        var transformedValue = configuration.TransformValue(self, i, value);
                        if (transformedValue != null)
                        {
                            value = transformedValue;
                        }
                    }
                    var formatString = self.GetNumberFormatString(columnIndex);
                    if (value != null)
                    {
                        if (formatString != null)
                        {
                            var format = new NumberFormat(formatString);
                            value = format.Format(value, CultureInfo.InvariantCulture);
                        }
                    }
                    //else
                    //{
                    //    value = Convert.ToString(value, CultureInfo.InvariantCulture);

                    //}
                    if (validator.ValidateCell != null)
                    {
                        try
                        {
                            var message = validator.ValidateCell(self, i, value);
                            if (!String.IsNullOrWhiteSpace(message))
                            {
                                hasError.Append($"Column {error.Columns[columnIndex].ColumnName} - {message}, ");
                            }
                        }
                        catch
                        {
                            var message = "Invalid Format";
                            hasError.Append($"Column {error.Columns[columnIndex].ColumnName} - {message}, ");
                        }
                    }
                    row[i] = value;
                }
                result.Rows.Add(row);
                if (hasError.Length < 1)
                {
                    var target_row = target.NewRow();
                    target_row.ItemArray = row.ItemArray;
                    target.Rows.Add(target_row);
                }
                else
                {
                    var error_row = error.NewRow();
                    error_row.ItemArray            = row.ItemArray;
                    error_row[columnIndices.Count] = hasError;
                    error.Rows.Add(error_row);
                }
            }
            result.EndLoadData();
            target.EndLoadData();
            error.EndLoadData();
            errorTable  = error;
            targetTable = target;
            return(result);
        }