Вопрос по csv, c#, listview, winforms – Экспорт ListView в CSV

3

Кто-нибудь знает о достойном инструменте экспорта CSV для экспорта из ListView? Мне нужно вывести обновление проекта, и функция «ползучести» означает, что у меня нет времени, чтобы реализовать эту последнюю функцию самостоятельно.

Ваш Ответ

2   ответа
2

FileHelpers это хорошая библиотека, которая может быть просто вашим лучшим другом сегодня

36

которую я бы сказал, если у вас нет очень странных требований ... но в этом случае, вероятно, ни один внешний инструмент не может вам помочь в любом случае.

Вот как я бы подошел к проблеме:

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();
    }
}
@ShehabFawzy Что ты имеешь в виду? Какие свойства? Я думаю, что это было написано для .NET 3.5, может быть, даже раньше.
@jyelton WOW спасибо, избавил меня от неприятностей. только одно небольшое изменение, хотя в .net 4 вы должны разыгратьlistItem.SubItems[i].Text как((ListViewItem)listItem).SubItems[i].Text
@ Yacoder. Как насчет .net 3.5, большинство этих свойств там недоступно
@Yacoder listView.Columns и все его методы недоступны в 3.5
Хороший ответ. Одна проблема, которую я только что обнаружил, заключается в том, что если первый столбец вашего списка представляет собой «ID» в верхнем регистре, то Excel отказывается открывать файл CSV без генерации ошибки, так как глупо считает, что файл является файлом SYLK. Лучший обходной путь, который я нашел для предотвращения этого, состоит в простом преобразовании заголовков в строчные. MS заявляет, что вы можете поставить апостроф в качестве первого символа в первой строке, чтобы исправить это, но затем вы получите уродливый апостроф в Excel. Больше информации:support.microsoft.com/kb/215591

Похожие вопросы