From cf651b6686c620d50bd5211254ddf02c0d832cc9 Mon Sep 17 00:00:00 2001 From: walon Date: Sat, 31 Jul 2021 10:55:50 +0800 Subject: [PATCH] =?UTF-8?q?=E3=80=90=E4=BC=98=E5=8C=96=E3=80=91=E4=BC=98?= =?UTF-8?q?=E5=8C=96=E4=BB=8Eexcel=E8=AF=BB=E5=8F=96=E5=AE=9A=E4=B9=89?= =?UTF-8?q?=E7=9A=84=E6=80=A7=E8=83=BD=EF=BC=8C=E4=B8=8D=E5=86=8D=E8=AF=BB?= =?UTF-8?q?=E5=8F=96=E6=95=B4=E4=B8=AAsheet=EF=BC=8C=E5=8F=AA=E8=AF=BB?= =?UTF-8?q?=E5=8F=96=E5=89=8D=E9=9D=A2=E5=87=A0=E8=A1=8C=E5=8C=85=E5=90=AB?= =?UTF-8?q?=E6=A0=87=E9=A2=98=E5=A4=B4=E7=9A=84=E8=A1=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Source/DataSources/Excel/Sheet.cs | 20 ++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/src/Luban.Job.Cfg/Source/DataSources/Excel/Sheet.cs b/src/Luban.Job.Cfg/Source/DataSources/Excel/Sheet.cs index fc8d83d..d24558a 100644 --- a/src/Luban.Job.Cfg/Source/DataSources/Excel/Sheet.cs +++ b/src/Luban.Job.Cfg/Source/DataSources/Excel/Sheet.cs @@ -386,7 +386,12 @@ namespace Luban.Job.Cfg.DataSources.Excel int rowIndex = 0; while (reader.Read()) { - ++rowIndex; // 第一行是 meta ,跳过 + ++rowIndex; // 第1行是 meta ,标题及数据行从第2行开始 + // 重点优化横表的headerOnly模式, 此模式下只读前几行标题行,不读数据行 + if (headerOnly && this.OrientRow && rowIndex >= 10) + { + break; + } var row = new List(); for (int i = 0, n = reader.FieldCount; i < n; i++) { @@ -481,7 +486,7 @@ namespace Luban.Job.Cfg.DataSources.Excel //TODO 其实有bug. 未处理只占一列的 多级标题头 - // 有一些列不是MergeCell,所以还需要额外处理 + // 上面的代码处理完Merge列,接下来处理非Merge的列 var titleRow = _rowColumns[0]; for (int i = 0; i < titleRow.Count; i++) { @@ -509,23 +514,20 @@ namespace Luban.Job.Cfg.DataSources.Excel throw new Exception($"没有定义任何有效 列"); } _rootTitle.SortSubTitles(); - //foreach (var title in _rootTitle.SubTitleList) - //{ - // // s_logger.Info("============ sheet:{sheet} title:{title}", Name, title); - //} - // 删除标题行 if (headerOnly) { + // 删除字段名行,保留属性行开始的行 this._rowColumns.RemoveRange(0, Math.Min(titleRowNum, this._rowColumns.Count)); } else { + // 删除所有标题行,包含字段名行、属性行、标题、描述等等非有效数据行 this._rowColumns.RemoveRange(0, Math.Min(TitleRows + titleRowNum - 1, this._rowColumns.Count)); + // 删除忽略的记录行 + this._rowColumns.RemoveAll(row => AbstractDataSource.IsIgnoreTag(GetRowTag(row))); } - // 删除忽略的记录行 - this._rowColumns.RemoveAll(row => AbstractDataSource.IsIgnoreTag(GetRowTag(row))); }