c#读取excel文件数据

ttzhangzhiwei 2008-11-25 11:40:27
string strConn = "provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + path +
";Extended Properties=\"Excel 8.0;HDR=YES;IMEX=1\"";
OleDbConnection conn = new OleDbConnection(strConn);
if (conn.State == ConnectionState.Open)
conn.Close();
if (conn.State == ConnectionState.Closed)
conn.Open();
DataTable sheetds = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);

DataSet sheetList = reportSheetBLL.GetList("report_type_id=" + report_type_id);
XmlBuilder xmlbuild = new XmlBuilder(sheetList.Tables[0].Rows.Count);

string tableName = "";
foreach (DataRow row in sheetds.Rows)
{
if (row["TABLE_NAME"].ToString().Split('$')[1] == "")
{
if (tableName == "")
tableName = row["TABLE_NAME"].ToString();
else
tableName += ";" + row["TABLE_NAME"];
}
}
if (tableName != "")
{
for (int t = 0; t < tableName.Split(';').Length; t++)
{
DataSet relationExcelCellDs =
excelBll.getRelationExcelList("Relation_Type_Id=" + relation_type_id +
" and Excel_Sheet=" + (t+1));
if (relationExcelCellDs != null && relationExcelCellDs.Tables[0].Rows.Count > 0)
{
string strSheetTableName = tableName.Split(';')[t].ToString();
string sql = "SELECT * FROM [" + strSheetTableName + "]";
OleDbDataAdapter MySource = new OleDbDataAdapter(sql, conn);
DataSet excelds = new DataSet();
MySource.Fill(excelds);
conn.Close();
}
}
}
以上代码在运行到:MySource.Fill(excelds); 时就会出错:定义了过多的字段
一开始我认为是excel单元格保护的问题,去掉保护,没事了。
可当excel有背景颜色的时候也会出现同样的问题。
现在是时不时的就会出现,请问这是什么原因造成的,有什么好的办法解决一下吗?
...全文
1645 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
lbc2247117 2012-07-02
  • 打赏
  • 举报
回复
有没有不用OLEDB读取excel的方法,因为.net compact Framework不支持OLEDB。
ttzhangzhiwei 2008-11-26
  • 打赏
  • 举报
回复
谢谢大家的答案,可我的做法和你们的是一样的,为什么在单元格受保护或是页面有背景色的时候就会出现:定义了过多的字段

我想知道为什么会出现这个错误
Jack123 2008-11-26
  • 打赏
  • 举报
回复
up
killer_liqiao 2008-11-25
  • 打赏
  • 举报
回复
up
Wayne 2008-11-25
  • 打赏
  • 举报
回复
读取excel

string opnFileName = "D:\\dddd.xls";
if (File.Exists(opnFileName) == false)
{
return;
}
string strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="
+ opnFileName + ";Extended Properties=\"Excel 8.0;HDR=YES;IMEX=1\"";
OleDbConnection conn = new OleDbConnection(strConn);
string strExcel = "";
OleDbDataAdapter myCommand = null;
DataSet ds = new DataSet();
strExcel = "select * from [sheet1$]";
try
{
conn.Open();
myCommand = new OleDbDataAdapter(strExcel, strConn);
myCommand.Fill(ds, "dtSource"); }
catch (Exception ex)
{
MessageBox.Show("导入出错:" + ex, "错误信息");
}
finally
{
conn.Close();
conn.Dispose();
}
sunshine_anycall 2008-11-25
  • 打赏
  • 举报
回复
mark
tonny008 2008-11-25
  • 打赏
  • 举报
回复
可以用string.Format("SELECT * FROM [{0}${1}]", sheetName, sheetRange); 的SQL来限定读取的table

可以看下我之前写的一个oledb读excel的类,写了很久了,很多我自己都不记得了
http://user.qzone.qq.com/3183601/blog/1

110,571

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧