C# 如何使用c读取Excel中的数据列标题和每个单元格的数据
我有一张类似以下内容的excel表格: 我想读取数据列标题:All、col1、col2、col3、col4、col5 并获取所有单元格数据。例如,行=2和列2=0中的单元格 我目前正在编写以下代码:C# 如何使用c读取Excel中的数据列标题和每个单元格的数据,c#,excel,c#-4.0,excel-2007,C#,Excel,C# 4.0,Excel 2007,我有一张类似以下内容的excel表格: 我想读取数据列标题: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
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提供程序的情况下说出答案并打开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());
}
}
例如,可以通过fooData.Columns[0]获取第一列的列名。ColumnName-请参阅 编辑: 将SELECT更改为SELECT*FROM,并使用Fill 0,5,newdatatable[]{fooData}
试试这个。它应该返回A1到C5的所有单元格。您选择的驱动程序用于连接字符串中的Excel 2007 Provider=Microsoft.ACE.OLEDB.12.0。您的Excel文件是2007还是2010?仅用于逻辑的数据列标题如下:
string filePath = "C:\\Book1.xlsx";
string connString = string.Empty;
if (path.EndsWith(".xlsx"))
{
//2007 Format
connString = string.Format("Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Extended Properties='Excel 8.0;HDR=No'", path);
}
else
{
//2003 Format
connString = string.Format("Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};Extended Properties='Excel 8.0;HDR=No'", path);
}
using (OleDbConnection con = new OleDbConnection(connString))
{
using (OleDbCommand cmd = new OleDbCommand())
{
//Read the First Sheet
cmd.Connection = con;
con.Open();
DataTable dtExcelSchema = con.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);
con.Close();
string firstSheet = dtExcelSchema.Rows[0]["TABLE_NAME"].ToString();
//Read the Header Row
cmd.CommandText = "SELECT top 1 * From [" + firstSheet + "]";
using (OleDbDataAdapter da = new OleDbDataAdapter(cmd))
{
DataTable HeaderColumns = new DataTable();
da.SelectCommand = cmd;
da.Fill(HeaderColumns);
List<string> Filedata = new List<string>();
foreach (DataColumn column in HeaderColumns.Columns)
{
string columnName = HeaderColumns.Rows[0][column.ColumnName].ToString();
Filedata.Add(columnName);
ViewBag.Data = Filedata;
}
}
}
}
如果改用SELECT*FROM,会发生什么情况?它返回的行数超过100000行,我知道-但你得到的是列标题吗?不幸的是,我的数据表只有一列,我不知道是什么,不需要更改SELECT-请参阅下面的答案,在我的示例中,它只返回一列。所有执行fooData时会发生什么。列[1].ColumnName?出现异常:找不到第1列。请查看我的编辑-这样您就不会加载所有行,只加载前5行。。。并且应该得到所有列。。。然后您可以通过fooData.Columns[1].ColumnName…@Yahia让我们了解以下错误:Microsoft Office access数据库引擎找不到对象“Nima$A1:C5”。确保对象存在,并且正确拼写其名称和路径名。尝试将IMEX=1附加到ConnectionString。如果缺少转义序列,您可以在网站上找到更多详细信息。尝试更改此选项:OleDbDataAdapter dbAdapter=新OleDbDataAdapter从+excelSheets[j]中选择前100*connString;到OleDbDataAdapter dbAdapter=新OleDbDataAdapter从[+excelSheets[j]+]中选择前100*,connString;
string filePath = "C:\\Book1.xlsx";
string connString = string.Empty;
if (path.EndsWith(".xlsx"))
{
//2007 Format
connString = string.Format("Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Extended Properties='Excel 8.0;HDR=No'", path);
}
else
{
//2003 Format
connString = string.Format("Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};Extended Properties='Excel 8.0;HDR=No'", path);
}
using (OleDbConnection con = new OleDbConnection(connString))
{
using (OleDbCommand cmd = new OleDbCommand())
{
//Read the First Sheet
cmd.Connection = con;
con.Open();
DataTable dtExcelSchema = con.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);
con.Close();
string firstSheet = dtExcelSchema.Rows[0]["TABLE_NAME"].ToString();
//Read the Header Row
cmd.CommandText = "SELECT top 1 * From [" + firstSheet + "]";
using (OleDbDataAdapter da = new OleDbDataAdapter(cmd))
{
DataTable HeaderColumns = new DataTable();
da.SelectCommand = cmd;
da.Fill(HeaderColumns);
List<string> Filedata = new List<string>();
foreach (DataColumn column in HeaderColumns.Columns)
{
string columnName = HeaderColumns.Rows[0][column.ColumnName].ToString();
Filedata.Add(columnName);
ViewBag.Data = Filedata;
}
}
}
}