我有一张excel表,类似于:
我想读取数据列 Headers :All,col1,col2,col3,col4,col5
并获取所有单元格数据 . 例如,行= 2且列2 = 0的单元格
我目前写这段代码:
OleDbDataAdapter dbAdapter = new OleDbDataAdapter("SELECT top 5 * FROM " + excelSheets[j], connString);
DataTable fooData = new DataTable();
dbAdapter.Fill(fooData);
foreach (DataRow row in fooData.Rows)
{
Response.Write(row[0].ToString());
//Response.Write(row[1].ToString());
}
但它只返回一个包含1列的数据表,只返回行1..5文本 .
我怎么能这样做?
请不要使用Linq to Excel Provider和Open Xml来回答 .
编辑1:
string file_name = "C:\\Book1.xlsx";
string connString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + file_name + ";Extended Properties=\"Excel 12.0 Xml;HDR=YES\"";
objConn = new OleDbConnection(connString);
objConn.Open();
dt = objConn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);
if (dt == null)
{
Response.Write("Not Exist");
}
String[] excelSheets = new String[dt.Rows.Count];
int i = 0;
foreach (DataRow row in dt.Rows)
{
excelSheets[i] = row["TABLE_NAME"].ToString();
i++;
}
// Loop through all of the sheets if you want too...
for (int j = 0; j < excelSheets.Length; j++)
{
OleDbDataAdapter dbAdapter = new OleDbDataAdapter("SELECT top 100 * FROM " + excelSheets[j], connString);
DataTable fooData = new DataTable();
dbAdapter.Fill(fooData);
foreach (DataRow row in fooData.Rows)
{
Response.Write(row[0].ToString());
}
}
4 回答
您可以获得第一列的列名称,例如
fooData.Columns[0].ColumnName
- 请参阅http://msdn.microsoft.com/en-us/library/system.data.datacolumn.columnname.aspxEDIT:
将
SELECT
更改为SELECT * FROM
并使用Fill (0, 5, new DataTable[] { fooData })
.试试这个吧 . 它应该返回从A1到C5的所有单元格 .
您选择的驱动程序适用于Excel 2007(connectionString中的“Provider = Microsoft.ACE.OLEDB . 12 .0”) . 您的Excel文件是2007还是2010?
仅适用于逻辑的数据列 Headers :