Shared/Kernelx.Excel2NPOI/NPOI/ExeclCmpter.cs

(开头部分) 5KB

这里只显示每个文件的开头 60 行。登录后可以解锁完整代码。

using System;
using System.Collections.Generic;
using System.Data;
using System.IO;
using System.Linq;
using System.Text;
using NPOI.XSSF.UserModel;
using NPOI.HSSF.UserModel;
using NPOI.SS.UserModel;

#if NET35
using Kernelx.ComponentModel.DataAnnotations;
#endif

#if NETSTANDARD2_0
using System.ComponentModel.DataAnnotations;
#endif

namespace Kernelx.Contexts.NPOI
{ 
    public class ExeclCmpter : IExeclCmpter
    {
        public DataSet ReadExeclFileStream(Stream stream, bool isXlsx, bool hasHeaderow)
        {
            IWorkbook workbook = isXlsx ? new XSSFWorkbook(stream) as IWorkbook : new HSSFWorkbook(stream);

            var items = workbook.GetEnumerator();
            var ds = new DataSet();
            while (items.MoveNext())
            {
                ISheet sheet = items.Current as ISheet;
                ds.Tables.Add(_Generate(sheet, hasHeaderow));
            }
            return ds;
        }


        [System.Diagnostics.CodeAnalysis.SuppressMessage("Style", "IDE1006:命名样式", Justification = "<挂起>")]
        private static DataTable _Generate(ISheet sheet, bool hasHeaderow)
        {
            var dt = new DataTable(sheet.SheetName);

            var firstrow = sheet.GetRow(0);
            var colCount = firstrow.LastCellNum;
            for (var i = 0; i < colCount; i++)
            {
                var colName = firstrow.GetCell(i)?.ToString();
                //没有行头或者空值时,使用默认头
                if (!hasHeaderow || string.IsNullOrEmpty(colName))
                    colName = $"column_{i}";

                dt.Columns.Add(new DataColumn(colName));
            }

            for (var i = (hasHeaderow ? 1 : 0); i <= sheet.LastRowNum; i++)
            {
                var row = sheet.GetRow(i);
                if (row == null || row.Cells.All(d => d.CellType == CellType.Blank)) continue;
                var rd = dt.NewRow();
                for (var ci = 0; ci < colCount; ci++)
后面还有 87 行代码,解锁后查看完整代码

24 小时内免费解锁 3 个项目,之后 1 积分/个。 规则说明

AI 解读

登录后可用,每次 10 积分,解读结果公开显示在下面。

还没有人解读过这个文件。