我需要在同一列中读取包含一些空白单元格和一些超过255个字符的单元格的Excel文件,我试图将注册表值“TypeGuessRows”更改为“0”并且它有效,但我可以' t更改服务器上的注册表。
这是我的连接字符串:
StrConnXLS = "provider=Microsoft.ACE.OLEDB.12.0;Data Source='" + SFileXLS + "';Extended Properties='Excel 12.0;HDR=YES;IMEX=YES;MAXSCANROWS=0;'";
我通过将表传递到这样的数据表来读取该表:
using (OleDbCommand cmd = new OleDbCommand("SELECT * FROM [" + tabela + "]", con))
{
con.Open();
//conn.Open();
//Executando o UPDATE
cmd.ExecuteNonQuery();
OleDbDataAdapter oleAdapter = new OleDbDataAdapter();
oleAdapter.SelectCommand = cmd;
planilha = new DataTable("");
oleAdapter.FillSchema(planilha, SchemaType.Source);
oleAdapter.Fill(planilha);
//Fechando a conexão
con.Close();
}
我读的就像:
foreach (DataRow row in planilha.Rows)
{
string dostuff = row["test"].ToString();
}
但是每次到达超过255个字符的文本时,它都会删除文本。 有什么方法可以改变它吗?
答案 0 :(得分:0)
我从来没有找到过。实际上这真是令人讨厌。 OLEDB无论如何都会扫描前8行,并对数据类型进行假设。
IMEX = 1(偶然不是YES)强制它找到的任何混合行文本。
据我所知,此驱动程序忽略连接字符串中的ImportMixedTypes,TypeGuessRows和MaxScanRow。旧的Jet驱动程序支持它们。在我看来,这是一个倒退的步骤。
如果您的文件有一个标题行,您可以尝试HDR = No,这会强制它发送文本,因为第一行是文本,但我认为这不会有助于您的255字符限制问题。
您可以尝试使用
定位每个单元格#header {
margin:0 auto;
position: fixed;
width:100%;
z-index:999;
background-color:#FFFFFF;
}
#topmenu {
background-color:#0000FF;
height:24px;
filter: alpha(opacity=50);
opacity: 0.5;
}
#container {
position: relative;
top: 68px;
width: 100%;
height: 2000px;
overflow: auto;
z-index:1;
}
#content {
margin: 0 auto;
background-color: #DAA520;
width: 960px;
height: 2000px;
}
E.g。 SELECT * FROM [MySheet $ A1:A1]
但是对于大文件来说这会非常慢。