亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

使用 Epplus 生成帶有嵌套列表的 xlsx

使用 Epplus 生成帶有嵌套列表的 xlsx

C#
鴻蒙傳說 2022-12-24 13:58:05
我正在使用 EPPlus 生成 xlsx 文檔。我下面的模型包括一個List<string>,這就是事情對我來說變得復雜的地方:                var tableBody = worksheet.Cells["B2:B2"].LoadFromCollection(                    from f in saaOperators.OrderBy(x => x.Identifier).Where(t => t.Identifier.StartsWith(worksheet.Name) ||                    (t.Identifier.StartsWith("W") && worksheet.Name.Equals("BIR")))                    from u in f.Units                    select new { f.Identifier, f.Name, f.Profile, u }, true);如果我這樣做select new {f.Identifier, f.Name, f.Profile, f.Units },它只返回Units列表中的第一項。如果我正在select new { f.Identifier, f.Name, f.Profile, u }為其中的每個項目做,Units它會創建帶有重復項的新行Identifier,Name并且Profile。這是我的模型類:public class SaaOperator{    public string Identifier { get; set; }    public string Name { get; set; }    public string Profile { get; set; }    public List<string> Units { get; set; } = new List<string>();}識別具有相同值的單元格并合并它們的正確方法Identifier是Name什么Profile?例如,在下面的屏幕截圖中,我需要合并B3:B4, B5:B6, C3:C4, C5:C6, D3:D4,D5:D6.我知道我可以使用worksheet.Cells["B3:B4"].Merge = true;,但我需要一種方法來以編程方式識別具有相同值的開始和結束單元格。
查看完整描述

2 回答

?
牧羊人nacy

TA貢獻1862條經驗 獲得超7個贊

根據評論,我會避免使用這種LoadFromCollection方法并采用傳統方法,for因為您所做的太具體了。而且我也會避免嘗試合并單元格,因為這會使事情不必要地復雜化。這應該這樣做:


var data = saaOperators

    .Where(t => t.Identifier.StartsWith(worksheet.Name) || (t.Identifier.StartsWith("W") && worksheet.Name.Equals("BIR")))

    .OrderBy(x => x.Identifier)

    .ToList();


var r = 2;


worksheet.Cells[r, 1].Value = "Identifier";

worksheet.Cells[r, 2].Value = "Name";

worksheet.Cells[r, 3].Value = "Profile";

worksheet.Cells[r, 4].Value = "Unit";

r++;


for (var i = 0; i < data.Count; i++)

{

    var op = data[i];

    worksheet.Cells[r + i, 1].Value = op.Identifier;

    worksheet.Cells[r + i, 2].Value = op.Name;

    worksheet.Cells[r + i, 3].Value = op.Profile;


    if (!op.Units.Any())

        continue;


    for (var j = 0; j < op.Units.Count; j++)

        worksheet.Cells[r + i + j, 4].Value = op.Units[j];


    r += op.Units.Count - 1;

}


查看完整回答
反對 回復 2022-12-24
?
臨摹微笑

TA貢獻1982條經驗 獲得超2個贊

這是一種方法:


給定一個List<SaaOperator>或其他IEnumerable<SaaOperator>:


foreach (var saaOperator in saaOperators)

{

    string[] valuesToDisplay;

    for (var x = 0; x < saaOperator.Units.Count; x++)

    {

        if (x == 0) // show all the properties

            valuesToDisplay = new[]

                {saaOperator.Identifier, 

                 saaOperator.Name, 

                 saaOperator.Profile, 

                 saaOperator.Units[x]};

        else // after the first unit, don't repeat the other properties

            valuesToDisplay = new[]

                {"", "", "", saaOperator.Units[x]};

    }

}

換一種說法,

  • 遍歷列表中的所有項目

  • 對于每個項目,遍歷Units列表中的所有值。

  • 如果它是第一項,則顯示所有屬性。如果不是第一項,則只顯示單位。


查看完整回答
反對 回復 2022-12-24
  • 2 回答
  • 0 關注
  • 155 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號