Commit b6481b96 by lcx

写入采集数据

parent 992bef89
using NPOI.SS.UserModel; using NPOI.SS.UserModel;
using Performance.DtoModels; using Performance.DtoModels;
using Performance.EntityModels;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
...@@ -84,6 +85,8 @@ public static void WriteSheetHeader(ISheet sheet, PerSheetPoint point, SheetType ...@@ -84,6 +85,8 @@ public static void WriteSheetHeader(ISheet sheet, PerSheetPoint point, SheetType
} }
} }
#region ExtractData
public static void WriteSheetData(ISheet sheet, PerSheetPoint point, SheetType sheetType, ExcelStyle style, List<string> headers, List<ExtractTransDto> data) public static void WriteSheetData(ISheet sheet, PerSheetPoint point, SheetType sheetType, ExcelStyle style, List<string> headers, List<ExtractTransDto> data)
{ {
var columnHeader = sheet.GetOrCreate(point.HeaderFirstRowNum.Value); var columnHeader = sheet.GetOrCreate(point.HeaderFirstRowNum.Value);
...@@ -122,13 +125,14 @@ public static void WriteSheetData(ISheet sheet, PerSheetPoint point, SheetType s ...@@ -122,13 +125,14 @@ public static void WriteSheetData(ISheet sheet, PerSheetPoint point, SheetType s
var cell = row.GetOrCreate(cellIndex); var cell = row.GetOrCreate(cellIndex);
var value = deptData.FirstOrDefault(t => t.Category == column)?.Value; var value = deptData.FirstOrDefault(t => t.Category == column)?.Value;
var notWrite = !value.HasValue && !string.IsNullOrEmpty(cell.GetDecodeEscapes());
if (sheetType == SheetType.Income) if (sheetType == SheetType.Income)
{ {
cell.SetCellValue<decimal>(value); cell.SetCellValue<decimal>(value);
cell.CellStyle = cellStyle; cell.CellStyle = cellStyle;
} }
else if (cell.CellType != CellType.Formula) else if (cell.CellType != CellType.Formula && !notWrite)
{ {
cell.SetCellValue<decimal>(value); cell.SetCellValue<decimal>(value);
if (headers != null && headers.Contains(column)) if (headers != null && headers.Contains(column))
...@@ -228,5 +232,123 @@ public static string HasValue(params string[] list) ...@@ -228,5 +232,123 @@ public static string HasValue(params string[] list)
{ "科室名称", (dto) => dto.Department }, { "科室名称", (dto) => dto.Department },
{ "核算单元", (dto) => new string []{ dto.OutNurseAccounting, dto.InpatNurseAccounting }.FirstOrDefault(t => !string.IsNullOrEmpty(t)) }, { "核算单元", (dto) => new string []{ dto.OutNurseAccounting, dto.InpatNurseAccounting }.FirstOrDefault(t => !string.IsNullOrEmpty(t)) },
}; };
#endregion
#region CollectData
public static void WriteCollectData(ISheet sheet, PerSheetPoint point, SheetType sheetType, ExcelStyle style, List<string> headers, List<collect_data> data)
{
var columnHeader = sheet.GetOrCreate(point.HeaderFirstRowNum.Value);
int dataFirstRowNum = point.DataFirstRowNum.Value;
WriteCollectDataExistent(sheet, columnHeader, point, sheetType, style, headers, data, ref dataFirstRowNum);
if (data == null || !data.Any(t => !string.IsNullOrEmpty(t.Department))) return;
WriteCollectDataNonexistent(sheet, columnHeader, point, sheetType, style, headers, data, dataFirstRowNum);
}
private static void WriteCollectDataExistent(ISheet sheet, IRow columnHeader, PerSheetPoint point, SheetType sheetType, ExcelStyle style,
List<string> headers, List<collect_data> data, ref int dataFirstRowNum)
{
if (sheet.LastRowNum <= dataFirstRowNum) return;
var cellStyle = style.SetBgkColorAndFormat(style.GetCellStyle(), StyleType.数据);
int dataFirstCellNum = point.DataFirstCellNum.Value;
for (int rowIndex = dataFirstRowNum; rowIndex < sheet.LastRowNum + 1; rowIndex++)
{
var row = sheet.GetRow(rowIndex);
if (row == null) continue;
string department = row.GetOrCreate(dataFirstCellNum - 1).GetDecodeEscapes();
if (string.IsNullOrEmpty(department)) continue;
var deptData = data.Where(t => t.Department == department);
if (deptData == null || !deptData.Any()) continue;
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 == column)?.CellValue;
if (sheetType == SheetType.Income)
{
cell.SetCellValue<decimal>(value);
cell.CellStyle = cellStyle;
}
else if (cell.CellType != CellType.Formula)
{
cell.SetCellValue<decimal>(value);
if (headers != null && headers.Contains(column))
{
cell.CellStyle = cellStyle;
}
}
}
data.RemoveAll(t => t.Department == department);
if (rowIndex > dataFirstRowNum) dataFirstRowNum = rowIndex + 1;
}
}
private static void WriteCollectDataNonexistent(ISheet sheet, IRow columnHeader, PerSheetPoint point, SheetType sheetType, ExcelStyle style,
List<string> headers, List<collect_data> data, int dataFirstRowNum)
{
var departments = data.Select(s => s.Department).Where(w => !string.IsNullOrEmpty(w)).Distinct().ToList();
var filed = sheet.SheetName.Contains("工作量") ? collectWork : collectIncome;
var deptStyle = style.GetCellStyle();
var cellStyle = style.SetBgkColorAndFormat(style.GetCellStyle(), StyleType.数据);
foreach (string department in departments)
{
var deptData = data.Where(t => t.Department == department);
if (deptData == null || !deptData.Any()) continue;
var row = sheet.GetOrCreate(dataFirstRowNum);
for (int cellIndex = point.HeaderFirstCellNum.Value; cellIndex < columnHeader.LastCellNum; cellIndex++)
{
var column = columnHeader.GetCell(cellIndex).GetDecodeEscapes();
var cell = row.CreateCell(cellIndex);
if (filed.ContainsKey(column))
{
cell.SetCellOValue(filed[column]?.Invoke(deptData.First()));
cell.CellStyle = deptStyle;
}
else if (sheetType == SheetType.Income || (headers != null && headers.Contains(column)))
{
var value = deptData.FirstOrDefault(t => t.TypeName == column)?.CellValue;
cell.SetCellValue<decimal>(value);
cell.CellStyle = cellStyle;
}
}
dataFirstRowNum++;
}
}
/// <summary> 收入固定列 </summary>
private static readonly Dictionary<string, Func<collect_data, string>> collectIncome = new Dictionary<string, Func<collect_data, string>>
{
{ "科室名称", (dto) => dto.Department },
{ "核算单元(医生组)", (dto) => dto.AccountingUnitDoctor },
{ "核算单元(护理组)", (dto) => dto.AccountingUnitNurse },
{ "核算单元(医技组)", (dto) => dto.AccountingUnitTechnician },
};
/// <summary> 工作量固定列 </summary>
private static readonly Dictionary<string, Func<collect_data, string>> collectWork = new Dictionary<string, Func<collect_data, string>>
{
{ "科室名称", (dto) => dto.Department },
{ "核算单元", (dto) => dto.AccountingUnitDoctor },
};
#endregion
} }
} }
...@@ -58,6 +58,7 @@ PerforPeremployeeRepository peremployeeRepository ...@@ -58,6 +58,7 @@ PerforPeremployeeRepository peremployeeRepository
public string Main(int allotId, int hospitalId, string email, string groupName = null, string filePath = null) public string Main(int allotId, int hospitalId, string email, string groupName = null, string filePath = null)
{ {
string extractFilePath = ""; string extractFilePath = "";
IWorkbook workbook = null;
try try
{ {
logService.ClearExtractLog(allotId); logService.ClearExtractLog(allotId);
...@@ -74,13 +75,16 @@ public string Main(int allotId, int hospitalId, string email, string groupName = ...@@ -74,13 +75,16 @@ public string Main(int allotId, int hospitalId, string email, string groupName =
var standData = StandDataFormat(hospitalId, data); var standData = StandDataFormat(hospitalId, data);
var statesArray = new int[] { (int)AllotStates.GenerateSucceed, (int)AllotStates.Archive }; var statesArray = new int[] { (int)AllotStates.GenerateSucceed, (int)AllotStates.Archive };
var lastAllot = allots.Where(t => statesArray.Contains(t.States))?.OrderByDescending(t => t.Year)?.ThenByDescending(t => t.Month)?.First(); //var lastAllot = allots.Where(t => statesArray.Contains(t.States))?.OrderByDescending(t => t.Year).ThenByDescending(t => t.Month).FirstOrDefault();
var templateFilePath = ExtractHelper.GetExtractFile(hospitalId, ref extractFilePath, filePath); var templateFilePath = ExtractHelper.GetExtractFile(hospitalId, ref extractFilePath, filePath);
WriteDataToFile(templateFilePath, extractFilePath, allotId, dict, standData); if (!FileHelper.IsExistFile(templateFilePath)) throw new PerformanceException("抽取文件创建失败");
return templateFilePath; workbook = ExcelHelper.GetWorkbook(templateFilePath);
if (workbook == null) throw new PerformanceException("文件读取失败");
WriteDataToFile(workbook, allotId, dict, standData);
} }
catch (Exception ex) catch (Exception ex)
{ {
...@@ -88,26 +92,24 @@ public string Main(int allotId, int hospitalId, string email, string groupName = ...@@ -88,26 +92,24 @@ public string Main(int allotId, int hospitalId, string email, string groupName =
} }
finally finally
{ {
using (FileStream file = new FileStream(extractFilePath, FileMode.OpenOrCreate))
{
workbook.Write(file);
}
workbook.Close();
} }
return extractFilePath; return extractFilePath;
} }
private void WriteDataToFile(string templateFile, string extractFile, int allotId, Dictionary<ExDataDict, object> exdict, List<ExtractTransDto> extractDto) private void WriteDataToFile(IWorkbook workbook, int allotId, Dictionary<ExDataDict, object> exdict, List<ExtractTransDto> extractDto)
{ {
if (!FileHelper.IsExistFile(templateFile))
throw new PerformanceException("");
var workbook = ExcelHelper.GetWorkbook(templateFile);
if (workbook == null) throw new PerformanceException("文件读取失败");
ExcelStyle style = new ExcelStyle(workbook); ExcelStyle style = new ExcelStyle(workbook);
var models = exdict[ExDataDict.ExModule] as List<ex_module>; var models = exdict[ExDataDict.ExModule] as List<ex_module>;
ExtractHelper.CreateNotExistSheet(models, workbook); ExtractHelper.CreateNotExistSheet(models, workbook);
var employeeDict = peremployeeRepository.GetEntities(t => t.AllotId == allotId); var employeeDict = peremployeeRepository.GetEntities(t => t.AllotId == allotId);
var collectData = collectdataRepository.GetEntities(t => t.AllotID == allotId);
WriteDataFactory factory = new WriteDataFactory(); WriteDataFactory factory = new WriteDataFactory();
for (int sheetIndex = 0; sheetIndex < workbook.NumberOfSheets; sheetIndex++) for (int sheetIndex = 0; sheetIndex < workbook.NumberOfSheets; sheetIndex++)
...@@ -118,22 +120,23 @@ private void WriteDataToFile(string templateFile, string extractFile, int allotI ...@@ -118,22 +120,23 @@ private void WriteDataToFile(string templateFile, string extractFile, int allotI
if (sheetType == SheetType.Unidentifiable) continue; if (sheetType == SheetType.Unidentifiable) continue;
var point = PerSheetDataFactory.GetDataRead(sheetType)?.Point; var point = PerSheetDataFactory.GetDataRead(sheetType)?.Point;
if (point != null) if (point != null && point.DataFirstCellNum.HasValue)
ExtractHelper.ClearSheetPartialData(sheet, point, sheetType); ExtractHelper.ClearSheetPartialData(sheet, point, sheetType);
var customer = factory.GetWriteData(sheetType); var customer = factory.GetWriteData(sheetType);
if (customer != null) if (customer != null)
{ {
var exdata = extractDto.Where(t => t.SheetName.NoBlank() == sheet.SheetName.NoBlank())?.ToList(); string sheetName = sheet.SheetName.NoBlank();
var collects = collectData.Where(t => t.SheetName.NoBlank() == sheetName)?.ToList();
if (collects != null && collects.Any())
{
customer.WriteCollectData(sheet, point, sheetType, style, collects);
}
var exdata = extractDto.Where(t => t.SheetName.NoBlank() == sheetName)?.ToList();
var data = GetDataBySheetType(sheetType, exdata, employeeDict); var data = GetDataBySheetType(sheetType, exdata, employeeDict);
customer.WriteSheetData(sheet, point, sheetType, style, data, exdict); customer.WriteSheetData(sheet, point, sheetType, style, data, exdict);
} }
} }
using (FileStream file = new FileStream(extractFile, FileMode.OpenOrCreate))
{
workbook.Write(file);
}
} }
private object GetDataBySheetType(SheetType sheetType, List<ExtractTransDto> extractDto, List<per_employee> employeeDict) private object GetDataBySheetType(SheetType sheetType, List<ExtractTransDto> extractDto, List<per_employee> employeeDict)
......
using NPOI.SS.UserModel; using NPOI.SS.UserModel;
using Performance.DtoModels; using Performance.DtoModels;
using Performance.EntityModels;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Text; using System.Text;
...@@ -8,9 +9,14 @@ namespace Performance.Services.ExtractExcelService.SheetDataWrite ...@@ -8,9 +9,14 @@ namespace Performance.Services.ExtractExcelService.SheetDataWrite
{ {
class AccountBasicDataWrite : ISheetDataWrite class AccountBasicDataWrite : ISheetDataWrite
{ {
public void WriteCollectData(ISheet sheet, PerSheetPoint point, SheetType sheetType, ExcelStyle style, List<collect_data> collects)
{
}
public void WriteSheetData(ISheet sheet, PerSheetPoint point, SheetType sheetType, ExcelStyle style, object data, Dictionary<ExDataDict, object> exdict = null) public void WriteSheetData(ISheet sheet, PerSheetPoint point, SheetType sheetType, ExcelStyle style, object data, Dictionary<ExDataDict, object> exdict = null)
{ {
throw new NotImplementedException();
} }
} }
} }
using NPOI.SS.UserModel; using NPOI.SS.UserModel;
using Performance.DtoModels; using Performance.DtoModels;
using Performance.EntityModels;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Text; using System.Text;
...@@ -8,9 +9,14 @@ namespace Performance.Services.ExtractExcelService.SheetDataWrite ...@@ -8,9 +9,14 @@ namespace Performance.Services.ExtractExcelService.SheetDataWrite
{ {
class ClinicEmployeeDataWrite : ISheetDataWrite class ClinicEmployeeDataWrite : ISheetDataWrite
{ {
public void WriteCollectData(ISheet sheet, PerSheetPoint point, SheetType sheetType, ExcelStyle style, List<collect_data> collects)
{
}
public void WriteSheetData(ISheet sheet, PerSheetPoint point, SheetType sheetType, ExcelStyle style, object data, Dictionary<ExDataDict, object> exdict = null) public void WriteSheetData(ISheet sheet, PerSheetPoint point, SheetType sheetType, ExcelStyle style, object data, Dictionary<ExDataDict, object> exdict = null)
{ {
throw new NotImplementedException();
} }
} }
} }
...@@ -10,6 +10,11 @@ namespace Performance.Services.ExtractExcelService.SheetDataWrite ...@@ -10,6 +10,11 @@ namespace Performance.Services.ExtractExcelService.SheetDataWrite
{ {
public class EmployeeDataWrite : ISheetDataWrite public class EmployeeDataWrite : ISheetDataWrite
{ {
public void WriteCollectData(ISheet sheet, PerSheetPoint point, SheetType sheetType, ExcelStyle style, List<collect_data> collects)
{
}
public void WriteSheetData(ISheet sheet, PerSheetPoint point, SheetType sheetType, ExcelStyle style, object data, Dictionary<ExDataDict, object> exdict) public void WriteSheetData(ISheet sheet, PerSheetPoint point, SheetType sheetType, ExcelStyle style, object data, Dictionary<ExDataDict, object> exdict)
{ {
if (data is List<per_employee> employees && employees.Any(t => accountingUnits.Contains(t.UnitType))) if (data is List<per_employee> employees && employees.Any(t => accountingUnits.Contains(t.UnitType)))
......
using NPOI.SS.UserModel; using NPOI.SS.UserModel;
using Performance.DtoModels; using Performance.DtoModels;
using Performance.EntityModels;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Text; using System.Text;
...@@ -8,6 +9,8 @@ namespace Performance.Services.ExtractExcelService.SheetDataWrite ...@@ -8,6 +9,8 @@ namespace Performance.Services.ExtractExcelService.SheetDataWrite
{ {
public interface ISheetDataWrite public interface ISheetDataWrite
{ {
void WriteCollectData(ISheet sheet, PerSheetPoint point, SheetType sheetType, ExcelStyle style, List<collect_data> collects);
void WriteSheetData(ISheet sheet, PerSheetPoint point, SheetType sheetType, ExcelStyle style, object data, Dictionary<ExDataDict, object> exdict = null); void WriteSheetData(ISheet sheet, PerSheetPoint point, SheetType sheetType, ExcelStyle style, object data, Dictionary<ExDataDict, object> exdict = null);
} }
} }
...@@ -10,6 +10,24 @@ namespace Performance.Services.ExtractExcelService.SheetDataWrite ...@@ -10,6 +10,24 @@ namespace Performance.Services.ExtractExcelService.SheetDataWrite
{ {
public class IncomeDataWrite : ISheetDataWrite public class IncomeDataWrite : ISheetDataWrite
{ {
public void WriteCollectData(ISheet sheet, PerSheetPoint point, SheetType sheetType, ExcelStyle style, List<collect_data> collects)
{
if (collects == null || !collects.Any(t => !string.IsNullOrEmpty(t.TypeName))) return;
var columns = collects.Where(t => !string.IsNullOrEmpty(t.TypeName)).Select(t => t.TypeName).Distinct().OrderBy(t => t).ToList();
var headers = columns.Select(t => new ExcelHeader
{
ColumnName = t.Trim(),
DoctorFactor = 0,
NurseFactor = 0,
TechnicianFactor = 0
}).ToList();
WriteDataHelper.WriteSheetHeader(sheet, point, sheetType, style, headers);
WriteDataHelper.WriteCollectData(sheet, point, sheetType, style, columns, collects);
}
public void WriteSheetData(ISheet sheet, PerSheetPoint point, SheetType sheetType, ExcelStyle style, object data, Dictionary<ExDataDict, object> exdict = null) public void WriteSheetData(ISheet sheet, PerSheetPoint point, SheetType sheetType, ExcelStyle style, object data, Dictionary<ExDataDict, object> exdict = null)
{ {
var modules = exdict[ExDataDict.ExModule] as List<ex_module>; var modules = exdict[ExDataDict.ExModule] as List<ex_module>;
...@@ -22,7 +40,7 @@ public void WriteSheetData(ISheet sheet, PerSheetPoint point, SheetType sheetTyp ...@@ -22,7 +40,7 @@ public void WriteSheetData(ISheet sheet, PerSheetPoint point, SheetType sheetTyp
var headers = modelItems.Select(t => new ExcelHeader var headers = modelItems.Select(t => new ExcelHeader
{ {
ColumnName = t.ItemName, ColumnName = t.ItemName.Trim(),
DoctorFactor = t.FactorValue1 ?? 0, DoctorFactor = t.FactorValue1 ?? 0,
NurseFactor = t.FactorValue2 ?? 0, NurseFactor = t.FactorValue2 ?? 0,
TechnicianFactor = t.FactorValue3 ?? 0 TechnicianFactor = t.FactorValue3 ?? 0
......
...@@ -10,6 +10,24 @@ namespace Performance.Services.ExtractExcelService.SheetDataWrite ...@@ -10,6 +10,24 @@ namespace Performance.Services.ExtractExcelService.SheetDataWrite
{ {
public class OtherIncomeDataWrite : ISheetDataWrite public class OtherIncomeDataWrite : ISheetDataWrite
{ {
public void WriteCollectData(ISheet sheet, PerSheetPoint point, SheetType sheetType, ExcelStyle style, List<collect_data> collects)
{
if (collects == null || !collects.Any(t => !string.IsNullOrEmpty(t.TypeName))) return;
var columns = collects.Where(t => !string.IsNullOrEmpty(t.TypeName)).Select(t => t.TypeName).Distinct().OrderBy(t => t).ToList();
var headers = columns.Select(t => new ExcelHeader
{
ColumnName = t.Trim(),
DoctorFactor = 0,
NurseFactor = 0,
TechnicianFactor = 0
}).ToList();
WriteDataHelper.WriteSheetHeader(sheet, point, sheetType, style, headers);
WriteDataHelper.WriteCollectData(sheet, point, sheetType, style, columns, collects);
}
public void WriteSheetData(ISheet sheet, PerSheetPoint point, SheetType sheetType, ExcelStyle style, object data, Dictionary<ExDataDict, object> exdict = null) public void WriteSheetData(ISheet sheet, PerSheetPoint point, SheetType sheetType, ExcelStyle style, object data, Dictionary<ExDataDict, object> exdict = null)
{ {
var modules = exdict[ExDataDict.ExModule] as List<ex_module>; var modules = exdict[ExDataDict.ExModule] as List<ex_module>;
......
using NPOI.SS.UserModel; using NPOI.SS.UserModel;
using Performance.DtoModels; using Performance.DtoModels;
using Performance.EntityModels;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Text; using System.Text;
namespace Performance.Services.ExtractExcelService.SheetDataWrite namespace Performance.Services.ExtractExcelService.SheetDataWrite
{ {
class SpecialUnitDataWrite : ISheetDataWrite public class SpecialUnitDataWrite : ISheetDataWrite
{ {
public void WriteCollectData(ISheet sheet, PerSheetPoint point, SheetType sheetType, ExcelStyle style, List<collect_data> collects)
{
}
public void WriteSheetData(ISheet sheet, PerSheetPoint point, SheetType sheetType, ExcelStyle style, object data, Dictionary<ExDataDict, object> exdict = null) public void WriteSheetData(ISheet sheet, PerSheetPoint point, SheetType sheetType, ExcelStyle style, object data, Dictionary<ExDataDict, object> exdict = null)
{ {
throw new NotImplementedException();
} }
} }
} }
...@@ -10,6 +10,24 @@ namespace Performance.Services.ExtractExcelService.SheetDataWrite ...@@ -10,6 +10,24 @@ namespace Performance.Services.ExtractExcelService.SheetDataWrite
{ {
public class WorkloadDataWrite : ISheetDataWrite public class WorkloadDataWrite : ISheetDataWrite
{ {
public void WriteCollectData(ISheet sheet, PerSheetPoint point, SheetType sheetType, ExcelStyle style, List<collect_data> collects)
{
if (collects == null || !collects.Any(t => !string.IsNullOrEmpty(t.TypeName))) return;
var columns = collects.Where(t => !string.IsNullOrEmpty(t.TypeName)).Select(t => t.TypeName).Distinct().OrderBy(t => t).ToList();
var headers = columns.Select(t => new ExcelHeader
{
ColumnName = t.Trim(),
DoctorFactor = 0,
NurseFactor = 0,
TechnicianFactor = 0
}).ToList();
WriteDataHelper.WriteSheetHeader(sheet, point, sheetType, style, headers);
WriteDataHelper.WriteCollectData(sheet, point, sheetType, style, columns, collects);
}
public void WriteSheetData(ISheet sheet, PerSheetPoint point, SheetType sheetType, ExcelStyle style, object data, Dictionary<ExDataDict, object> exdict = null) public void WriteSheetData(ISheet sheet, PerSheetPoint point, SheetType sheetType, ExcelStyle style, object data, Dictionary<ExDataDict, object> exdict = null)
{ {
var modules = exdict[ExDataDict.ExModule] as List<ex_module>; var modules = exdict[ExDataDict.ExModule] as List<ex_module>;
......
...@@ -19,6 +19,7 @@ public class PerSheetDataReadExpend : IPerSheetDataRead ...@@ -19,6 +19,7 @@ public class PerSheetDataReadExpend : IPerSheetDataRead
HeaderLastRowNum = 4, HeaderLastRowNum = 4,
HeaderFirstCellNum = 3, HeaderFirstCellNum = 3,
DataFirstRowNum = 5, DataFirstRowNum = 5,
DataFirstCellNum = 7,
AccountingUnit = new List<AccountingUnit> AccountingUnit = new List<AccountingUnit>
{ {
new AccountingUnit new AccountingUnit
......
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