3

50 個の同様の csv ファイルから 1 つの Excel シートにデータをインポートする必要があります。各ファイルから選択した列のみを取得し、それらを 1 つのシートにまとめる方法はありますか。

私のcsvファイルの構造:すべてのファイルでまったく同じいくつかの列。(私はそれらをExcelに入れたい)次に、同じ列名を持つが異なるデータを持つ1つの列を、Excelシートに異なる名前で並べて配置したい。csv ファイルの残りのすべての列は必要ありません。

要するに、

  1. すべての csv ファイルを読み取り、
  2. すべてのcsvに共通するすべての列を取得し、Excelシートに入れます。
  3. ここで、ヘッダーが同じでデータが異なる各ファイルから1列を取得し、csvファイル名から名前を付けてExcelシートに次々と配置します。
  4. 残りの列はそのままにします。
  5. Excel シートを Excel ファイルに書き込みます。

最初は簡単にできると思っていたのですが、学習段階のプログラミングスキルを考えるとかなり難しいです。助けてください。

4

3 に答える 3

3

Microsoft Text DriverDataSet内のCSVデータを読み取ることができるため、データ操作が簡単になります。

このStackOverflowの質問は良い出発点です。

于 2012-09-21T14:01:10.747 に答える
3

最も速い方法は、FileHelpersを使用して CSV を DataTable に読み込むことです。

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

次に、その DataTable を Excel にエクスポートするEPPlusを使用して、このスニペットのメソッド DataTableToExcelXlsx を使用します。

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

EPPlus を使用すると、このコードを実行しているマシンに Excel をインストールする必要がなく、サーバー (ASP.NET) で使用できます。

于 2012-09-21T14:20:29.357 に答える
2

非常に簡単なコーディングで、ファイルを読み取ることができました。ここで行う必要があるのは、指定されたフォルダー内のすべての CSV ファイルをループしてデータを収集するように、このコードを少し凝ったものにすることだけです。データを読み取ったら、必要に応じてフィルター処理して 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 に答える