20,000 を超えるレコードを含む Excel シートがあり、データを処理するために、これらのデータを非常に効率的かつ高速な方法でデータセットまたはデータテーブルに取り込みたいと考えています。C#コードを使用してこれを行う方法を知っている人はいますか...
12730 次
3 に答える
3
public static DataSet exceldata(string filelocation)
{
DataSet ds = new DataSet();
OleDbCommand excelCommand = new OleDbCommand();OleDbDataAdapter excelDataAdapter = new OleDbDataAdapter();
string excelConnStr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + filelocation + ";Extended Properties=""Excel 8.0;HDR=Yes;IMEX=1""";
OleDbConnection excelConn = new OleDbConnection(excelConnStr);
excelConn.Open();
DataTable dtPatterns = new DataTable();excelCommand = new OleDbCommand("SELECT `PATTERN` as PATTERN, `PLAN` as PLAN FROM [PATTERNS$]", excelConn);
excelDataAdapter.SelectCommand = excelCommand;
excelDataAdapter.Fill(dtPatterns);
"dtPatterns.TableName = Patterns";
ds.Tables.Add(dtPatterns);
return ds;
}
于 2012-05-24T10:07:49.853 に答える
2
答えは自分で見つけました。というdllがありExcel.dll [2.0.1.0] ExcelDataReader
ます。友人から入手したため、リンクを持っていません。ネットで検索してダウンロードできると思います。exceldatareader.dll
IExcelDataReader iExcelDataReader = null;
FileInfo fileInfo = new FileInfo(FpdUnConLoanUpload.PostedFile.FileName);
string file = fileInfo.Name;
if (file.Split('.')[1].Equals("xls"))
{
iExcelDataReader = ExcelReaderFactory.CreateBinaryReader(oStream);
}
else if (file.Split('.')[1].Equals("xlsx"))
{
iExcelDataReader = ExcelReaderFactory.CreateOpenXmlReader(oStream);
}
iExcelDataReader.IsFirstRowAsColumnNames = true;
DataSet dsUnUpdated = new DataSet();
dsUnUpdated = iExcelDataReader.AsDataSet();
iExcelDataReader.Close();
if (dsUnUpdated != null)
{
}
else
{
lblCmnMesage.Text = "No Data Found In The Excel Sheet!";
}
于 2012-05-25T02:27:08.750 に答える
0
20000というカウントに驚かれると思いますが、それは大きなカウントではありません。http://openxmldeveloper.org/を使用すると、相互運用性に依存することなく効率的にインポートおよび処理できます。唯一の制約は、Excel を xlsm 形式 (Excel マクロ) にする必要があることです。
于 2012-05-24T10:13:36.670 に答える