我做了一个功能,用Microsoft.Jet.Oledb.4.0访问excel,将Excel文件中的内容展示到DataGrid中,但是展示在DataGrid中后,出现如下的情况:单位代码 单位名称
单位A
单位B
2040130034 单位C
2040134034 单位D
2040138132 单位E
单位F
2040140324 单位G
2040140325 单位H
2040140329 单位M单位A B F 的单位代码显示不出来,观察后发现单位A B F的单位代码中含有字母,分别为:204011C074
、204011D074、204012F034。 估计可能是由于含有字母的缘故。有没有哪位能帮忙解决一下?
单位A
单位B
2040130034 单位C
2040134034 单位D
2040138132 单位E
单位F
2040140324 单位G
2040140325 单位H
2040140329 单位M单位A B F 的单位代码显示不出来,观察后发现单位A B F的单位代码中含有字母,分别为:204011C074
、204011D074、204012F034。 估计可能是由于含有字母的缘故。有没有哪位能帮忙解决一下?
解决方案 »
- 请教高手,本人菜鸟,MVC2里两个让我无语的问题
- 做一个类似浏览器地址栏一样可输入可选下拉框
- GridView中的checkbox的oncheckvaluechange事件如何响应
- 如何开发出像dorpdownlist一样属性的服务器控件呢?
- 无聊,在线回答问题... 有需要的来[4.13]
- 看于在方法中出现的问题 帮帮忙
- 怎样关闭数据库连接
- 请问使用Excel.ApplicationClass应该import一些什么命名空间?
- 动态生成未知类型的WebControl,请指教
- 欢迎大家光临C#资源网---csource.yeah.net
- 高分等你来,asp.net 环境配置,出错,具体什么原因?
- 我写的一个小工具
--------------------------------------
正解!不知道什么原因就是读取不了int型。
要是EXCEL数字里是('1234345)即字符型才行
--------------------------------------
是在Excel文件里面选中单元格后右键,选择单元格格式么?好象不行啊求助~~~
{
string strConn = "Provider=Microsoft.Jet.OLEDB.4.0;" +
"Data Source='"+filePath+"';"+
"Extended Properties=Excel 8.0;";
OleDbConnection conn = new OleDbConnection(strConn);
//设定读取文件,选定起始位置
OleDbDataAdapter myAdapter = new OleDbDataAdapter("SELECT * FROM ["+ls_Sheet_name+"$A"+s1+":D"+s2+"]", strConn);
DataSet myDataSet = new DataSet();
myAdapter.Fill(myDataSet);
myAdapter.Dispose();
conn.Close();
conn.Dispose();
return myDataSet;
}
这就是取数的过程,传递3个参数进来:Sheet的值ls_Sheet_name、起始的行号s1、终止的行号s2
然后获取DataSet,回传。
2.使用Interop Com打开EXCEL,就是有点麻烦.
string excelConnStr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};Extended Properties=\"Excel 8.0;HDR=Yes;IMEX=1;\"";
HDR=Yes是说Excel中的第一行是不是表头
IMEX=1是说将Excel中的所有内容当作文本读取
IMEX是很重要的,因为在用OLE读取Excel中的数据时需要有类型的转换。
如果不设置IMEX读Excel时,如果在Excel中的某列中的数据中几个单元格是数字,而其他的是字符,则会根据该列中哪中格式比较多决定该列的数据类型,所以该列的一些单元格会被忽略,所以出现空白,
也不知道说清楚了没有
呵呵
这也不是什么理论,是我在大量的实验中发现的规律
lz可以参考一下
我们一般都只用Excel中的第一个Sheet,所以我只读第一个
可以根据需要修改#region ReadExcelData 读Excel中的数据到DataTable
string excelConnStr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};Extended Properties=\"Excel 8.0;HDR=Yes;IMEX=1;\"";
string excelSqlStr = "select * from [{0}]"; /// <summary>
/// 读Excel中的数据到DataTable
/// </summary>
/// <param name="filePath"></param>
/// <param name="fielName"></param>
/// <returns></returns>
public DataTable ReadExcelData(string fileFullName)
{
OleDbConnection oleCn =new OleDbConnection();
try
{
string currConnStr = string.Format(excelConnStr, fileFullName);//连接字符串
oleCn.ConnectionString = currConnStr;
DataTable dt = new DataTable();
oleCn.Open();
string excelBookName = oleCn.GetOleDbSchemaTable(System.Data.OleDb.OleDbSchemaGuid.Tables, null).Rows[0][2].ToString();
if(excelBookName!=string.Empty && excelBookName.Trim()!="")
{
string currSqlStr = string.Format(excelSqlStr, excelBookName);//sql字符串
OleDbCommand oleCmd = new OleDbCommand(currSqlStr, oleCn);
OleDbDataAdapter oleDda = new OleDbDataAdapter(oleCmd);
oleDda.Fill(dt);
}
oleCn.Close();
return dt;
}
catch
{
string errorMsg="Excel文件格式不对,请尝试用excel打开该文件检查内容并另存一下,确保成为正确的excel文件,再重新上传";
System.Web.HttpContext.Current.Response.Write("<script>alert('"+ errorMsg +"')</script>");
// HttpContext.Current.Response.End();
oleCn.Close();
return null;
//throw;
}
} /// <summary>
/// 取Excel中第一个Sheet名
/// </summary>
/// <param name="currConnStr"></param>
/// <returns></returns>
private string GetExcelBookNames(string currConnStr)
{
OleDbConnection conn = new OleDbConnection(currConnStr);
DataTable dt = new DataTable();
conn.Open();
dt = conn.GetOleDbSchemaTable(System.Data.OleDb.OleDbSchemaGuid.Tables, null);
conn.Close(); return dt.Rows[0][2].ToString();
}
#endregion