簡體   English   中英

C# 導出列表視圖到 CSV

[英]C# Export ListView to CSV

我需要將 ListView 導出到 csv 並且我從這個答案中找到了解決方案。 這里
問題是我將整行放入一列。

我懂了: 在此處輸入圖像描述

我需要這個: 在此處輸入圖像描述

下面的代碼:

   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();
    }

任何想法我必須做什么?

這與 CSV 無關。 第一個屏幕截圖顯示了一個完美的 CSV。 它還顯示了在 Excel 中打開該文件的嘗試。

Excel 將使用最終用戶的語言環境來決定使用什么列、小數分隔符和日期格式。 當您雙擊文本文件時,Excel 將使用最終用戶的區域設置作為默認值導入該數據。

在大多數歐洲國家,是小數點分隔符,因此它也不能用作列表分隔符。 否則你不會知道100,00,234是什么意思。 那是2列還是3列?

在這種情況下,典型的列表分隔符是; . 這是在最終用戶的區域設置中指定的。 在大多數歐洲國家,您會看到100,00;234

如果您希望您的最終用戶能夠通過雙擊打開 Excel 中生成的文件,則您必須使用與其區域設置匹配的列表小數分隔符。

更好的選擇是生成真正的 Excel 文件,例如Epplus 它不需要在客戶端或服務器上安裝 Excel,並生成真正的 Excel (xlsx) 文件。

導出數據就像調用以下命令一樣簡單:

using (var pck = new ExcelPackage())
{
    var sheet = pck.Workbook.Worksheets.Add("sheet");
    sheet.Cells["C1"].LoadFromCollection(items);
    pck.SaveAs(new FileInfo(@"c:\workbooks\myworkbook.xlsx"));
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM