C#开发报表模块自学——控制器cs文件代码分析3
我发现上一篇用心加了标签和图片的阅读量还是很一般啊,这篇就不特意整那些花里胡哨的了。
前面我们已经遍历好了数据,接下来就是对数据的进一步处理(拼接ID、记录值、计算偏差)了。

1、初始化变量
List<decimal?> values = new List<decimal?>(); // 存储所有检测结果值
List<decimal?> devValues = new List<decimal?>(); // 存储相邻结果的偏差值
decimal? value1 = null; // 临时存储当前偏差值
decimal? Value2 = null; // 记录前一个检测值
int Count1 = 0; // 有效检测结果计数
int Count2 = 0; // 失败检测计数
此处的 decimal? 表示可空的十进制小数(null表示无数据)。
List<decimal?>则是用于动态列表,用于存储多个可空的小数值。
2、再次遍历数据
foreach (var item in plan.Value.OrderBy(p => p.UpdateDate))
plan.Value是该组的数据列表,
OrderBy(p => p.UpdateDate):按 UpdateDate升序排序,确保按时间顺序处理数据。
————————————————————————
emm、写到这里我突然感觉这样记录好没意思。枯燥又单调
3、规格上下限
举例:resultStatic.SpecUpLimit = project.SpecUpLimit; // 规格上限
此处是将当前项目的规格参数赋值给 resultStatic(最终统计结果对象)。
4、处理结果
单拎一些重要语法出来记录下了:
.IsNullOrEmpty():扩展方法,检查字符串是否为 null或空。
Math.Abs((decimal)(value - preValue)):
value - preValue:计算当前值与前一个值的差值。
(decimal):强制转换为 decimal(因为 decimal?不能直接用于 Math.Abs)。
Math.Abs:取绝对值,确保偏差值为正。
preValue = value:保存当前值,供下一次循环计算偏差使用。
5、获取明细数据并转化类型
public virtual EList<A> X (string idStrings)
{
EList<A> M = new EList<A>();
List<double> ids = idStrings.Split(',').ToList().ConvertAll(s => Convert.ToDouble(s));
var list = RT.Service.Resolve<Controller1>().GetSpotDtlsByIds(ids);
foreach (var project in list.OrderBy(p => p.UpdateDate))
{
return M;
}

6、创建excle表
public virtual (string fileName, string fileContent) CreateReport(List<A> statics)
{
var fileName = $"Report_{DateTime.Now:yyyyMMddHHmmss}";
IWorkbook wb = new XSSFWorkbook();
CreateSheet1(wb, statics); // 生成Sheet
return ExportHelper.ExportExcel(fileName, "xlsx", wb);
}
此处的 CreatSheet1 调用的是后面的方法,在 C# 中,方法的调用顺序与方法的定义顺序无关,只要方法在同一个类中(或通过引用可见),编译器就能正确解析。

7、sheet表创建
这里分为 定义样式、定义表结构、表头填充、数据填充、样式调整。
没什么值得特别细讲的,样式定义如下例句:
var line13Bold = ExportHelper.GetFont(wb, "等线", 13, 700); // 表头字体
表结构定义如下例句:
ISheet sheet = wb.CreateSheet("示例Sheet");
sheet.DisplayGridlines = false; //隐藏网格线
控制器文件就记录到这里为止。
更多推荐
所有评论(0)