永发信息网

C# 读取 EXCEL 数据

答案:3  悬赏:20  手机版
解决时间 2021-01-27 15:04
编程目的:我手头上总是有很多下属公司发过来的EXCEL表格 内容格式是我们来定 大概内容是 他们承接的 工程名称 工作单位名称 工作时间 以及工作内容 工作地点 由于工作量大 需要制作一个软件 批量处理这些表格内的信息 并且进行汇总 管理 查看
具体问题:目前已经做好软件的构架 但是我是新手 对C#读取EXCEL信息没什么了解

需要的功能是这样的:
1:导入/批量导入 EXCEL表格;
2:在软件界面生成一个预览 我想的是用DataGridVIew显示出 导入的大概信息;
3:确认了信息后将信息分类存到数据库里;
4:可以随时查询调用这些信息;

请各位大神帮帮忙。。
1.EXCEL表格我们可以要求下属公司按照严格的格式来填写 所以单元格内的信息是固定的 某个单元格的内容都是可以肯定的。 那么怎么读取这些信息?
2.如何将读取的信息 按照顺序填写到DataGridView里显示出来?
3.如何将这些读取的信息分类存到数据库(Accsee。sql. xml都可以)
最佳答案
大概思路:把Excel中的数据导出后,赋值到定义好的类中,
再绑定到DataGridVIew中去,DataGridVIew的数据源指向事先定义好的类上,
最后对DataGridVIew进行一些操作
//1.连接Excel并导出Excel数据
/// <summary>
/// Excel导出数据
/// </summary>
/// <param name="path"></param>
/// <returns></returns>
public static DataSet ImportFormExcel(string path)
{
DataSet oDataSet = new DataSet();
try
{
string strConn = "Provider=Microsoft.Ace.OLEDB.12.0;Data Source=" + path + ";" + "Extended Properties=Excel 8.0;";

OleDbConnection conn = new OleDbConnection(strConn);

conn.Open();

string strExcel = "";

OleDbDataAdapter myCommand = null;

strExcel = "select * from [sheet1$]";

myCommand = new OleDbDataAdapter(strExcel, strConn);

myCommand.Fill(oDataSet, "table1");
}
catch (Exception ex)
{
throw new Exception(ex.Message);
}

return oDataSet;
}
2.解析DataSet
/// <summary>
/// 解析DataSet
/// </summary>
/// <param name="dataSet"></param>
private void GetDataSet(DataSet dataSet)
{
RegistarantCodes regCodeList = new RegistarantCodes();

if (dataSet != null)
{
for (int i = 0; i < dataSet.Tables[0].Rows.Count; i++)
{
RegistrantCode registrantCode = new RegistrantCode();
registrantCode.AnswerCode = Convert.ToInt32(dataSet.Tables[0].Rows[i][0]);
registrantCode.LanguageValue = Convert.ToInt32(dataSet.Tables[0].Rows[i][1]);
regCodeList.Add(registrantCode);
}
}
}

3.显示到DataGridVIew中
//BindDataGridVIew
private void GetDataSet(RegistarantCodes regCodeList)
{
//这句是我手写的
DataGridVIew.datasourt=regCodeList);
DataGridVIew.dataBind();
}

4.DataGridVIew信息存入数据库中,按照正常的操作存把,我就不写了!
5:注意,可能连接Excel的时候会提错一个错误,需要你安装一个东西,你按照错误安装就ok了
全部回答
无非就是三步: 1、读取EXCEL数据 2、操作DATAGRIDVIEW 3、更新数据库的 三项技术都不是很难,偶有细节搞不定,网上那么多~~ 楼主不会是想要源码吧。。
代码如下:<br><br>protected void button1_click(object sender, eventargs e)<br>    ...{<br>    string filepath=fileupload1.postedfile.filename;<br>    readexcel(filepath, gdbom);<br>    }<br>    public void readexcel(string sexcelfile,gridview dgbom)<br>    ...{<br>    datatable exceltable;<br>    dataset ds = new dataset();<br>    //excel的连接<br>    oledbconnection objconn = new oledbconnection("provider=microsoft.jet.oledb.4.0;data source=" + sexcelfile + ";" + "extended properties=excel 8.0;");<br>    objconn.open();<br>    datatable schematable = objconn.getoledbschematable(system.data.oledb.oledbschemaguid.tables, null);<br>    string tablename = schematable.rows[0][2].tostring().trim();//获取 excel 的表名,默认值是sheet1<br>    string strsql = "select * from [" + tablename + "]";<br>    oledbcommand objcmd = new oledbcommand(strsql, objconn);<br>    oledbdataadapter mydata = new oledbdataadapter(strsql, objconn);<br>    mydata.fill(ds, tablename);//填充数据<br><br>    dgbom.datasource =ds;<br>    dgbom.databind();<br>    objconn.close();<br><br>    exceltable = ds.tables[tablename];<br>    int icolums = exceltable.columns.count;//列数<br>    int irows = exceltable.rows.count;//行数<br><br>    //定义二维数组存储 excel 表中读取的数据<br>    string[,] storedata = new string[irows, icolums];<br><br>    for(int i=0;i<exceltable.rows.count;i++)<br>    for (int j = 0; j < exceltable.columns.count; j++)<br>    ...{<br>    //将excel表中的数据存储到数组<br>    storedata[i, j] = exceltable.rows[i][j].tostring();<br><br>    }<br>    int excelbom = 0;//记录表中有用信息的行数,有用信息是指除去表的标题和表的栏目,本例中表的用用信息是从第三行开始<br>    //确定有用的行数<br>    for (int k = 2; k < exceltable.rows.count; k++)<br>    if (storedata[k, 1] != "")<br>    excelbom++;<br>    if (excelbom == 0)<br>    ...{<br>    response.write("<script language=javascript>alert('您导入的表格不合格式!')&lt;&#47;script&gt;");<br>    }<br>    else<br>    ...{<br>    //loaddatatodatabase(storedata,excelbom)//该函数主要负责将 storedata 中有用的数据写入到数据库中,在此不是问题的关键省略 <br>    }<br><br>    }
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
长沙创驰贸易有限公司是正规公司吗
请将下述家蚕各个阶段的特点按生殖发育过程进
理科生现如今高考500分,能上什么大学?
QQ好友发来的视频文件下载下来了,打不开,用
补写出下列名句名篇中的空缺部分。? (6分)(1)
金砂的意思是什么啊?知道的请说下!
找好玩的游戏
尼康镜头全幅和半幅怎么区别?谢谢!
张庭说的TST活酵母真的有那么好用吗?
宁波大学附属医院住院单人间多少钱一天
下面关于人体生命活动的调节的叙述中错误的是
安马尼亚.泰斯塔(gianmaria testa)的资料
求问用电脑玩白猫用什么模拟器比较好
Time-泰鸡尾酒酒吧地址在什么地方,我要处理
浑浑噩噩的意思是什么啊?知道的请说下!
推荐资讯
艾子行水涂,见一庙矮小, 求译文
“二郎腿”一词有没有别的书面语啊?
泰兴宝丰汽车销售服务有限公司地址有知道的么
速眠科技最近推出一款专业改善睡眠的速眠系统
途观车窗玻璃升降异响
华硕笔记本玩英雄联盟读条的时候闪退
都市118酒店(凤凰中路)地址在什么地方,我要
牛羊保险怎么买
很好的朋友借了钱,好久了一直没提。现在需要
我管哥哥借了500元钱,管妹妹借了500元钱,自
草莓虾球的热量是多少?
【potential】havepotentialin还是havepotent
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?