100分,解决 无法找到表 0 excel 导入到 Dataset,本地测试 没有问题,因朋友的机器有IIS 就测试了下,测试结果均为 无法找到表 0。朋友电脑有装excel。求解决方案! 百度没找到答案。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 DataSet里没有表,在使用DataSet[0]之前先判断表的个数是否大于0 那是你异常处理没做好,EXCEL有版本问题,看你的驱动和Exel版本是否相同 那就检查一下你的excel是不是excel2003的,而你朋友的那个上面是如excel2007的,或是其他情况,这个就看你的导入代码了。string connString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + filename + ";Extended Properties='Excel 8.0;HDR=NO;IMEX=1'";类似这样的设置不能向上兼容造成的。还有这样的,是不是excel表名问题?? strExcel = string.Format("select * from [{0}$]", sheetName); strConn = "Provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source=" + strFileName + ";" + "Extended Properties=Excel 8.0;"; OleDbDataAdapter ExcelDA = new OleDbDataAdapter("SELECT * FROM [Sheet1$]", strConn);这是我的代码,还有我跟朋友的EXCEL版本是2003 格式化表名而已,你那个表名是什么?是Sheet1不是?? 在读取dataset的地方前面加个语句if(ds!=null&&ds.Tables.Count<1)Response.Write("<script>alert('玛德,没获取到数据,挂了');</script>");你编译后再去试试。如果打出这句话,说明是获取数据问题了啊 if(ds==null || ds!=null&&ds.Tables.Count<1)Response.Write("<script>alert('玛德,没获取到数据,挂了');</script>"); // xlsx connStr = "Provider=Microsoft.Ace.OleDb.12.0;Data Source=" + newName + ";Extended Properties='Excel 12.0 Xml; HDR=YES; IMEX=1'"; //xls connStr = "Provider=Microsoft.Jet.OleDb.4.0;" + "data source=" + newName + ";Extended Properties='Excel 8.0; HDR=YES; IMEX=1'"; //检查连接语句..可能是excel版本不一致//检查下 表格的名称 是否不是sheet 尽量不要写死 一下是动态获取的名称代码DataTable dt = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);var tableName = dt.Rows[0][2].ToString().Trim();var str1 = string.Format("Select * from [{0}]", tableName+"A:F"); 你朋友是什么操作系统?win2003和win2008是有差别的 看一下是不是你朋友的电脑的Excel版本和项目上的一样? 我遇到过报一样的错,但或许各数据源的解决方法并不一定一致吧,仅供参考。无法找到表0 的意思就是无法找到第 0 个表,也就是说 DataSet 中的表未始化,或者其中根本没有表。表0 不是说表名叫表0,此时 0 是一个索引值老以前,我们项目中有出错,是因为 Framework 或其他类中一些返回值不够规范导致的。试想,一个签名为返回 DataTable 类型的方法却返回了 null,就导致没有表。 贴一下你和你朋友机器配置,操作系统不同(特别是32位于64位),office不同都可能有影响 用老一些版本的office插件试试 个人感觉应该是sheet标签出问题了 protected void Button1_Click(object sender, EventArgs e) { string strSheetName = "sheet1"; string filePath = ""; string getErrMsg = ""; DataSet excelDs = new DataSet(); //从Excel读取数据 filePath = FileUpload1.PostedFile.FileName; string connString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + filePath + ";Extended Properties='Excel 8.0;IMEX=1'"; OleDbConnection excelConn = new OleDbConnection(connString); excelConn.Open(); OleDbDataAdapter ExcelDA = new OleDbDataAdapter("SELECT * FROM [888888$] ", excelConn); try { ExcelDA.Fill(excelDs, "[888888$]"); } catch (Exception err) { Response.Write(err.Message); } finally { excelConn.Close(); excelConn = null; } //将数据写入数据库 if (excelDs.Tables[0].Rows.Count != 0) { string connectionString = "server=.;uid=sa;password=123456;database=LiXi"; string sql = ""; SqlConnection sqlConn = new SqlConnection(connectionString); SqlCommand myCommand = new SqlCommand(); sqlConn.Open(); myCommand.Connection = sqlConn; myCommand.CommandType = CommandType.Text; SqlTransaction myTrans = sqlConn.BeginTransaction(); myCommand.Transaction = myTrans; String dingshu = ""; String fenjian = ""; String chebuding = ""; try { for (int i = 0; i < excelDs.Tables[0].Rows.Count; i++) { String BuMing = excelDs.Tables[0].Rows[i]["部门"].ToString(); String XingMing = excelDs.Tables[0].Rows[i]["姓名"].ToString(); int DJHaoMan = int.Parse(excelDs.Tables[0].Rows[i]["登记号码"].ToString()); String time = excelDs.Tables[0].Rows[i]["日期时间"].ToString(); String ZhuangTai = excelDs.Tables[0].Rows[i]["记录状态"].ToString(); sql = "insert into JiLu(BuMen,XingMing,DJHaoMan,Time,ZhuangTai) values('" + BuMing + "','" + XingMing + "'," + DJHaoMan + ",'" + time + "','" + ZhuangTai + "')"; myCommand.CommandText = sql; myCommand.ExecuteNonQuery(); } myTrans.Commit(); } catch (Exception ex) { getErrMsg = ex.Message.ToString(); Response.Write(ex.Message.ToString()); myTrans.Rollback(); } finally { sqlConn.Close(); sqlConn = null; } } }注:SELECT * FROM [888888$] 888888为excel表名。如:excelDs.Tables[0].Rows[i]["部门"].ToString();为excel表中的列名。这是excel2003版本的。 这个我碰到过,分全给我把,包你解决!原因是本地测试是本地有EXCEL文件,放到IIS上找不到EXCEL文件,所以要先把这个文件上传到服务器,在读取这个文件!再读取SHEET里的数据,OVER! yes0报错你就换成1看哈子嘛,再者你调试调试呗 ntfs文件权限问题。右击web目录,选择属性-安全-编辑-添加everyone完全控制权限,覆盖子目录 代码健壮性不强错误原因是DataSet 中没有 DataTable应先判断 是否存在 DataTable 在做后续操作表名也不应该固定为[Sheet1$]应该先查询结构,然后再处理 1.服务器是否有要打开的EXCEL表。(如果没有,请COPY过去)2.服务器上的EXCEL表SHEET1是否存在 (如果不对请规范命名)3.程序中是否将EXCEL的路径写死 (如果有写死请纠正)4.IIS用户是否有打开服务器EXCEL文件的权限(请赋EXCEL权限)5.其它原因待补充 网站页面被修改,怎么才能生效? .NET下的部分技术框架使用率调查 高分请教"索引超出了数组界限"的问题 无限分级排序问题 图片上传问题 请帮忙看看这是什么错误 请问如何把DataReader当前行的数据按列保存在数组中 关于打开页面的问题? 如何把当前页面另存成excel文件并不包括页面中的button 两个小送分的问题 ASP.NET使用安全身份验证模式 求正则
还有这样的,是不是excel表名问题?? strExcel = string.Format("select * from [{0}$]", sheetName);
strConn = "Provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source=" + strFileName + ";" + "Extended Properties=Excel 8.0;"; OleDbDataAdapter ExcelDA = new OleDbDataAdapter("SELECT * FROM [Sheet1$]", strConn);这是我的代码,还有我跟朋友的EXCEL版本是2003
前面加个语句
if(ds!=null&&ds.Tables.Count<1)
Response.Write("<script>alert('玛德,没获取到数据,挂了');</script>");
你编译后再去试试。如果打出这句话,说明是获取数据问题了啊
if(ds==null || ds!=null&&ds.Tables.Count<1)
Response.Write("<script>alert('玛德,没获取到数据,挂了');</script>");
connStr = "Provider=Microsoft.Ace.OleDb.12.0;Data Source=" + newName +
";Extended Properties='Excel 12.0 Xml; HDR=YES; IMEX=1'";
//xls
connStr = "Provider=Microsoft.Jet.OleDb.4.0;" + "data source=" + newName +
";Extended Properties='Excel 8.0; HDR=YES; IMEX=1'";
//检查连接语句..可能是excel版本不一致//检查下 表格的名称 是否不是sheet 尽量不要写死 一下是动态获取的名称代码
DataTable dt = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);
var tableName = dt.Rows[0][2].ToString().Trim();
var str1 = string.Format("Select * from [{0}]", tableName+"A:F");
表0 不是说表名叫表0,此时 0 是一个索引值
老以前,我们项目中有出错,是因为 Framework 或其他类中一些返回值不够规范导致的。试想,一个签名为返回 DataTable 类型的方法却返回了 null,就导致没有表。
{
string strSheetName = "sheet1";
string filePath = "";
string getErrMsg = "";
DataSet excelDs = new DataSet();
//从Excel读取数据
filePath = FileUpload1.PostedFile.FileName;
string connString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + filePath + ";Extended Properties='Excel 8.0;IMEX=1'";
OleDbConnection excelConn = new OleDbConnection(connString);
excelConn.Open();
OleDbDataAdapter ExcelDA = new OleDbDataAdapter("SELECT * FROM [888888$] ", excelConn);
try
{
ExcelDA.Fill(excelDs, "[888888$]");
}
catch (Exception err)
{
Response.Write(err.Message);
}
finally
{
excelConn.Close();
excelConn = null;
}
//将数据写入数据库
if (excelDs.Tables[0].Rows.Count != 0)
{
string connectionString = "server=.;uid=sa;password=123456;database=LiXi";
string sql = "";
SqlConnection sqlConn = new SqlConnection(connectionString);
SqlCommand myCommand = new SqlCommand();
sqlConn.Open();
myCommand.Connection = sqlConn;
myCommand.CommandType = CommandType.Text;
SqlTransaction myTrans = sqlConn.BeginTransaction();
myCommand.Transaction = myTrans;
String dingshu = "";
String fenjian = "";
String chebuding = "";
try
{
for (int i = 0; i < excelDs.Tables[0].Rows.Count; i++)
{
String BuMing = excelDs.Tables[0].Rows[i]["部门"].ToString();
String XingMing = excelDs.Tables[0].Rows[i]["姓名"].ToString();
int DJHaoMan = int.Parse(excelDs.Tables[0].Rows[i]["登记号码"].ToString());
String time = excelDs.Tables[0].Rows[i]["日期时间"].ToString();
String ZhuangTai = excelDs.Tables[0].Rows[i]["记录状态"].ToString();
sql = "insert into JiLu(BuMen,XingMing,DJHaoMan,Time,ZhuangTai) values('" + BuMing + "','" + XingMing + "'," + DJHaoMan + ",'" + time + "','" + ZhuangTai + "')";
myCommand.CommandText = sql;
myCommand.ExecuteNonQuery(); }
myTrans.Commit();
}
catch (Exception ex)
{
getErrMsg = ex.Message.ToString();
Response.Write(ex.Message.ToString());
myTrans.Rollback();
}
finally
{
sqlConn.Close();
sqlConn = null;
} }
}注:
SELECT * FROM [888888$] 888888为excel表名。
如:excelDs.Tables[0].Rows[i]["部门"].ToString();为excel表中的列名。
这是excel2003版本的。
原因是本地测试是本地有EXCEL文件,放到IIS上找不到EXCEL文件,所以要先把这个文件上传到服务器,在读取这个文件!再读取SHEET里的数据,OVER!
0报错你就换成1看哈子嘛,再者你调试调试呗
右击web目录,选择属性-安全-编辑-添加everyone完全控制权限,覆盖子目录
2.服务器上的EXCEL表SHEET1是否存在 (如果不对请规范命名)
3.程序中是否将EXCEL的路径写死 (如果有写死请纠正)
4.IIS用户是否有打开服务器EXCEL文件的权限(请赋EXCEL权限)
5.其它原因待补充