我发现上一篇用心加了标签和图片的阅读量还是很一般啊,这篇就不特意整那些花里胡哨的了。

前面我们已经遍历好了数据,接下来就是对数据的进一步处理(拼接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<AX (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; //隐藏网格线

        控制器文件就记录到这里为止。

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐