Gaj*_*dra 19 .net c# oledb excel
我正在使用OLEDB数据提供程序来读取excel文件,但问题是在excel表中有些cloumn有一个无效的值,例如而不是数字字符串,当我读取这个无效值时,我得到一个空字符串而不是实际值.

对于上面的截图,我读取值john获取空字符串.
那么有没有办法读取这个无效值?
任何帮助将不胜感激.
该代码是读取excel文件
private DataTable ReadExcelFile(string sheetName, string path)
{
using (OleDbConnection conn = new OleDbConnection())
{
DataTable dt = new DataTable();
string Import_FileName = path;
string fileExtension = Path.GetExtension(Import_FileName);
if (fileExtension == ".xls")
conn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + Import_FileName + ";" + "Extended Properties='Excel 8.0;HDR=YES;'";
if (fileExtension == ".xlsx")
conn.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + Import_FileName + ";" + "Extended Properties='Excel 12.0 Xml;HDR=YES;'";
using (OleDbCommand comm = new OleDbCommand())
{
comm.CommandText = "Select * from [" + sheetName + "$]";
comm.Connection = conn;
using (OleDbDataAdapter da = new OleDbDataAdapter())
{
da.SelectCommand = comm;
da.Fill(dt);
return dt;
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
Yur*_*ter 10
您需要将TypeGuessRowsRegistry键的值设置为0,这样驱动程序将根据所有列值而不是前8(默认值)设置数据类型.
密钥的位置因驱动程序的版本而异,您可以根据您的特定版本轻松地使用Google.例如,对于Access Connectivity Engine 2007,它将是
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\12.0\Access Connectivity Engine\Engines\Excel
Run Code Online (Sandbox Code Playgroud)
顺便说一句,你不需要Jet来读取XLS文件,ACE也完全有这个能力.
Ada*_*dam 10
这对我有用
using (OleDbConnection conn = new OleDbConnection())
{
DataTable dt = new DataTable();
conn.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + path
+ ";Extended Properties='Excel 12.0 Xml;HDR=YES;IMEX=1;MAXSCANROWS=0'";
using (OleDbCommand comm = new OleDbCommand())
{
comm.CommandText = "Select * from [" + sheetName + "$]";
comm.Connection = conn;
using (OleDbDataAdapter da = new OleDbDataAdapter())
{
da.SelectCommand = comm;
da.Fill(dt);
return dt;
}
}
}
Run Code Online (Sandbox Code Playgroud)
MAXSCANROWS = 0会覆盖注册表默认值并在确定类型之前扫描所有行.仍然需要包括IMEX = 1.
例如,给定此表:
Header | Header
------ | ------
Cell1 | 2456354
Cell2 | 2456354
Cell3 | 2456354
Cell4 | 2456354
Cell5 | 2456354
Cell6 | 2456354
Cell7 | 2456354
Cell8 | 2456354
Cell9 | A5341
Run Code Online (Sandbox Code Playgroud)
以下连接字符串将丢失A5341
"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + path
+ ";Extended Properties='Excel 12.0 Xml;HDR=YES;IMEX=1;'"
"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + path
+ ";Extended Properties='Excel 12.0 Xml;HDR=YES;MAXSCANROWS=0'"
Run Code Online (Sandbox Code Playgroud)
但它有两者兼而有之.