2009-06-17 177 views
3

是否有人知道从ListView导出的体面的CSV导出工具?我疯狂地赶上项目更新和功能蠕变意味着我没有时间得到这个最终迫切功能实现自己。将ListView导出为CSV

回答

35

这不是一个很大的功能,我会说,除非你有一些非常奇怪的要求...但在这种情况下,也许没有外部无论如何,工具可以帮助你。

这里是我会怎么处理这个问题:

class ListViewToCSV 
{ 
    public static void ListViewToCSV(ListView listView, string filePath, bool includeHidden) 
    { 
     //make header string 
     StringBuilder result = new StringBuilder(); 
     WriteCSVRow(result, listView.Columns.Count, i => includeHidden || listView.Columns[i].Width > 0, i => listView.Columns[i].Text); 

     //export data rows 
     foreach (ListViewItem listItem in listView.Items) 
      WriteCSVRow(result, listView.Columns.Count, i => includeHidden || listView.Columns[i].Width > 0, i => listItem.SubItems[i].Text); 

     File.WriteAllText(filePath, result.ToString()); 
    } 

    private static void WriteCSVRow(StringBuilder result, int itemsCount, Func<int, bool> isColumnNeeded, Func<int, string> columnValue) 
    { 
     bool isFirstTime = true; 
     for (int i = 0; i < itemsCount; i++) 
     { 
      if (!isColumnNeeded(i)) 
       continue; 

      if (!isFirstTime) 
       result.Append(","); 
      isFirstTime = false; 

      result.Append(String.Format("\"{0}\"", columnValue(i))); 
     } 
     result.AppendLine(); 
    } 
} 
+1

尼斯的答案。我刚刚发现的一个问题是,如果listview的第一列是大写的“ID”,那么excel拒绝打开CSV文件而不产生错误,因为它愚蠢地认为该文件是SYLK文件。我发现防止这种情况发生的最佳解决方法是简单地将标题转换为小写。 MS状态,你可以把一个撇号作为第一行的第一个字符来解决这个问题,但是你会在excel中出现一个丑陋的撇号。更多信息:http://support.microsoft.com/kb/215591 – Bryan 2009-08-29 10:19:11