【发布时间】:2020-11-10 17:35:49
【问题描述】:
我需要将 ListView 导出到 csv,我从这个答案中找到了解决方案。Here
问题是我将整行写成一列。
代码如下:
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();
}
任何想法我必须做什么?
【问题讨论】:
-
ListView 只是一个 UI 控件,用于显示多属性/列数据。这不是数据本身。如果要导出该数据,请使用 CsvHelper 之类的库,甚至使用手写代码来导出 数据,而不是控件。
-
如果您的数据是数据项的集合,例如
List<Customer>,则导出它很容易。您可以将每个值写入文件,也可以使用CsvHelper 和对CsvWriter.WriteRecords(myCustomers)的一次调用 -
顺便说一句,您发布的内容并未显示 CSV 存在任何问题。它显示尝试使用错误设置在 Excel 中打开 CSV。您可以使用 Epplus 生成真正的 Excel 文件。同样,生成文件就像调用
sheet.Cells.LoadFromCollection一样简单 -
@jdweng 在这种情况下,真正的问题是 OP 试图在非美国语言环境中的 Excel 中打开文件。这与 CSV 完全无关
-
@Karoliuakas 这与 CSV 无关,它 100% 与 Excel 和最终用户的区域设置有关。
标签: c# csv split export-to-csv