从Excel中读取数据到dataset然后输出????

freshmantl 2009-12-02 11:46:18
第一个问题:
从Excel中读取数据到dataset中,是以什么形式的储存的?比如Excel中有一个sheet1表,此表中有一些内容,
那么读取数据到dataset后,dataset中是否也有一个完全一样的sheet1表

第二个问题:
如果是像我上面所描述的那样,请各位高手帮忙看下代码:
private void button2_Click(object sender, EventArgs e)
{
DataSet newLoadDataFromExcel = new DataSet();
newLoadDataFromExcel = LoadDataFromExcel(@"D:\我的程序\Projects\操作Excel\aaa.xls");
foreach (DataColumn col in newLoadDataFromExcel.Tables["Sheet1"].Columns)
{
listBox1.Items.Add(col.ColumnName);//这里本想输出列名如“A”、“B”等,却输出了“F1”“F2”等
}
DataRow row = newLoadDataFromExcel.Tables["Sheet1"].Rows[0];
listBox1.Items.Add(row["A"]);//这里会报错说“sheet1表中找不到A列”
}

public static DataSet LoadDataFromExcel(string filePath)//读取Excel
{
try
{
string strConn;
strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + filePath + ";Extended Properties='Excel 8.0;HDR=False;IMEX=1'";
OleDbConnection OleConn = new OleDbConnection(strConn);
OleConn.Open();
String sql = "SELECT * FROM [Sheet1$]";

OleDbDataAdapter OleDaExcel = new OleDbDataAdapter(sql, OleConn);
DataSet newDataSet = new DataSet();
OleDaExcel.Fill(newDataSet, "Sheet1");
OleConn.Close();
return newDataSet;
}
catch (Exception err)
{
MessageBox.Show("数据绑定Excel失败!失败原因:" + err.Message, "提示信息",
MessageBoxButtons.OK, MessageBoxIcon.Information);
return null;
}
}

我想在listbox1中输出dataset中的内容
listBox1.Items.Add(col.ColumnName);//这里本想输出列名如“A”、“B”等,却输出了“F1”“F2”等

listBox1.Items.Add(row["A"]);//这里会报错说“sheet1表中找不到A列”

这两句话有问题,大家帮帮忙吧,谢谢了
...全文
175 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
特别 2009-12-02
  • 打赏
  • 举报
回复
listBox1.Items.Add(col.ColumnName);//这里本想输出列名如“A”、“B”等,却输出了“F1”“F2”等
你的连接字符中已经指定不含列标题(HDR=False;),所以就采用了F1、F2。。。排列的字段,应该是Field的简写,如果自己要输出列名称为A、B、C等,那么

for ( int i = 0; i < newLoadDataFromExcel.Tables["Sheet1"].Columns.Count; i++ )
{
//不超过26列可以这样使用,如果超过,还要处理一下,因为后面的列名称为AA、AB等
listBox1.Items.Add( char.ConvertFromUtf32( i + 65 ) );
}



listBox1.Items.Add(row["A"]);//这里会报错说“sheet1表中找不到A列”
既然它使用的字段名是F1、F2格式,你用A、B、C等当然不存在了
可以使用row[1]、row[2]等方式访问

楼主也可以先循环每一列,将列改名成A、B、C等再使用
下面代码适用于不超过26列的表

for ( int i = 0; i < newLoadDataFromExcel.Tables["Sheet1"].Columns.Count; i++ )
{
newLoadDataFromExcel.Tables["Sheet1"].Columns[i].ColumnName = char.ConvertFromUtf32( i + 65 ).ToString();
}
lang_csdn 2009-12-02
  • 打赏
  • 举报
回复
如果这样那你自己转换一下得了。
freshmantl 2009-12-02
  • 打赏
  • 举报
回复
那就是说,在Excel中是用A,B,C来表示,而在DataSet中是用F1,F2,F3来表示的,
而他们的行都是用数字1,2,3来表示的对吧
特别 2009-12-02
  • 打赏
  • 举报
回复
另外,EXCEL中也不存在用A、B、C来表示列名称的说法,
那只不过是显示出来的一种表象而已

特别 2009-12-02
  • 打赏
  • 举报
回复
当然不能认为完全一样的
EXCEL表和ADO.NET里的DATATABLE本质上也不能完全相等的
只不过ADO.NET提供了一个访问EXCEL的机制而已
freshmantl 2009-12-02
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 sdfkfkd 的回复:]
你不能拿EXCEL的东东往ADO.NET里讲
既然用ADO.NET,就得按照ADO.NET的约定来进行操作

引用 4 楼 freshmantl 的回复:
2楼你说的方法我试了一下,把HDR设为true,还是不行,输出的还是F1,F2,F3等等
我查了一下"HDR=Yes;" 表示工作表的第一行是表头,没有数据。 "HDR=No;"与之相反。
这个表头并不是我说的Excel默认的列名呀(列名为A,B,C,D等等,行为1,2,3,4等等)

[/Quote]

按你所说,是不是在dataset中存在的就不是一个和Excel表一样的Sheet1了对吧
freshmantl 2009-12-02
  • 打赏
  • 举报
回复
还是不明白,能不能再讲详细点,谢谢了
特别 2009-12-02
  • 打赏
  • 举报
回复
你不能拿EXCEL的东东往ADO.NET里讲
既然用ADO.NET,就得按照ADO.NET的约定来进行操作

[Quote=引用 4 楼 freshmantl 的回复:]
2楼你说的方法我试了一下,把HDR设为true,还是不行,输出的还是F1,F2,F3等等
我查了一下"HDR=Yes;" 表示工作表的第一行是表头,没有数据。 "HDR=No;"与之相反。
这个表头并不是我说的Excel默认的列名呀(列名为A,B,C,D等等,行为1,2,3,4等等)
[/Quote]
freshmantl 2009-12-02
  • 打赏
  • 举报
回复
2楼你说的方法我试了一下,把HDR设为true,还是不行,输出的还是F1,F2,F3等等
我查了一下"HDR=Yes;" 表示工作表的第一行是表头,没有数据。 "HDR=No;"与之相反。
这个表头并不是我说的Excel默认的列名呀(列名为A,B,C,D等等,行为1,2,3,4等等)
wuyq11 2009-12-02
  • 打赏
  • 举报
回复
看看ds.Table["Sheet1$"].Columns[i].ColumnName;
一般在excel中设置第一行为字段名称

111,121

社区成员

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

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

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