C#Excelデータを読み込むいくつかの方法(大量のデータを含む)
17048 ワード
C#Excelデータを読み込むいくつかの方法(大量のデータを含む) C#Excelデータを読み取るいくつかの方法(大量のデータを含む) OleDB方式 COMコンポーネントの方式 NPOI方式読み出し(ここではテストせず、他のブログ参照)
よく使われるExcelデータの読み方は3種類あります.
OleDB方式この方式は この方法は簡単で、読み取り速度が速く、特に小ロットデータの読み取りに適している. の欠点は、データ量が非常に大きい場合(例えば2 w行を超える場合)、メモリが非常に消費され、メモリオーバーフローの異常が発生する可能性があり、他の方法を使用する必要があることです.
COMコンポーネントの方式この方法では、 の利点は、Excelのデータを非常に柔軟に読み取ることができ、さまざまな関数を柔軟に呼び出すことができることです. の欠点は、バックグラウンドでExcelを開く必要があり、データ量が小さいと読み取り速度の優位性が明らかではないことです.
NPOI方式読み取り(ここではテストせず、他のブログ参照) NPOIは、Excel/WordなどのマイクロソフトOLE 2コンポーネントのドキュメントを読み書きするPOIプロジェクトの.NETバージョンです. の利点は、Excelの読み取り速度が速く、読み取り方が柔軟であることです. の欠点は、関連プラグインをダウンロードする必要があることです. ここのコードは以下のブログリンクを参照してください:C#Excelを読み取る3つの方法と比較
よく使われるExcelデータの読み方は3種類あります.
OleDB方式
AccessDatabaseEngine
をインストールする必要があり、実際にはACCESSデータベースを利用してデータをDataTableに読み出す方式である.ダウンロードリンクWHC.OrderWater.Commons
には完成した操作パッケージがあり、日常的に使用するには十分です.ダウンロードリンク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インストール参照を使用できます.WorkSheet.Range()
方式の読み取りにより読み取り速度が大幅に向上すれば、一括データ読み取りに適している.///
/// 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方式読み取り(ここではテストせず、他のブログ参照)