【特性】LubanAssistant支持多行列表。以及修复对list,int之类简单原生数据未加sep=,的问题

main
walon 2021-10-20 19:34:28 +08:00
parent ac01206f78
commit 6c50e66915
6 changed files with 72 additions and 31 deletions

View File

@ -25,6 +25,11 @@ namespace Luban.Job.Cfg.DataSources.Excel
public string Sep { get; private set; }
public string SepOr(string sep)
{
return string.IsNullOrEmpty(Sep) ? sep : Sep;
}
public string Default { get; private set; }
public bool SelfMultiRows { get; private set; }

View File

@ -140,7 +140,8 @@ namespace LubanAssistant
int usedRowNum = sheet.UsedRange.Rows.Count;
if (usedRowNum > titleRowNum + 1)
{
Range allDataRange = sheet.Range[$"A{titleRowNum + 2},A{usedRowNum}"].EntireRow;
//Range allDataRange = sheet.Range[sheet.Cells[titleRowNum + 1, 1], sheet.Cells[$"A{titleRowNum + 2},A{usedRowNum}"].EntireRow;
Range allDataRange = sheet.Range[sheet.Cells[titleRowNum + 2, 1], sheet.Cells[usedRowNum, sheet.UsedRange.Columns.Count]];
allDataRange.ClearContents();
}
@ -149,7 +150,6 @@ namespace LubanAssistant
foreach (var rec in tableDataInfo.MainRecords)
{
var fillVisitor = new FillSheetVisitor(sheet, nextRowIndex);
//FillRecord(sheet, ref nextRowIndex, title.RootTitle, rec);
nextRowIndex += rec.Data.Apply(fillVisitor, title);
}
}

View File

@ -17,7 +17,7 @@ namespace LubanAssistant
private readonly Range _cells;
private readonly int _startRowIndex;
private int _startRowIndex;
public FillSheetVisitor(Worksheet sheet, int startRowIndex)
{
@ -118,6 +118,7 @@ namespace LubanAssistant
public int Accept(DBean type, Title x)
{
if (x.SubTitleList.Count > 0)
{
if (type.Type.IsAbstractType)
@ -147,6 +148,7 @@ namespace LubanAssistant
throw new Exception($"title:{x.Name} 不支持 值为null的普通bean");
}
}
int rowCount = 1;
if (type.ImplType != null)
{
int index = 0;
@ -162,7 +164,7 @@ namespace LubanAssistant
{
//if (fieldTitle.SubTitleList.Count > 0)
//{
data.Apply(this, fieldTitle);
rowCount = Math.Max(rowCount, data.Apply(this, fieldTitle));
//}
//else
//{
@ -172,25 +174,68 @@ namespace LubanAssistant
}
}
}
return rowCount;
}
else
{
Current(x).Value = type.Apply(ToExcelStringVisitor.Ins, x.Sep);
}
return 1;
}
}
public int Accept(DArray type, Title x)
{
if (x.SelfMultiRows)
{
int oldStartRow = _startRowIndex;
int totalRow = 0;
try
{
foreach (var ele in type.Datas)
{
totalRow += ele.Apply(this, x);
_startRowIndex = oldStartRow + totalRow;
}
return totalRow;
}
finally
{
_startRowIndex = oldStartRow;
}
}
else
{
Current(x).Value = type.Apply(ToExcelStringVisitor.Ins, x.Sep);
return 1;
}
}
public int Accept(DList type, Title x)
{
if (x.SelfMultiRows)
{
int oldStartRow = _startRowIndex;
int totalRow = 0;
try
{
foreach (var ele in type.Datas)
{
totalRow += ele.Apply(this, x);
_startRowIndex = oldStartRow + totalRow;
}
return totalRow;
}
finally
{
_startRowIndex = oldStartRow;
}
}
else
{
Current(x).Value = type.Apply(ToExcelStringVisitor.Ins, x.Sep);
return 1;
}
}
public int Accept(DSet type, Title x)
{

View File

@ -1,21 +0,0 @@
using Bright.Common;
using Bright.Time;
using Luban.Job.Cfg.Defs;
using Luban.Job.Cfg.Utils;
using Luban.Job.Common.Defs;
using Luban.Server.Common;
using Microsoft.Office.Interop.Excel;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace LubanAssistant
{
static class LoadUtil
{
}
}

View File

@ -594,7 +594,6 @@
</Compile>
<Compile Include="ExcelUtil.cs" />
<Compile Include="FillSheetVisitor.cs" />
<Compile Include="LoadUtil.cs" />
<Compile Include="Properties\AssemblyInfo.cs">
<SubType>Code</SubType>
</Compile>

View File

@ -2,6 +2,7 @@
using Luban.Job.Cfg.DataSources.Excel;
using Luban.Job.Cfg.DataVisitors;
using Luban.Job.Cfg.Defs;
using Luban.Job.Cfg.TypeVisitors;
using Luban.Job.Cfg.Utils;
using System;
using System.Collections.Generic;
@ -124,16 +125,28 @@ namespace LubanAssistant
public string Accept(DArray type, string sep)
{
if (string.IsNullOrEmpty(sep) && type.Type.ElementType.Apply(IsNotSepTypeVisitor.Ins))
{
sep = ",";
}
return string.Join(sep, type.Datas.Select(d => d.Apply(this, sep)));
}
public string Accept(DList type, string sep)
{
if (string.IsNullOrEmpty(sep) && type.Type.ElementType.Apply(IsNotSepTypeVisitor.Ins))
{
sep = ",";
}
return string.Join(sep, type.Datas.Select(d => d.Apply(this, sep)));
}
public string Accept(DSet type, string sep)
{
if (string.IsNullOrEmpty(sep) && type.Type.ElementType.Apply(IsNotSepTypeVisitor.Ins))
{
sep = ",";
}
return string.Join(sep, type.Datas.Select(d => d.Apply(this, sep)));
}