C#Excelデータを読み込むいくつかの方法(大量のデータを含む)


C#Excelデータを読み込むいくつかの方法(大量のデータを含む)
  • C#Excelデータを読み取るいくつかの方法(大量のデータを含む)
  • OleDB方式
  • COMコンポーネントの方式
  • NPOI方式読み出し(ここではテストせず、他のブログ参照)

  • よく使われるExcelデータの読み方は3種類あります.
    OleDB方式
  • この方式はAccessDatabaseEngineをインストールする必要があり、実際にはACCESSデータベースを利用してデータをDataTableに読み出す方式である.ダウンロードリンク
  • この方法は簡単で、読み取り速度が速く、特に小ロットデータの読み取りに適している.WHC.OrderWater.Commonsには完成した操作パッケージがあり、日常的に使用するには十分です.ダウンロードリンク
  • の欠点は、データ量が非常に大きい場合(例えば2 w行を超える場合)、メモリが非常に消費され、メモリオーバーフローの異常が発生する可能性があり、他の方法を使用する必要があることです.
  • public static DataSet ExcelToDataSet(string excelPath, bool header, ExcelType eType)
    {
        string connectstring = GetExcelConnectstring(excelPath, header, eType);
        return ExcelToDataSet(connectstring);
    }
    
    public static DataSet ExcelToDataSet(string connectstring)
    {
        using (OleDbConnection conn = new OleDbConnection(connectstring))
        {
            DataSet ds = new DataSet();
            List<string> tableNames = GetExcelTablesName(conn);
    
            foreach (string tableName in tableNames)
            {
                OleDbDataAdapter adapter = new OleDbDataAdapter("SELECT * FROM [" + tableName + "]", conn);
                adapter.Fill(ds, tableName);
            }
            return ds;
        }
    }
    

    COMコンポーネントの方式
  • この方法では、Microsoft.Office.Interp.Excel参照を追加する必要があります.NuGetインストール参照を使用できます.
  • の利点は、Excelのデータを非常に柔軟に読み取ることができ、さまざまな関数を柔軟に呼び出すことができることです.WorkSheet.Range()方式の読み取りにより読み取り速度が大幅に向上すれば、一括データ読み取りに適している.
  • の欠点は、バックグラウンドでExcelを開く必要があり、データ量が小さいと読み取り速度の優位性が明らかではないことです.
  • /// /// Excel /// /// Excel /// /// /// public static object[,] GetExcelRangeData(string excelPath, string stCell, string edCell) { Microsoft.Office.Interop.Excel.Application app = new Microsoft.Office.Interop.Excel.Application(); Workbook workBook = null; object oMissiong = Missing.Value; try { workBook = app.Workbooks.Open(excelPath, oMissiong, oMissiong, oMissiong, oMissiong, oMissiong, oMissiong, oMissiong, oMissiong, oMissiong, oMissiong, oMissiong, oMissiong, oMissiong, oMissiong); if (workBook == null) return null; Worksheet workSheet = (Worksheet) workBook.Worksheets.Item[1]; // , //var maxN = workSheet.Range[startCell].End[XlDirection.xlDown].Row; return workSheet.Range[stCell + ":" + edCell].Value2; } catch (Exception e) { return null; } finally { //COM if (workBook != null) { workBook.Close(false, oMissiong, oMissiong); Marshal.ReleaseComObject(workBook); app.Workbooks.Close(); app.Quit(); Marshal.ReleaseComObject(app); } } } // public static List<Edge> ReadAllEdgesFromFile() { List<Edge> lstEdges = new List<Edge>(); object[,] data = ExcelHelper.GetExcelRangeData(FilePath, "A1", "C82412"); int length = data.GetLength(0); // 1 , for (int i = 1; i <= length; i++) { Edge edge = new Edge(); // 1 , edge.EdgeID = Convert.ToInt32(data[i, 1]); edge.EdgeStartIndex = Convert.ToInt32(data[i, 2]); edge.EdgeEndIndex = Convert.ToInt32(data[i, 3]); edge.StSelected = false; edge.EdSelected = false; lstEdges.Add(edge); } return lstEdges; }
    NPOI方式読み取り(ここではテストせず、他のブログ参照)
  • NPOIは、Excel/WordなどのマイクロソフトOLE 2コンポーネントのドキュメントを読み書きするPOIプロジェクトの.NETバージョンです.
  • の利点は、Excelの読み取り速度が速く、読み取り方が柔軟であることです.
  • の欠点は、関連プラグインをダウンロードする必要があることです.
  • ここのコードは以下のブログリンクを参照してください:C#Excelを読み取る3つの方法と比較