Esempio n. 1
0
        /// <summary>
        /// 处理正文
        /// </summary>
        /// <param name="sheet">工作表</param>
        /// <param name="innerSheet">NPOI工作表</param>
        /// <param name="dataRowStartIndex">数据行起始索引</param>
        private void HandleBody <TTemplate>(IWorkSheet sheet, ISheet innerSheet, int dataRowStartIndex)
        {
            var header = sheet.GetHeader().LastOrDefault();

            for (var i = dataRowStartIndex; i < innerSheet.PhysicalNumberOfRows; i++)
            {
                var innerRow = innerSheet.GetRow(i);
                if (innerRow == null || innerRow.Cells.All(x => string.IsNullOrWhiteSpace(x?.GetStringValue())))
                {
                    continue;
                }
                sheet.AddBodyRow(Convert <TTemplate>(innerRow, header));
            }
        }
Esempio n. 2
0
        /// <summary>
        /// 处理正文
        /// </summary>
        /// <param name="sheet">工作表</param>
        /// <param name="innerSheet">NPOI工作表</param>
        /// <param name="dataRowStartIndex">数据行起始索引</param>
        /// <param name="enabledEmptyLine">启用空行模式。启用时,行内遇到空行将抛出异常错误信息</param>
        private void HandleBody <TTemplate>(IWorkSheet sheet, ISheet innerSheet, int dataRowStartIndex, bool enabledEmptyLine)
        {
            var header = sheet.GetHeader().LastOrDefault();

            // LastRowNum: 获取最后一行的行数,如果sheet中一行数据都没有则返回-1,只有第一行有数据则返回0,最后有数据的行是第n行则返回n-1
            // PhysicalNumberOfRows: 获取有记录的行数,即:最后有数据的行是第n行,前面有m行是空行没数据,则返回n-m
            for (var i = dataRowStartIndex; i < innerSheet.GetHasDataRowNum() + 1; i++)
            {
                var innerRow = innerSheet.GetRow(i);
                if (CheckEmptyLine(innerRow.IsEmptyRow(), enabledEmptyLine))
                {
                    continue;
                }
                sheet.AddBodyRow(Convert <TTemplate>(innerRow, header));
            }
        }
Esempio n. 3
0
        /// <summary>
        /// 处理正文
        /// </summary>
        /// <param name="sheet">工作表</param>
        /// <param name="innerSheet">NPOI工作表</param>
        /// <param name="options">导入选项配置</param>
        private void HandleBody <TTemplate>(IWorkSheet sheet, ISheet innerSheet, IImportOptions options)
        {
            var header = sheet.GetHeader().LastOrDefault();

            // LastRowNum: 获取最后一行的行数,如果sheet中一行数据都没有则返回-1,只有第一行有数据则返回0,最后有数据的行是第n行则返回n-1
            // PhysicalNumberOfRows: 获取有记录的行数,即:最后有数据的行是第n行,前面有m行是空行没数据,则返回n-m
            for (var i = options.DataRowIndex; i < innerSheet.GetHasDataRowNum() + 1; i++)
            {
                var innerRow = innerSheet.GetRow(i);
                if (CheckIgnoreEmptyLine(options, innerRow.IsEmptyRow()))
                {
                    break;
                }
                if (CheckEmptyLine(innerRow.IsEmptyRow(), options.EnabledEmptyLine, i))
                {
                    continue;
                }
                sheet.AddBodyRow(Convert <TTemplate>(innerRow, header), innerRow.RowNum);
            }
        }
Esempio n. 4
0
        /// <summary>
        /// 添加实体
        /// </summary>
        /// <typeparam name="T">实体类型</typeparam>
        /// <param name="entity">实体</param>
        /// <param name="propertyNames">属性名集合</param>
        private void AddEntity <T>(T entity, IEnumerable <string> propertyNames) where T : class
        {
            var values = GetPropertyValues(entity, propertyNames);

            Sheet.AddBodyRow(values.ToArray());
        }