2012-02-29 62 views
0

我有一个字符串作为键的字典,以及字符串列表作为值。我想将这些值写入Excel,以便按键位于最上面一行,并且它们的值位于相应的列中。我已经有一些代码将写入到顶部行的键,但我不知道如何做的价值观。提前致谢!在C#中将字典写入Excel#

 Excel.Application oXL = new Excel.Application(); 
     Excel._Workbook oWB = (Excel._Workbook)(oXL.Workbooks.Add(Missing.Value)); 
     Excel._Worksheet oSheet = (Excel._Worksheet)oWB.ActiveSheet; 
     Excel.Range oRng; 

     string[] saNames = dict.Keys.ToArray(); 

     oRng = oSheet.get_Range("A1", Missing.Value).get_Resize(1, dict.Keys.Count); 
     oRng.Value = saNames; 

     oXL.Visible = true; 
     oXL.UserControl = true; 

回答

3

是这样的吗?浏览每个键,将其写入最上面的一行,然后在连续键的值中查看字符串。

int column = 1; // Initialize for keys. 
foreach (string key in dict.Keys) 
{ 
    int row = 1; // Initialize for values in key. 
    oSheet.Cells(row, column).Value = key; 

    foreach (string value in dict[key]) 
    { 
     row++; 
     oSheet.Cells(row,column).Value = value; 
    } 

    column++; // increment for next key. 
} 
+0

看起来恰到好处。 – zmbq 2012-02-29 07:34:21

+0

谢谢,我没有意识到我可以迭代这样的单元格。我以为我必须使用范围对象。 – user1090859 2012-02-29 19:13:56

2

我知道不是EXCEL,但如果CSV格式对您来说足够好,那么这里是一个适用于我的示例。使用SystemSystem.IOSystem.Linq

public static void DictToCsv(Dictionary<string, string> dict, string filePath) 
    { 
     try 
     { 
      var csvLines = String.Join(Environment.NewLine, 
        dict.Select(d => d.Key + "," + d.Value)); 
      Directory.CreateDirectory(Path.GetDirectoryName(filePath)) 
      File.WriteAllText(filePath, csvLines); 
     } 
     catch (Exception ex) 
     { 
      logger.Error(ex.ToString()); 
     } 
    } 

当然 享受