【发布时间】:2014-05-30 08:22:01
【问题描述】:
使用Max Galkin 提出的解决方案,我整理了以下过程,将 ListView 中的所有数据传输到 .CSV 文件。但是,我遇到了 2 个部分的问题:
- 当用户在相应的对话框中单击
YES时,我还没有弄清楚如何成功打开新创建的 .CSV。 - 似乎某些用户(在与我不同的 Virtual PC 上)无法打开或查看新文件,除非他们首先关闭应用程序。我相信这是由于应用程序仍然有一个与创建的文件相关联的进程。尝试打开文件时出现的消息是:
'FileName.csv' cannot be accessed. The file may be corrupted, located on a server that is not responding, or read-only.
这是我当前的代码:
private void btnCSVExcel_Click(object sender, EventArgs e)
{
if (!Directory.Exists(@"C:\TEMP\"))
{
Directory.CreateDirectory(@"C:\temp\");
}
if (!Directory.Exists(@"C:\temp\Exported CSV Files\"))
{
Directory.CreateDirectory(@"C:\temp\Exported CSV Files\");
}
string csvPath = @"C:\temp\Exported CSV Files\";
ListViewToCSV(lvData, csvPath, false);
}
// https://stackoverflow.com/questions/1008556/export-listview-to-csv
public static void ListViewToCSV(ListView listView, string filePath, bool includeHidden)
{
string csvFileName = filePath + DateTime.Now.ToString("yyyy-MM-dd-hh.mm.ss.ffffff") + ".csv";
//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(csvFileName, result.ToString());
var openCSVFile = MessageBox.Show("Export Complete. CSV file saved as: " + csvFileName + ". \n\n Open File Now?", "CSV Exported", MessageBoxButtons.YesNo, MessageBoxIcon.Information);
if (openCSVFile == DialogResult.Yes)
{
// NEED TO OPEN THE CSV FILE IN EXCEL....?
File.Open(csvFileName, FileMode.Open, FileAccess.ReadWrite, FileShare.None);
}
}
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();
}
有人对我如何解决最后两个问题有任何想法吗?我认为File.Open() 对于第一个问题可能就足够了,但视觉上什么都没有发生并且文档没有打开。
【问题讨论】:
-
This 为我工作。
标签: c# .net excel csv export-to-csv