【问题标题】:How to add values to a spreadsheet from a dictionary?如何将值从字典添加到电子表格?
【发布时间】:2014-04-01 16:05:37
【问题描述】:

我有一个模板电子表格文档,它有两列,服务器名称和 IP 地址。 如何填充电子表格,以便每个字典键进入服务器列中自己的单元格,而相应的值进入 IP 列中它旁边的单元格?

我正在使用 EPPlus 库,但找不到有关该主题的任何内容。

以下是我找到并尝试过的,但它用于列表

using (ExcelPackage package = new ExcelPackage(_fileInfo))
{
    ExcelWorksheet worksheet = package.Workbook.Worksheets[1];

    for (int i = 0; i < listOfIPs.Count; i++)
    {
        worksheet.Cells[i + 2, 1].Value = listOfIPs[i];
    }

    package.Save();
}

【问题讨论】:

    标签: c# excel epplus


    【解决方案1】:

    我不熟悉 EPPlus,因此我不确定您是如何获得对活动工作表的引用的 - 您需要弄清楚这一点,尽管一旦完成纯 C# 并具有一点关于 VBA 模型的知识,您就可以轻松避免任何迭代以将字典内容保存到电子表格中:

    // create a sample dictionary and fill it
    Dictionary<string, string> myCol = new Dictionary<string, string>();
    myCol.Add("server1", "ip1");
    myCol.Add("server2", "ip2");
    
    // grab a reference to the active Sheet
    // this may vary depending on what framework you are using
    Worksheet ws = Globals.ThisWorkbook.ActiveSheet as Worksheet;
    
    // create a Range variable
    Range myRange;
    
    // Transpose the keys to column A
    myRange = ws.get_Range("A1");
    myRange.get_Resize(myCol.Keys.ToArray().Count(),1).Value = 
                     ws.Parent.Parent.Transpose(myCol.Keys.AsEnumerable().ToArray());
    
    // transpose the Values to column B
    myRange = ws.get_Range("B1");
    myRange.get_Resize(myCol.Values.ToArray().Count(), 1).Value = 
                   ws.Parent.Parent.Transpose(myCol.Values.AsEnumerable().ToArray());
    

    调试结果符合预期


    使用 EPPlus,我认为您可以这样做(未经测试)

    using (ExcelPackage package = new ExcelPackage(file))
    {
        ExcelWorksheet worksheet = package.Workbook.Worksheets.Add("test");
    
        worksheet.Cells["A1"].LoadFromCollection(myColl, true, OfficeOpenXml.Table.TableStyles.Medium);
    
        package.Save();
    }
    

    有关 VBA 集合迭代和打印到工作表 @vba4all.com 的更多详细信息

    【讨论】:

    • 有没有办法LoadFromCollection 字典有多个值?当我尝试加载如下所示的字典时:Dictionary&lt;string, List&lt;string&gt;&gt; dict = new Dictionary&lt;string, List&lt;string&gt;&gt;(); 不会插入值。我在 excel 中得到这个值:System.Collections.Generic.List1[System.String]
    • @DesmondLost 我对 EPPlus 不是很熟悉,但我认为这不可能......
    【解决方案2】:

    您可以访问字典的键并像遍历列表一样遍历它们。

            var foo = new Dictionary<string, string>(); // populate your dictionary
            foreach(var key in foo.Keys)
            {
                var value = foo[key];
                // do stuff with 'key' and 'value', like put them into the excel doc
            }
    

    【讨论】:

    • 认真的吗?迭代?这是老派,效率低下。
    猜你喜欢
    • 1970-01-01
    • 2020-09-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-30
    • 1970-01-01
    相关资源
    最近更新 更多