以下是设置:
我有一个excel电子表格,页面非常简单。它看起来像这样:
我使用以下连接字符串来访问此文件:
string.Format("Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Extended Properties=\"Excel 8.0;HDR=NO\";", fn)
我访问该文件的功能如下:
try
{
string select = string.Format("SELECT * FROM [{0}$]", tab.PageName);
OleDbDataAdapter adapter = new OleDbDataAdapter(select, con);
DataSet ds = new DataSet();
adapter.Fill(ds, tab.PageName);
// DEBUG: Let's just see what it is getting...
for (int x = 0; x < 13; x++)
{
for (int y = 0; y < 3; y++)
{
Console.Write(ds.Tables[0].Rows[x][y].ToString() + "\t");
}
Console.WriteLine("");
}
}
catch
{ ... }
问题
为什么代码不会读取某些单元格?请注意,C5上有文本“Profit”。我可以把B5读作“收入”。我可以读取C6作为整数值。但利润似乎消失了。
这不是头信息的大问题,但是整个实际数据块都拒绝被读取。相反,它返回DBNull,即使单元格包含真实,有效,可用的数据。在可以读取的单元格和返回DBNull的单元格之间,单元格的格式完全相同。
我真的很难过!!!
有什么想法吗?
答案 0 :(得分:2)
new OleDbConnection("...TypeGuessRows=0;ImportMixedTypes=Text");
我有预感,您可能会遇到a problem that I had previously。
尝试将这些参数添加到连接字符串中。
答案 1 :(得分:0)
我无法获得其他答案+评论工作。唯一需要的设置是IMEX=1
,但它必须嵌套在扩展属性中的单引号中,所以这里是一个如何格式化其他IMEX设置的示例:
connection.ConnectionString =
@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\somepath\somefile.xls;Extended Properties='Excel 8.0;IMEX=1';";
答案 2 :(得分:-1)
if (ObjFile.Extension == ".xls")
conn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + srcFilePath + ";" + "Extended Properties='Excel 8.0;HDR=YES;'";
if (ObjFile.Extension == ".xlsx")
conn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + srcFilePath + ";" + "Extended Properties='Excel 12.0 Xml;HDR=YES;IMEX=1';";
if (ObjFile.Extension == ".xlsm")
conn = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + srcFilePath + ";Extended Properties='Excel 12.0 Macro;HDR=No;IMEX=1';";