Commit 298eea8e by lcx

工作量、收入数据写入优化

parent 0a9267d6
......@@ -97,7 +97,7 @@ public static void WriteSheetData(ISheet sheet, PerSheetPoint point, SheetType s
WriteSheetDataExistent(sheet, columnHeader, point, sheetType, style, headers, data, rows, ref dataFirstRowNum);
if (sheetType == SheetType.Income && rows != null && rows.Any())
if (sheetType == SheetType.Income && rows != null)
{
dataFirstRowNum = point.DataFirstRowNum.Value;
RemoveIncomeRow(sheet, point);
......@@ -105,9 +105,6 @@ public static void WriteSheetData(ISheet sheet, PerSheetPoint point, SheetType s
dataFirstRowNum = point.DataFirstRowNum.Value + rows.Count;
}
if (point.DataFirstRowNum.Value < dataFirstRowNum)
dataFirstRowNum += 1;
if (data == null || !data.Any(t => !string.IsNullOrEmpty(t.Department))) return;
WriteSheetDataNonexistent(sheet, columnHeader, point, sheetType, style, headers, data, dataFirstRowNum);
......@@ -129,6 +126,8 @@ public static void WriteSheetData(ISheet sheet, PerSheetPoint point, SheetType s
var row = sheet.GetRow(rowIndex);
if (row == null) continue;
if (rowIndex > dataFirstRowNum) dataFirstRowNum = rowIndex + 1;
string department = row.GetOrCreate(dataFirstCellNum - 1).GetDecodeEscapes();
if (string.IsNullOrEmpty(department)) continue;
......@@ -164,9 +163,9 @@ public static void WriteSheetData(ISheet sheet, PerSheetPoint point, SheetType s
#endregion
data.RemoveAll(t => t.Department == department);
if (rowIndex > dataFirstRowNum) dataFirstRowNum = rowIndex;
}
if (point.DataFirstRowNum.Value < dataFirstRowNum) dataFirstRowNum += 1;
}
private static void WriteSheetDataNonexistent(ISheet sheet, IRow columnHeader, PerSheetPoint point, SheetType sheetType, ExcelStyle style,
......@@ -216,6 +215,7 @@ public static void WriteSheetData(ISheet sheet, PerSheetPoint point, SheetType s
List<ExtractTransDto> data, List<IncomeRow> incomes, int dataFirstRowNum)
{
var cellStyle = style.SetBgkColorAndFormat(style.GetCellStyle(), StyleType.数据);
var deptStyle = style.GetCellStyle();
headers = headers.Select(t => t.NoBlank()).ToList();
......@@ -228,10 +228,20 @@ public static void WriteSheetData(ISheet sheet, PerSheetPoint point, SheetType s
var deptData = data.Where(t => t.Department == item.Department);
if (deptData == null || !deptData.Any()) continue;
row.GetOrCreate(dataFirstCellNum - 1).SetCellValue(item.Department);
row.GetOrCreate(dataFirstCellNum - 2).SetCellValue(item.NurseAccount);
row.GetOrCreate(dataFirstCellNum - 3).SetCellValue(item.DoctorAccount);
row.GetOrCreate(dataFirstCellNum - 4).SetCellValue(item.TechnicAccounting);
var deptContents = new Dictionary<int, string>
{
{ 1, item.Department },
{ 2, item.NurseAccount },
{ 3, item.DoctorAccount },
{ 4, item.TechnicAccounting },
};
foreach (var content in deptContents)
{
var cell = row.GetOrCreate(dataFirstCellNum - content.Key);
cell.SetCellValue(content.Value);
cell.CellStyle = deptStyle;
}
for (int cellIndex = dataFirstCellNum; cellIndex < columnHeader.LastCellNum; cellIndex++)
{
......@@ -239,20 +249,14 @@ public static void WriteSheetData(ISheet sheet, PerSheetPoint point, SheetType s
var cell = row.GetOrCreate(cellIndex);
var value = deptData.FirstOrDefault(t => t.Category.NoBlank() == column)?.Value;
//数据为空,且单元格值不为空,不写入数据(保留原始值)
var notWrite = !value.HasValue && !string.IsNullOrEmpty(cell.ToString());
if (cell.CellType != CellType.Formula && !notWrite)
if (cell.CellType != CellType.Formula)
{
cell.SetCellValue<decimal>(value);
if (headers != null && headers.Contains(column))
{
cell.CellStyle = cellStyle;
}
cell.CellStyle = cellStyle;
}
}
dataFirstRowNum++;
data.RemoveAll(t => t.Department == item.Department);
}
}
......@@ -315,10 +319,13 @@ public static void WriteCollectData(ISheet sheet, PerSheetPoint point, SheetType
WriteCollectDataExistent(sheet, columnHeader, point, sheetType, style, headers, data, rows, ref dataFirstRowNum);
if (point.DataFirstRowNum.Value < dataFirstRowNum)
dataFirstRowNum += 1;
dataFirstRowNum -= rows?.Count ?? 0;
if (sheetType == SheetType.Income && rows != null)
{
dataFirstRowNum = point.DataFirstRowNum.Value;
RemoveIncomeRow(sheet, point);
WriteCollectIncomeData(sheet, columnHeader, point, style, headers, data, rows, dataFirstRowNum);
dataFirstRowNum = point.DataFirstRowNum.Value + rows.Count;
}
if (data == null || !data.Any(t => !string.IsNullOrEmpty(t.Department))) return;
......@@ -326,7 +333,7 @@ public static void WriteCollectData(ISheet sheet, PerSheetPoint point, SheetType
}
private static void WriteCollectDataExistent(ISheet sheet, IRow columnHeader, PerSheetPoint point, SheetType sheetType, ExcelStyle style,
List<string> headers, List<collect_data> data, List<IncomeRow> emptyRows, ref int dataFirstRowNum)
List<string> headers, List<collect_data> data, List<IncomeRow> incomes, ref int dataFirstRowNum)
{
if (sheet.LastRowNum <= dataFirstRowNum) return;
......@@ -341,15 +348,21 @@ public static void WriteCollectData(ISheet sheet, PerSheetPoint point, SheetType
var row = sheet.GetRow(rowIndex);
if (row == null) continue;
if (rowIndex > dataFirstRowNum) dataFirstRowNum = rowIndex + 1;
string department = row.GetOrCreate(dataFirstCellNum - 1).GetDecodeEscapes();
if (string.IsNullOrEmpty(department)) continue;
if (rowIndex > dataFirstRowNum) dataFirstRowNum = rowIndex;
var deptData = data.Where(t => t.Department == department);
if (deptData == null || !deptData.Any()) continue;
#region 写入数据
#region 写入数据
if (sheetType == SheetType.Income)
{
incomes.Add(GetIncomeRowMessage(row, dataFirstCellNum, department, rowIndex));
continue;
}
for (int cellIndex = dataFirstCellNum; cellIndex < columnHeader.LastCellNum; cellIndex++)
{
......@@ -357,13 +370,9 @@ public static void WriteCollectData(ISheet sheet, PerSheetPoint point, SheetType
var cell = row.GetOrCreate(cellIndex);
var value = deptData.FirstOrDefault(t => t.TypeName.NoBlank() == column)?.CellValue;
if (sheetType == SheetType.Income)
{
cell.SetCellValue<decimal>(value);
cell.CellStyle = cellStyle;
}
else if (cell.CellType != CellType.Formula)
//数据为空,且单元格值不为空,不写入数据(保留原始值)
var notWrite = string.IsNullOrEmpty(value) && !string.IsNullOrEmpty(cell.ToString());
if (cell.CellType != CellType.Formula && !notWrite)
{
cell.SetCellValue<decimal>(value);
if (headers != null && headers.Contains(column))
......@@ -377,6 +386,8 @@ public static void WriteCollectData(ISheet sheet, PerSheetPoint point, SheetType
data.RemoveAll(t => t.Department == department);
}
if (point.DataFirstRowNum.Value < dataFirstRowNum) dataFirstRowNum += 1;
}
private static void WriteCollectDataNonexistent(ISheet sheet, IRow columnHeader, PerSheetPoint point, SheetType sheetType, ExcelStyle style,
......@@ -420,6 +431,56 @@ public static void WriteCollectData(ISheet sheet, PerSheetPoint point, SheetType
}
}
private static void WriteCollectIncomeData(ISheet sheet, IRow columnHeader, PerSheetPoint point, ExcelStyle style, List<string> headers,
List<collect_data> data, List<IncomeRow> incomes, int dataFirstRowNum)
{
var cellStyle = style.SetBgkColorAndFormat(style.GetCellStyle(), StyleType.数据);
var deptStyle = style.GetCellStyle();
headers = headers.Select(t => t.NoBlank()).ToList();
int dataFirstCellNum = point.DataFirstCellNum.Value;
foreach (var item in incomes)
{
var row = sheet.GetOrCreate(dataFirstRowNum);
var deptData = data.Where(t => t.Department == item.Department);
if (deptData == null || !deptData.Any()) continue;
var deptContents = new Dictionary<int, string>
{
{ 1, item.Department },
{ 2, item.NurseAccount },
{ 3, item.DoctorAccount },
{ 4, item.TechnicAccounting },
};
foreach (var content in deptContents)
{
var cell = row.GetOrCreate(dataFirstCellNum - content.Key);
cell.SetCellValue(content.Value);
cell.CellStyle = deptStyle;
}
for (int cellIndex = dataFirstCellNum; cellIndex < columnHeader.LastCellNum; cellIndex++)
{
var column = columnHeader.GetOrCreate(cellIndex).GetDecodeEscapes();
var cell = row.GetOrCreate(cellIndex);
var value = deptData.FirstOrDefault(t => t.TypeName.NoBlank() == column)?.CellValue;
if (cell.CellType != CellType.Formula)
{
cell.SetCellValue<decimal>(value);
cell.CellStyle = cellStyle;
}
}
dataFirstRowNum++;
data.RemoveAll(t => t.Department == item.Department);
}
}
/// <summary> 收入固定列 </summary>
private static readonly Dictionary<string, Func<collect_data, string>> collectIncome = new Dictionary<string, Func<collect_data, string>>
{
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment