gpt4 book ai didi

c# - 通过 C# 在 Excel 中打开 CSV 文件?

转载 作者:太空狗 更新时间:2023-10-29 23:57:17 24 4
gpt4 key购买 nike

使用 Max Galkin 提供的解决方案,我将以下过程放在一起,将 ListView 中的所有数据传输到 .CSV 文件。但是,我遇到了 2 个部分的问题:

  1. 我还没有弄清楚当用户在相应的对话框中单击 YES 时如何成功打开新创建的 .CSV。
  2. 似乎某些用户(在 Virtual PC 上不像我自己)无法打开或查看新文件,除非他们先关闭应用程序。我相信这是因为应用程序仍然有一个与创建的文件相关联的进程。尝试打开文件时出现的消息是:'FileName.csv' cannot be accessed。该文件可能已损坏,位于没有响应的服务器上,或者是只读的。

这是我当前的代码:

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() 可能足以解决第一个问题,但在视觉上什么也没有发生,文档也没有打开。

最佳答案

1) Excel 将自己注册为 .csv 文件的默认处理程序。要使用该类型的默认文件处理程序打开任何文件,只需执行以下操作:

Process.Start(@"c:\full\path\to\file.csv");

2) File.WriteAllText 应该在最后关闭文件。您在上面显示的代码还有一行显示 File.Open(csvFileName... 以独占写入模式打开文件。由于您不关闭该文件,Excel 无法打开它直到 a) 进程终止或 b) 文件被垃圾收集器关闭。我敢打赌,在发生拒绝访问错误的情况下,垃圾收集器还没有运行。

最终建议:删除 File.Open 并替换为 Process.Start,您可能会看到不同的结果。

关于c# - 通过 C# 在 Excel 中打开 CSV 文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23092885/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com