【问题标题】:Import data from multiple CSV files to an Excel sheet将数据从多个 CSV 文件导入 Excel 工作表
【发布时间】:2012-09-21 13:15:03
【问题描述】:

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

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

总之,

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

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

【问题讨论】:

  • 好的,经过长时间的尝试。我很沮丧,没有任何工作。但是,实际上我收到的 csv 文件以某种方式损坏了。好吧,我将使用示例 CSV 再次测试我的代码,然后将其发布在此处以供参考。感谢您的帮助。

标签: c# excel csv


【解决方案1】:

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

This Stack Overflow question 是一个很好的起点。

【讨论】:

    【解决方案2】:

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

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

    然后使用EPPlus 在excel 中导出该DataTable,使用此sn-p 中的DataTableToExcelXlsx 方法:

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

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

    【讨论】:

      【解决方案3】:

      通过非常简单的编码,我能够读取文件。现在,我们唯一需要做的就是让这段代码有点花哨,以循环遍历给定文件夹中的所有 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];
       }
      

      【讨论】:

        猜你喜欢
        • 2016-04-17
        • 1970-01-01
        • 2021-01-27
        • 2018-07-14
        • 1970-01-01
        • 2019-07-25
        • 1970-01-01
        • 2016-10-16
        • 2019-10-10
        相关资源
        最近更新 更多