[英]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.