3

我需要将 50 个类似 csv 文件中的数据导入到单个 Excel 表中。有没有办法从每个文件中只获取选定的列并将它们放在一张纸上。

我的 csv 文件的结构:所有文件中的几列完全相同。(我希望它们在 excel 中)然后一列具有相同的列名但不同的数据,我想在 excel 表中以不同的名称彼此相邻放置。我不希望 csv 文件中的所有其他剩余列。

简而言之,

  1. 读取所有 csv 文件,
  2. 获取所有 csv 共有的所有列并放入 excel 表中。
  3. 现在,从每个具有相同标题但数据不同的文件中取出一列,并在 Excel 表中以 csv 文件名命名。
  4. 留下剩余的列。
  5. 将excel表写入excel文件。

最初我认为这很容易做到,但考虑到我在学习阶段的编程能力,这对我来说很难。请帮忙。

4

3 回答 3

3

Microsoft Text Driver允许您读取 DataSet 中的 CSV 数据,使数据操作变得容易。

这个 Stack Overflow 问题是一个很好的起点。

于 2012-09-21T14:01:10.747 回答
3

最快的方法可能是使用FileHelpers将 CSV 读入 DataTable :

http://filehelpers.sourceforge.net/FileHelpers.CommonEngine.CsvToDataTable_overload_4.html

然后使用EPPlus在 excel 中导出该 DataTable,使用此代码段中的 DataTableToExcelXlsx 方法:

https://stackoverflow.com/a/9569827/351383

使用 EPPlus,您不必在执行此代码的机器上安装 Excel,您可以在服务器 (ASP.NET) 上使用它

于 2012-09-21T14:20:29.357 回答
2

通过非常简单的编码,我能够读取文件。现在,我们唯一需要做的就是让这段代码有点花哨,以循环遍历给定文件夹中的所有 CSV 文件并收集数据。一旦我们读取数据,就可以根据需要对其进行过滤并放入 Excel。当然,excel可以自己导入CSV,但是每次都这样做,并不实用。同样,我们可以将代码添加到应用程序以灵活使用,这正是我想要做的。

public static System.Data.DataTable GetDataTable(string strFileName)

{
        System.Data.OleDb.OleDbConnection dbConnect = new System.Data.OleDb.OleDbConnection("Provider=Microsoft.Jet.OleDb.4.0; Data Source = " + System.IO.Path.GetDirectoryName(strFileName) + ";Extended Properties = \"Text;HDR=YES;FMT=TabDelimited\"");
        dbConnect.Open();
        string strQuery = "SELECT * FROM [" + System.IO.Path.GetFileName(strFileName) + "]";
        System.Data.OleDb.OleDbDataAdapter adapter = new System.Data.OleDb.OleDbDataAdapter(strQuery, dbConnect);
        System.Data.DataSet dSet = new System.Data.DataSet("CSV File");
        adapter.Fill(dSet);
        dbConnect.Close();
        return dSet.dbTables[0];
 }
于 2012-09-24T15:36:31.437 回答