[英]Reading from Excel File
我已經看到了很多這樣的例子,但是有些東西對我沒有用。
我想要做的是閱讀一張Excel工作表(給定工作表)並將這些值存儲到列表中。
例如,假設我有一個如下所示的excel文件:
First Second Third
f1 s1 t1
f2 s2 t2
f3 s3 t3
每行應視為一組值。
到目前為止,這是我所做的:
List<string> ColumnNames= GetColumnNames();
using (OleDbConnection OleDbConn = new OleDbConnection(Path))
{
OleDbConn.Open();
String cmdString = "SELECT * FROM [" + sheetName+ "]";
OleDbCommand cmd = new OleDbCommand(cmdString, OleDbConn);
DataTable dt = new DataTable();
List<ValueSet> sets = new List<ValueSet>();
Dictionary<string, Value> values = new Dictionary <string,value>()
ValueSet valueset = new ValueSet(null);
using (OleDbDataReader oleRdr = cmd.ExecuteReader())
{
while (oleRdr.Read())
{
for (int i = 0; i < ColumnNames.Count; i++)
{
ColumnName cn = new ColumnName(columnNames[i]);
string data= oleRdr[f.Name].ToString();
Value value = new Value(data, f);
if (!values.ContainsKey(ColumnNames[i]))
{
values.Add(ColumnNames[i], value);
}
else
{
values[ColumnNames[i]] = value;
}
}
valueSet= new ValueSet(values);
sets.Add(valueSet);
}
return sets;;
}
使用OleDbConnection
對於某些文件我得到了奇怪的結果。
我建議http://www.codeproject.com/Articles/11698/A-Portable-and-Efficient-Generic-Parser-for-Flat-F
這樣,您可以將CSV讀入數據表並將其解析為列表,如下所示:
DataTable dtPrereg;
using (GenericParserAdapter gp = new GenericParserAdapter(Server.MapPath("prereg.csv"), Encoding.UTF8))
{
gp.FirstRowHasHeader = true;
dtPrereg = gp.GetDataTable();
}
我尚未在制表符分隔的文件上對此進行過測試,但是它應該可以正常工作(或者您可以將文件轉換為CSV)
如果您確實有一個包含已知數量的命名列的電子表格,並且想將它們投影到List<List<string>>
,那么使用Linq進行操作會容易得多。
例如
List<List<string>> data;
using (OleDbDataReader rdr = cmd.ExecuteReader())
{
data = (from row in rdr.Cast<DbDataRecord>()
select new List<string>
{
row["First"].ToString(),
row["Second"].ToString(),
row["Third"].ToString()
}).ToList();
}
嘗試改變
ValueSet= new ValueSet(values);
sets.Add(ValueSet);
至
valueset = new ValueSet(values);
sets.Add(valueset );
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.