You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Syncfusion DocIO生成docx表格时按年份分组新增累计求和行问题

Syncfusion DocIO 按年插入年度合计行实现方案

你可以通过新增临时变量实时累计当年的各项数值,触发合计条件时直接输出累计值即可,修改后的代码如下:

int i = 1;
// 新增当年累计统计变量
int currentYear = aAmortizationPlanLoanPayment.First().Date.Year;
decimal yearTotalAnnuity = 0;
decimal yearTotalInterest = 0;
decimal yearTotalPrincipal = 0;

foreach (var amortizationData in aAmortizationPlanLoanPayment)
{
    // 年份切换时重置累计值
    if (amortizationData.Date.Year != currentYear)
    {
        currentYear = amortizationData.Date.Year;
        yearTotalAnnuity = 0;
        yearTotalInterest = 0;
        yearTotalPrincipal = 0;
    }
    // 累加当前行数据到当年累计值
    yearTotalAnnuity += amortizationData.Anuity;
    yearTotalInterest += amortizationData.InterestPaid;
    yearTotalPrincipal += amortizationData.PrincipalPaid;

    WTableRow tableRow = tableAmortizationData.AddRow(true);
    tableRow.Cells[0].AddParagraph().AppendText(i.ToString());
    tableRow.Cells[1].AddParagraph().AppendText(amortizationData.Anuity.ToString());
    tableRow.Cells[2].AddParagraph().AppendText(amortizationData.InterestPaid.ToString());
    tableRow.Cells[3].AddParagraph().AppendText(amortizationData.PrincipalPaid.ToString());
    tableRow.Cells[4].AddParagraph().AppendText(amortizationData.BalanceDue.ToString());
    tableRow.Cells[5].AddParagraph().AppendText(amortizationData.Date.AddMonths(aAmortizationPlanLoanPaymentData.Moratorium).ToString("yyyy/M/dd"));
    i++;

    bool hasInsertYearSum = false;
    // 12月末插入年度合计
    if (amortizationData.Date.Month == 12)
    {
        WTableRow YearSumrow = tableAmortizationData.AddRow(true);
        YearSumrow.Cells[0].AddParagraph().AppendText($"{amortizationData.Date.Year}年合计");
        YearSumrow.Cells[1].AddParagraph().AppendText(yearTotalAnnuity.ToString());
        YearSumrow.Cells[2].AddParagraph().AppendText(yearTotalInterest.ToString());
        YearSumrow.Cells[3].AddParagraph().AppendText(yearTotalPrincipal.ToString());
        hasInsertYearSum = true;
    }

    // 贷款结清时插入当年合计,避免非12月结清漏插
    if (amortizationData.BalanceDue == 0.00 && !hasInsertYearSum)
    {
        WTableRow LastYearRow = tableAmortizationData.AddRow(true);
        LastYearRow.Cells[0].AddParagraph().AppendText($"{amortizationData.Date.Year}年合计");
        LastYearRow.Cells[1].AddParagraph().AppendText(yearTotalAnnuity.ToString());
        LastYearRow.Cells[2].AddParagraph().AppendText(yearTotalInterest.ToString());
        LastYearRow.Cells[3].AddParagraph().AppendText(yearTotalPrincipal.ToString());
    }
}

// 总合计逻辑保持不变
WTableRow tableRowSum = tableAmortizationData.AddRow(true);
tableRowSum.Cells[0].AddParagraph().AppendText("总计");
tableRowSum.Cells[1].AddParagraph().AppendText(aAmortizationPlanLoanPayment.Sum(p => p.Anuity).ToString());
tableRowSum.Cells[2].AddParagraph().AppendText(aAmortizationPlanLoanPayment.Sum(p => p.InterestPaid).ToString());
tableRowSum.Cells[3].AddParagraph().AppendText(aAmortizationPlanLoanPayment.Sum(p => p.PrincipalPaid).ToString());

如果需要匹配你示例中的小数格式(逗号作为小数分隔符),在ToString方法中指定对应区域文化参数即可。

内容的提问来源于stack exchange,提问作者aleksanderv24

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 02:39:00